Maison > Questions et réponses > le corps du texte
Je souhaite charger des variables Gitlab dans .env.Production dans une application VueJS afin de pouvoir utiliser process.env.VUE_APP_VARIABLE_NAME.
Ce que j'ai fait :
VUE_APP_EMAILJS_USER_ID=* VUE_APP_EMAILJS_SERVICE_ID=* VUE_APP_EMAILJS_TEMPLATE_ID=* VUE_APP_FIREBASE_API_KEY=* VUE_APP_FIREBASE_AUTH_DOMAIN=* VUE_APP_FIREBASE_PROJECT_ID=* VUE_APP_FIREBASE_STORAGE_BUCKET=* VUE_APP_FIREBASE_MESSAGING_SENDER_ID=* VUE_APP_FIREBASE_APP_ID=* VUE_APP_FIREBASE_MEASUREMENT_ID=*
build-docker-image: stage: build before_script: # $CI_JOB_TOKEN is variable automatically added by Gitlab: see https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#variables-reference - echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token registry.gitlab.com --password-stdin script: # build and push docker image to gitlab registry - docker pull $GITLAB_IMAGE || true # Allows us to use --cache-from - docker build --build-arg VUE_APP_EMAILJS_USER_ID=$VUE_APP_EMAILJS_USER_ID --build-arg VUE_APP_EMAILJS_SERVICE_ID=$VUE_APP_EMAILJS_SERVICE_ID --build-arg VUE_APP_EMAILJS_TEMPLATE_ID=$VUE_APP_EMAILJS_TEMPLATE_ID --build-arg VUE_APP_FIREBASE_API_KEY=$VUE_APP_FIREBASE_API_KEY --build-arg VUE_APP_FIREBASE_AUTH_DOMAIN=$VUE_APP_FIREBASE_AUTH_DOMAIN --build-arg VUE_APP_FIREBASE_PROJECT_ID=$VUE_APP_FIREBASE_PROJECT_ID --build-arg VUE_APP_FIREBASE_STORAGE_BUCKET=$VUE_APP_FIREBASE_STORAGE_BUCKET --build-arg VUE_APP_FIREBASE_MESSAGING_SENDER_ID=$VUE_APP_FIREBASE_MESSAGING_SENDER_ID --build-arg VUE_APP_FIREBASE_APP_ID=$VUE_APP_FIREBASE_APP_ID --build-arg VUE_APP_FIREBASE_MEASUREMENT_ID=$VUE_APP_FIREBASE_MEASUREMENT_ID --cache-from $GITLAB_IMAGE -t $GITLAB_IMAGE:$CI_COMMIT_SHA . - docker push $GITLAB_IMAGE:$CI_COMMIT_SHA
FROM node:14.18 as build-stage WORKDIR /app COPY package*.json ./ COPY yarn.lock ./ RUN yarn install COPY . . # pass Docker varibales to VueJS environment varibales ARG VUE_APP_EMAILJS_USER_ID ENV VUE_APP_EMAILJS_USER_ID $VUE_APP_EMAILJS_USER_ID ARG VUE_APP_EMAILJS_SERVICE_ID ENV VUE_APP_EMAILJS_SERVICE_ID $VUE_APP_EMAILJS_SERVICE_ID ARG VUE_APP_EMAILJS_TEMPLATE_ID ENV VUE_APP_EMAILJS_TEMPLATE_ID $VUE_APP_EMAILJS_TEMPLATE_ID ARG VUE_APP_FIREBASE_API_KEY ENV VUE_APP_FIREBASE_API_KEY $VUE_APP_FIREBASE_API_KEY ARG VUE_APP_FIREBASE_AUTH_DOMAIN ENV VUE_APP_FIREBASE_AUTH_DOMAIN $VUE_APP_FIREBASE_AUTH_DOMAIN ARG VUE_APP_FIREBASE_PROJECT_ID ENV VUE_APP_FIREBASE_PROJECT_ID $VUE_APP_FIREBASE_PROJECT_ID ARG VUE_APP_FIREBASE_STORAGE_BUCKET ENV VUE_APP_FIREBASE_STORAGE_BUCKET $VUE_APP_FIREBASE_STORAGE_BUCKET ARG VUE_APP_FIREBASE_MESSAGING_SENDER_ID ENV VUE_APP_FIREBASE_MESSAGING_SENDER_ID $VUE_APP_FIREBASE_MESSAGING_SENDER_ID ARG VUE_APP_FIREBASE_APP_ID ENV VUE_APP_FIREBASE_APP_ID $VUE_APP_FIREBASE_APP_ID ARG VUE_APP_FIREBASE_MEASUREMENT_ID ENV VUE_APP_FIREBASE_MEASUREMENT_ID $VUE_APP_FIREBASE_MEASUREMENT_ID # build the application RUN yarn build FROM nginx:1.19 as production-stage RUN mkdir /app COPY --from=build-stage /app/dist /app COPY nginx.conf /etc/nginx/nginx.conf
Mais je ne reçois que des valeurs nulles pour toutes les variables
Est-ce que quelqu'un sait ce qui ne va pas avec ma solution ? Ou avez-vous une autre solution pour réaliser ce que je souhaite faire ?
P粉6681137682024-03-27 10:52:20
Je pense que vous avez fait du bon travail mais vous avez oublié de transmettre ENV sur le Dockerfile
J'ai la même configuration mais en les passant en utilisant le symbole =
, par exemple :
FROM node:14.18 as build-stage WORKDIR /app COPY package*.json yarn.lock ./ RUN yarn install COPY . . # pass Docker varibales to VueJS environment varibales ARG VUE_APP_FIREBASE_APP_ID \ VUE_APP_EMAILJS_USER_ID \ VUE_APP_FIREBASE_API_KEY \ VUE_APP_EMAILJS_SERVICE_ID \ VUE_APP_EMAILJS_TEMPLATE_ID \ VUE_APP_FIREBASE_PROJECT_ID \ VUE_APP_FIREBASE_AUTH_DOMAIN \ VUE_APP_FIREBASE_STORAGE_BUCKET \ VUE_APP_FIREBASE_MEASUREMENT_ID \ VUE_APP_FIREBASE_MESSAGING_SENDER_ID ENV VUE_APP_FIREBASE_APP_ID=$VUE_APP_FIREBASE_APP_ID \ VUE_APP_EMAILJS_USER_ID=$VUE_APP_EMAILJS_USER_ID \ VUE_APP_FIREBASE_API_KEY=$VUE_APP_FIREBASE_API_KEY \ VUE_APP_EMAILJS_SERVICE_ID=$VUE_APP_EMAILJS_SERVICE_ID \ VUE_APP_EMAILJS_TEMPLATE_ID=$VUE_APP_EMAILJS_TEMPLATE_ID \ VUE_APP_FIREBASE_PROJECT_ID=$VUE_APP_FIREBASE_PROJECT_ID \ VUE_APP_FIREBASE_AUTH_DOMAIN=$VUE_APP_FIREBASE_AUTH_DOMAIN \ VUE_APP_FIREBASE_STORAGE_BUCKET=$VUE_APP_FIREBASE_STORAGE_BUCKET \ VUE_APP_FIREBASE_MEASUREMENT_ID=$VUE_APP_FIREBASE_MEASUREMENT_ID \ VUE_APP_FIREBASE_MESSAGING_SENDER_ID=$VUE_APP_FIREBASE_MESSAGING_SENDER_ID # build the application RUN yarn build FROM nginx:1.19 as production-stage RUN mkdir /app COPY --from=build-stage /app/dist /app COPY nginx.conf /etc/nginx/nginx.conf CMD ["nginx", "-g", "daemon off;"]
Pour séparer les environnements de développement et de production, vous pouvez ajouter DEV_ et MAIN_ avant le nom de l'environnement sur vos fichiers d'environnement Gitlab CI/CD et .gitlab-ci.yml, comme :
build-docker-image-develop:
stage: build
before_script:
# $CI_JOB_TOKEN is variable automatically added by Gitlab: see https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#variables-reference
- echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token registry.gitlab.com --password-stdin
script:
# build and push docker image to gitlab registry
- docker pull $GITLAB_IMAGE || true # Allows us to use --cache-from
- docker build
--build-arg VUE_APP_EMAILJS_USER_ID=$DEV_VUE_APP_EMAILJS_USER_ID
--build-arg VUE_APP_FIREBASE_APP_ID=$DEV_VUE_APP_FIREBASE_APP_ID
--build-arg VUE_APP_FIREBASE_API_KEY=$DEV_VUE_APP_FIREBASE_API_KEY
--build-arg VUE_APP_EMAILJS_SERVICE_ID=$DEV_VUE_APP_EMAILJS_SERVICE_ID
--build-arg VUE_APP_EMAILJS_TEMPLATE_ID=$DEV_VUE_APP_EMAILJS_TEMPLATE_ID
--build-arg VUE_APP_FIREBASE_PROJECT_ID=$DEV_VUE_APP_FIREBASE_PROJECT_ID
--build-arg VUE_APP_FIREBASE_AUTH_DOMAIN=$DEV_VUE_APP_FIREBASE_AUTH_DOMAIN
--build-arg VUE_APP_FIREBASE_MEASUREMENT_ID=$DEV_VUE_APP_FIREBASE_MEASUREMENT_ID
--build-arg VUE_APP_FIREBASE_STORAGE_BUCKET=$DEV_VUE_APP_FIREBASE_STORAGE_BUCKET
--build-arg VUE_APP_FIREBASE_MESSAGING_SENDER_ID=$DEV_VUE_APP_FIREBASE_MESSAGING_SENDER_ID
--cache-from $GITLAB_IMAGE -t $GITLAB_IMAGE:$CI_COMMIT_SHA .
- docker push $GITLAB_IMAGE:$CI_COMMIT_SHA
only:
- develop
tags:
- docker-build
#### production
build-docker-image-main:
stage: build
before_script:
# $CI_JOB_TOKEN is variable automatically added by Gitlab: see https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#variables-reference
- echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token registry.gitlab.com --password-stdin
script:
# build and push docker image to gitlab registry
- docker pull $GITLAB_IMAGE || true # Allows us to use --cache-from
- docker build
--build-arg VUE_APP_EMAILJS_USER_ID=$MAIN_VUE_APP_EMAILJS_USER_ID
--build-arg VUE_APP_FIREBASE_APP_ID=$MAIN_VUE_APP_FIREBASE_APP_ID
--build-arg VUE_APP_FIREBASE_API_KEY=$MAIN_VUE_APP_FIREBASE_API_KEY
--build-arg VUE_APP_EMAILJS_SERVICE_ID=$MAIN_VUE_APP_EMAILJS_SERVICE_ID
--build-arg VUE_APP_EMAILJS_TEMPLATE_ID=$MAIN_VUE_APP_EMAILJS_TEMPLATE_ID
--build-arg VUE_APP_FIREBASE_PROJECT_ID=$MAIN_VUE_APP_FIREBASE_PROJECT_ID
--build-arg VUE_APP_FIREBASE_AUTH_DOMAIN=$MAIN_VUE_APP_FIREBASE_AUTH_DOMAIN
--build-arg VUE_APP_FIREBASE_MEASUREMENT_ID=$MAIN_VUE_APP_FIREBASE_MEASUREMENT_ID
--build-arg VUE_APP_FIREBASE_STORAGE_BUCKET=$MAIN_VUE_APP_FIREBASE_STORAGE_BUCKET
--build-arg VUE_APP_FIREBASE_MESSAGING_SENDER_ID=$MAIN_VUE_APP_FIREBASE_MESSAGING_SENDER_ID
--cache-from $GITLAB_IMAGE -t $GITLAB_IMAGE:$CI_COMMIT_SHA .
- docker push $GITLAB_IMAGE:$CI_COMMIT_SHA
only:
- main
tags:
- docker-build