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 操作的主要内容,如果未能解决你的问题,请参考以下文章

环境变量不适用于带有 Nuxt 的 Vercel

环境变量不适用于 IntelliJ IDEA HTTP 客户端

状态变量钩子不适用于 useEffect 回调

存储指向成员函数的指针不适用于 clang++

部分唤醒锁不适用于 android wear

为啥 Slime 检查仅适用于鼠标单击而不适用于键盘命令?