Github Actions - 如何使我的 env 变量(存储在 .env 文件中)在我的工作流程中可用

Posted

技术标签:

【中文标题】Github Actions - 如何使我的 env 变量(存储在 .env 文件中)在我的工作流程中可用【英文标题】:Github Actions - How can I make my env variable(stored in .env file) available in my workflow 【发布时间】:2021-05-20 15:44:14 【问题描述】:

我会尽量说清楚。我也询问过相关问题,但没有得到令人信服的答复。 我正在使用 Reactfirebase 进行托管。 另外,我将 firebase Web API 密钥 存储在我的 .env 文件中。 我使用 Firebase CLI 设置了 Firebase 托管,并选择在合并或拉取请求时自动部署。 设置完成后,在我的工作目录中创建了一个带有 .yml 文件的 .github 文件夹。

   .github
      - workflows
          -firebase-hosting-merge.yml
          -firebase-hosting-pull-request.yml

所以现在当我通过运行 firebase deploy 手动将我的项目(不推送到 GitHub)部署到 Firebase 时,一切正常,我的应用程序已启动并运行。 但是,当我进行更改并将更改推送到 Github 时。触发 Github 操作并开始自动部署到 firebase 进程。构建通过了所有检查。但是,当我访问托管 URL 时,我在控制台中收到一个错误,提示 Your API key is invalid, please check you have copied it correctly.我尝试了一些解决方法,例如存储我的firebase Web API 密钥进入 Github 机密并在我的 .yml 文件中访问它。

# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools
 
name: Deploy to Firebase Hosting on merge
'on':
  push:
    branches:
      - master
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: npm ci && npm run build --prod
      - uses: FirebaseExtended/action-hosting-deploy@v0
        with:
          repoToken: '$ secrets.GITHUB_TOKEN '
          firebaseServiceAccount: '$ secrets.FIREBASE_SERVICE_ACCOUNT_EVENTS_EASY '
          channelId: live
          projectId: my-project
        env:
          REACT_APP_API_KEY: $secrets.REACT_APP_API_KEY
          FIREBASE_CLI_PREVIEWS: hostingchannels

但我仍然收到错误消息。我感觉这个错误肯定是环境变量造成的。 我已将我的 firebase Web API 密钥存储在位于根目录中的 .env.production 文件中。 不知何故,GitHub 操作没有使用我定义的环境变量。 请告诉我如何管理我的环境变量,以便我的工作流程可以访问它。

【问题讨论】:

看看这个动作,没有提到要包括额外的env。这是快速阅读。 感谢您的回复。我是 Github 操作的新手,请您解释一下。 这是您用于部署的操作的存储库:github.com/FirebaseExtended/action-hosting-deploy 我没有看到提及 env 示例,所以我不完全确定您可以做到。顺便说一句,当您说您将 API 密钥存储在根目录中时,您是指在 GitHub 上吗?如果是这样,您可能已经泄露了您的 API 令牌。 不,我将我的 API 密钥存储在 .env file 中,因为我已将它添加到 .gitignore file 中,所以它没有推送到 GitHub。我正在通过命令process.env.REACT_API_KEY 访问我的项目中的 API 密钥 需要的其他配置变量呢?像 storageBucketId、messagingId 等...? 【参考方案1】:

答案是将自定义环境变量放在作业之前的第一级:

name: Deploy to Firebase Hosting on merge
'on':
  push:
    branches:
      - master

env: # <--- here
  REACT_APP_API_KEY: $secrets.REACT_APP_API_KEY # <--- here

jobs:
  build_and_deploy:
...

并在 Github > 你的项目 > 设置 > 秘密中添加这个秘密

【讨论】:

你在这里完全救了我的命。为什么这在其他任何地方都不清楚?谢谢你真棒。【参考方案2】:

您可以使用Create Envfile Github Action 在您的工作流程中创建一个 .env 文件。

要向 envfile 添加密钥,请将密钥/对添加到 with: 部分。它必须以envkey_ 开头。

steps:
  - uses: actions/checkout@v2
  - name: Use Node.js
    uses: actions/setup-node@v1
  - name: Make envfile
    uses: SpicyPizza/create-envfile@v1
    with:
      envkey_REACT_APP_API_KEY: $secrets.REACT_APP_API_KEY
      directory: './'
      file_name: '.env'

【讨论】:

以上是关于Github Actions - 如何使我的 env 变量(存储在 .env 文件中)在我的工作流程中可用的主要内容,如果未能解决你的问题,请参考以下文章

如何从 GitHub Actions 获取我的日志文件?

如果出现错误,如何使我的 Github 操作失败

Github Actions - 如何在 CI 构建时将 SCSS 编译为 CSS?

如何使用 Github Actions 运行特定作业

GitHub Actions:如何通过终端访问当前构建的日志

如何使用 Github-actions 在 Docker 上使用 Mysql 运行 Prisma 迁移