如何在 GitHub Action 上参数化机密

Posted

技术标签:

【中文标题】如何在 GitHub Action 上参数化机密【英文标题】:How to parameterize secrets on GitHub Action 【发布时间】:2021-10-24 23:41:37 【问题描述】:

我们在存储库 (dev/prd) 中有两个分支,每个分支代表一个部署环境。我们还有每个分支的 GitHub action secret,在 dev 分支中应该是 dev_react_api,在 prd 分支中应该是 prd_react_api。

现在我们正在使用这些秘密secrets.dev_react_api 和secrets.prd_react_api 开发一个GitHub 操作工作流

有没有像下面这样参数化 GitHub 操作机密的解决方案?

# only pseudo-code
env:
  branch_name: github.ref

secrets["$env.branch_name_react_api"]

【问题讨论】:

【参考方案1】:

它应该与您使用动态名称显示的完全一样。 secrets 只是一个变量,您可以显式提供密钥名称 secrets.x 隐式 secrets['x']。动态地构建你的密钥就可以了。额外的 env branch_name 也不需要,因为您可以直接在字符串中获取该值。

如果您有付费的 GitHub 计划或正在使用公共存储库,您还可以查看 Environments,它通过定义两个单独的环境来完全解决这个问题,每个环境都具有所需的秘密。

【讨论】:

您好,感谢您的提示。当我尝试做秘密时,很遗憾得到一个“意外符号”错误[“x”] 抱歉,仅适用于 ' 而不是 "。也固定在答案中。所以使用secrets['x'],其中x 是你的环境变量 感谢您的评论。抱歉,弹出另一个问题。似乎不可能在 secrets 上下文中引用环境变量,因为 secrets["$env.branch_name_react_api"] 给了我一个空字符串 不确定是否可以从 GH Actions 内部块引用 env 变量,因为 env 已经处于较低的运行器级别。您可能还需要在秘密检索中单独使用 github.ref。另外请记住,github.ref 的格式为refs/heads/main,因此您需要在使用之前对其进行清理 非常感谢您的努力。通过使用 $ github.ref == 'refs/heads/dev' && secrets['DEV_AWS_S3_BUCKET'] || 解决了参考问题秘密['PRD_AWS_S3_BUCKET']

以上是关于如何在 GitHub Action 上参数化机密的主要内容,如果未能解决你的问题,请参考以下文章

如何获取主机存储库的 GitHub 机密作为 github 操作的输入?

如何从 Github 工作流访问环境机密?

GitHub Action appleboy/ssh-action:如何避免 SSH 密钥出现在服务器上?

使用带有 github 操作的 Flutter Web 时如何访问机密

使用 Github 操作将 .env 机密添加到在 Firebase 托管上部署的 Nuxt 应用程序

《Java 8 in Action》Chapter 2:通过行为参数化传递代码