所以我在回购中有一个我正在处理的react / typescript应用程序,在回购中有一个.env文件,我忽略了它,以便不会泄露我的秘密,并提供一个.env-example要配置的重要环境变量的文件。我的问题是,由于我没有将.env文件推送到我的存储库中,因此当我通过 google app引擎部署应用时(这是在 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文件,以便我做得更好。
答案 0 :(得分:2)
我不知道您是否仍然需要此功能,但这就是我实现的目标。
在gitlab存储库配置中创建环境变量
创建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
变量。
将此添加到您的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设置中指定的环境变量。