所以我在我的 repo 中有一个正在处理的 react/typescript 应用程序,在我的 repo 中有一个我忽略的 .env 文件,这样我的 secret 就不会暴露,还有一个 .env-example要配置的重要环境变量文件。我的问题是,由于我没有将 .env 文件推送到我的存储库,所以当我通过 google app engine 部署我的应用程序时(这是在我的 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 文件,以便我改进它。
最佳答案
我不知道你是否还需要这个,但这就是我实现的方式,你想要的。
在您的 gitlab 存储库配置中创建您的环境变量
创建
setup_env.sh
:
#!/bin/bash
echo API_URL=$API_URL >> .env
echo NODE_ENV=$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();
这会传递 webpack.config.js
文件中可用的 .env
变量。
将其添加到您的 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 设置中指定的环境变量。
关于google-app-engine - 如何在部署阶段在 gitlab ci 中添加 .env 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52540316/