Как добавить файл .env в gitlab ci на этапе развертывания? - PullRequest
0 голосов
/ 27 сентября 2018

Итак, у меня в репо есть приложение реагировать / набирать текст, над которым я работаю, и в репо у меня есть файл .env, который я игнорирую, чтобы мои секреты не были раскрыты, и пример .envфайл важных переменных среды для настройки.Моя проблема в том, что я не помещаю файл .env в репозиторий, когда развертываю свое приложение с помощью google app engine (это делается на этапе развертывания в моем gitlab-ci.yml file), эти переменные среды не будут присутствовать в рабочей среде, и мне нужно, чтобы они работали в моем приложении, поскольку я делаю что-то подобное в моем файле webpack.config.js.

const dotenv = require('dotenv').config({ path: __dirname + '/.env' });

а затем

new webpack.DefinePlugin({
  'process.env': dotenv.parsed
})

Вот мой файл .gitlab-ci для справки на случай, если кто-то здесь захочет увидеть.

cache:
  paths:
    - node_modules/

stages:
  - build
  - test
  - deploy

Build_Site:
  image: node:8-alpine
  stage: build
  script:
    - npm install --progress=false
    - npm run-script build
  artifacts:
    expire_in: 1 week
    paths:
      - build

Run_Tests:
  image: node:8-alpine
  stage: test
  script:
    - npm install --progress=false
    - npm run-script test

Deploy_Production:
  image: google/cloud-sdk:latest
  stage: deploy
  environment: Production
  only:
    - master
  script:
    - echo $DEPLOY_KEY_FILE_PRODUCTION > /tmp/$CI_PIPELINE_ID.json
    - gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
    - gcloud config set project $PROJECT_ID_PRODUCTION
    - gcloud info
    - gcloud --quiet app deploy
  after_script:
    - rm /tmp/$CI_PIPELINE_ID.json

Кроме того, не стесняйтесь критиковать мой gitlab-ci.ymlфайл, чтобы я мог сделать его лучше.

1 Ответ

0 голосов
/ 08 апреля 2019

Не знаю, нужно ли вам это по-прежнему, но именно так я и добился, чего вы хотели.

  1. Создайте переменные окружения в вашей конфигурации репозитория gitlab

  2. Создать setup_env.sh:

#!/bin/bash

echo $API_URL >> .env
echo $NODE_ENV >> .env
Измените ваш .gitlab-ci.yml.Поднимитесь ниже в свой before_script: раздел
  - chmod +x ./setup_env.sh
  - ./setup_env.sh
В webpack.config.js используйте https://www.npmjs.com/package/dotenv
require('dotenv').config();

Это передает ваши .env переменные, доступные в webpack.config.js файле.

Добавьте это к вашему *Массив 1031 * (добавьте те переменные, которые вам нужны):

    new webpack.DefinePlugin({
      'process.env.API_URL': JSON.stringify(process.env.API_URL),
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
      ...
    })

Теперь в вашем развертывании должны использоваться переменные среды, указанные в ваших настройках gitlab.

...