如何使用可重用的 GitHub 工作流程并将秘密保存在一个地方?

sor*_*rin 18 github-actions

虽然可重用的 GitHub 工作流程确实有助于维护 GitHub Actions,减少从一个存储库到另一个存储库的大量复制/粘贴,但它们似乎仍然存在一个大问题:处理机密。

当实现“发布到 Slack”或“发布到矩阵/IRC”之类的操作时,您将需要机器人帐户的一些机密,如果您想在 50 个存储库中重用此操作,您可以想象在管理每个存储库中的机密时无法扩展。

我正在寻找解决此问题的方法,该解决方案不涉及使用操作将秘密部署到所有存储库,或者以某种方式集中它们。

请记住,可重用的工作流程可以跨组织工作,并且我已经在 4 个以上的组织之间共享了其中一些工作流程。因此,配置组织级别的机密也不是解决方案,还有其他原因:它们很容易暴露,因为它们可用于任何工作流程(而不是基于环境的工作流程)。

Von*_*onC 14

检查新的(2022 年 5 月)关键字secrets: inherit是否有帮助:

GitHub Actions:通过可重用工作流程简化机密的使用

GitHub Actions 通过带有secrets: inherit关键字的可重用工作流程简化了机密的使用。

以前,将机密传递给可重用工作流程时,您必须将每个机密作为单独的参数传递。

现在,您可以简单地将 传递secrets: inherit给可重用工作流程,并且秘密将从调用工作流程继承。

了解有关GitHub Actionsjobs.<job_id>.steps[*].uses.

在可重用工作流程中,引用您在上一步中的 on 键中定义的输入或密钥。

如果使用 继承机密secrets: inherit,则即使它们未在 on 键中定义,您也可以引用它们。

jobs:
 reusable_workflow_job:
   runs-on: ubuntu-latest
   environment: production
   steps:
     - uses: ./.github/workflows/my-action
       with:
         username: ${{ inputs.username }}
         token: ${{ secrets.envPAT }}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,envPAT是已添加到生产环境中的环境机密。因此,该环境在作业中被引用。

注意:环境机密是存储在您为存储库定义的环境中的加密字符串。
环境机密仅适用于引用适当环境的工作流作业。
有关详细信息,请参阅“使用环境进行部署” 。

再次,请参阅jobs.<job_id>.steps[*].uses参考资料 中的其他示例。


正如wkhaatch评论中指出的那样:

我不认为此语法对于使用可重用工作流程是正确的,但对于使用可重用操作是正确的
您不能将可重用工作流作为步骤来调用,但可以通过操作来调用。