如何在部署阶段在gitlab ci中添加.env文件?

问题描述 投票:2回答:1

所以我在我的仓库中有一个react / typescript应用程序,我正在处理,在我的仓库中,我有一个我忽略的.env文件,这样我的秘密就不会暴露出来了。重要的.env-example文件要配置的环境变量。我的问题是,因为我没有将.env文件推送到我的仓库,当我通过谷歌应用程序引擎部署我的应用程序时(这是在我的gitlab-ci.yml文件的部署阶段完成),这些环境变量将没有出现在生产中我需要它们为我的应用程序工作,因为我在我的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文件,这样我就可以做得更好。

google-app-engine google-cloud-platform gitlab gitlab-ci
1个回答
4
投票

我不知道你是否仍然需要这个,但这就是我的成就,你想要的。

  1. 在gitlab repo config中创建环境变量
  2. 创建setup_env.sh
#!/bin/bash

echo $API_URL >> .env
echo $NODE_ENV >> .env
  1. 修改你的.gitlab-ci.yml。在下面插入您的before_script:部分
  - chmod +x ./setup_env.sh
  - ./setup_env.sh
  1. webpack.config.js使用https://www.npmjs.com/package/dotenv
require('dotenv').config();

这会传递.env文件中提供的webpack.config.js变量。

将其添加到plugins数组中(添加所需的变量):

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

现在,您的部署应该使用gitlab设置中指定的环境变量。

© www.soinside.com 2019 - 2024. All rights reserved.