Maison  >  Questions et réponses  >  le corps du texte

Comment charger des variables de gitlab vers .env VueJS

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 :

  1. Créez des variables dans la configuration GitLab CI/CD
  2. Créez le fichier .env.product :
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=*
  1. my.gitlab-ci.yml
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
  1. Configuration.Dockerfile
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粉682987577P粉682987577206 Il y a quelques jours341

répondre à tous(1)je répondrai

  • P粉668113768

    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
    

    répondre
    0
  • Annulerrépondre