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

Posted

技术标签:

【中文标题】如何获取主机存储库的 GitHub 机密作为 github 操作的输入?【英文标题】:How to get GitHub secrets of host repository as input in github action? 【发布时间】:2021-08-12 16:24:53 【问题描述】:

我们有一个名为 recent-activity 的存储库,它托管一个 GitHub 操作,可供所有 GitHub 用户使用。我们想要添加一个 URL,当操作(由任何用户)运行时,我们可以在该 URL 上发送 http 请求。但是,我们不想公开该 URL。

有什么办法可以做到吗?

【问题讨论】:

【参考方案1】:

您可以通过指定名称直接将存储库中的机密包含到工作流中。假设您有一个名为 URL 的秘密,那么您可以像这样简单地使用它:

env:
     URL: $ secrets.URL 

现在您的 URL 已获取,您可以在其他命令中使用它,例如 $URL

【讨论】:

但是,我们不希望用户修改它。 你这是什么意思?用户如何修改它? 用户可以通过放置自己的环境变量来修改它吗? 我发布的 sn-p 应该放在你的 GitHub 操作 yml 文件中。抱歉,我不确定您所说的用户可以修改它是什么意思。 我尝试了你的建议。 Error: Readme-Workflows/recent-activity/github-secret/action.yml (Line: 20, Col: 9): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.TEST_SECRET。这是我在另一个 repo 上运行工作流时遇到的错误【参考方案2】:

您可以在官方文档中找到有关Github Secrets 的所有信息

请注意,存储库用户无权访问密钥,因为您需要 admin 权限才能编辑密钥值。此外,秘密不会显示在操作工作流执行中(它们将在日志中替换为 ***)。

每个人都将在工作流程中以相同的方式使用此秘密变量,而无法访问其值。

演示

Personal workflow example 步骤打印秘密值的输出如下图所示:

【讨论】:

这是用户使用工作流的过程,而我是工作流的开发者。当他们使用我的工作流程时,我不想与任何人共享 URL。所以用户不必添加任何秘密。每当任何用户使用工作流时,我都希望将请求发送到相同的 URL。但 URL 必须对所有人保密。我已更新我的问题以使其更清楚。 这正是秘密工作的方式。添加密码的不是用户,会(作为 repo 管理员)。然后,每个人都将在工作流中以相同的方式使用这个秘密变量,而无法访问它的值。 我在这个 repo 中添加了秘密:github.com/Readme-Workflows/recent-activity。我在这里使用该工作流程:github.com/abhijoshi2k/abhijoshi2k/blob/master/.github/…。但我无法获得变量。 TEST_SECRET 是秘密变量。 Readme-Workflows/recent-activity@github-actions 似乎不是一个可用的操作(因此您使用的语法可能不起作用)。您是否尝试仅在特定步骤上使用,就像我在 Run command with Secret 步骤的帖子示例中给出的那样? (例如,如果您尝试打印机密,工作流将返回 ***,如果未设置机密,则应返回错误)。 它是@github-secrets,它是该仓库的一个分支。当我在 github.com/abhijoshi2k/abhijoshi2k 添加秘密时,我得到了 *** 输出。但是,我想在github.com/Readme-Workflows/recent-activity 中添加秘密,并在abhijoshi2k repo 运行工作流时使其可访问。

以上是关于如何获取主机存储库的 GitHub 机密作为 github 操作的输入?的主要内容,如果未能解决你的问题,请参考以下文章

通过一次调用从 Github Graphql API 获取有关多个存储库的信息

如何分配单独的内存来存储机密数据?

如何保护生产凭证免受 Github Action 的影响?

如何获得GitHub存储库的贡献者总数?

如何使用存储在保险库中的 github-private-key 安全地使用大厅

在 GitHub 上创建一个存储库的子目录并将其作为我自己的存储库的一部分