Как сделать одну сборку с приложением GitLab для Vue с несколькими файлами .env - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть простой файл .gitlab-ci.yml, который создает мое приложение Vue. Я собираю один раз, а затем развертываю папку dist в различных средах:

stages:
  - build
  - deploy_dev
  - deploy_stg
  - deploy_prd

build: 
  image: node:latest  # Pull Node image
  stage: build
  script: 
    - npm install -g @vue/cli@latest
    - npm install
    - npm run build
  artifacts:
    expire_in: 2 weeks
    paths:
      - dist/

deploy_to_dev:
  image: python:latest
  stage: deploy_dev
  dependencies:
    - build
  only:
    - master  # Only deply master branch automatically to Dev
  script:
    - export AWS_ACCESS_KEY_ID=$DEV_AWS_ACCESS_ID
    - export AWS_SECRET_ACCESS_KEY=$DEV_AWS_ACCESS_KEY
    - pip install awscli  # Install AWS CLI
    - aws s3 sync ./dist s3://$DEV_BUCKET

Все это прекрасно работает, однако я сейчас ввел некоторую конфигурацию и строю свое приложение по-разному для каждой среды - для 3 сред У меня есть 3 разные команды сборки. Например, у меня есть .env.production, поэтому для производственной сборки моя команда выглядит так:

npm run build -- --mode production

Есть ли способ обойтись, если для каждой среды используются разные сборки, но при этом все еще используются файлы .env, основанные на GitLab? переменная

1 Ответ

0 голосов
/ 04 февраля 2020

Вы должны разделить свою работу по сборке, чтобы иметь по одному для каждой среды, и использовать концепцию environment , чтобы получить нечто подобное для dev и production envs:

.build_template: &build_template
image: node:latest  # Pull Node image
script: 
  - npm install -g @vue/cli@latest
  - npm install 
  - npm run build -- --mode $CI_ENVIRONMENT_NAME

build_dev:
  stage: build_dev
  <<: *build_template  
  environment:
    name: dev

build_prod:
  stage: build_prod
  <<: *build_template      
  environment:
    name: production

В этом фрагменте я использовал якорей , чтобы избежать дублирования строк.

...