dotenv-webpack 环境变量不适用于 Github 操作
Posted
技术标签:
【中文标题】dotenv-webpack 环境变量不适用于 Github 操作【英文标题】:dotenv-webpack enviornment variables not working on Github actions 【发布时间】:2021-11-19 06:21:36 【问题描述】:我正在使用dotenv-webpack
设置来自webpack
的环境变量。然后将我的代码构建推送到 S3。我在本地设置了.env
文件,其中APP_BASE = http://localhost:3000
在.env
内。
我已经创建了 github 动作 workflow.yml
:
name: React CI
on:
push:
branches:
- "main"
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [15.x]
steps:
- uses: actions/checkout@v1
- run: npm install
- run: npm run build
- uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: $ secrets.AWS_S3_BUCKET
AWS_ACCESS_KEY_ID: $ secrets.AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $ secrets.AWS_SECRET_ACCESS_KEY
AWS_REGION: "ap-southeast-2"
SOURCE_DIR: "dist"
APP_BASE: $ secrets.APP_BASE
在我的 github 操作秘密中,我添加了秘密:
在 webpack 设置上,我设置了systemvars: true
:
plugins: [
new Dotenv(
systemvars: true,
),
它在我的本地主机上运行。
我没有将 .env
文件提交到我的存储库,当我将代码推送到 github 时,github 控制台输出:Failed to load ./.env.
。
当我检查编译文件时,它显示var e="MISSING_ENV_VAR".APP_BASE;
。这意味着 github 操作没有捕捉到秘密中的APP_BASE
。
我该如何解决这个问题?
【问题讨论】:
如果没有.env
文件,你不能在 CI webpack 构建中使用 DotEnv
插件,可以吗?
【参考方案1】:
一种可能性是将.env
提交到您的存储库,其值适合本地开发且不包含真正的秘密。然后将你所有的秘密放在 GitHub 中,当 CI 运行时,本地 dev 值将通过 systemvars
设置被 GitHub secrets 中的值覆盖。
【讨论】:
我已将systemvars
设置为 true
并添加 GitHub Secrets。但不工作。
因为你必须提交.env
文件。【参考方案2】:
我发现了错误,我应该将 env 变量移到更高级别,因为我当前放置的是 S3 上的任务,而不是构建。
name: React CI
on:
push:
branches:
- "main"
env:
APP_BASE: $ secrets.APP_BASE
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [15.x]
steps:
- uses: actions/checkout@v1
- run: npm install
- run: npm run build
- uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: $ secrets.AWS_S3_BUCKET
AWS_ACCESS_KEY_ID: $ secrets.AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $ secrets.AWS_SECRET_ACCESS_KEY
AWS_REGION: "ap-southeast-2"
SOURCE_DIR: "dist"
【讨论】:
以上是关于dotenv-webpack 环境变量不适用于 Github 操作的主要内容,如果未能解决你的问题,请参考以下文章