Github 的 "Environment" 和 "Repository" 秘密之间的区别?

Difference between Github's "Environment" and "Repository" secrets?

在GitHubdocumentation中表示secrets的优先级从低到高(Environment>Repository>Organization),它还指出 Organization 机密可用于组织中的所有存储库。但它没有说明任何关于 EnvironmentRepository 的秘密。

我的问题是:

  1. EnvironmentRepository 秘密有什么区别?
  2. 我什么时候应该使用 Environment 秘密?
  3. 我什么时候应该使用 Repository 机密?

好吧,环境机密特定于 Github 中的 environment 操作,允许您 运行 为单个存储库中的作业配置不同的配置,例如先部署到暂存区,然后再部署到生产环境。

存储库机密特定于单个存储库(以及其中使用的所有环境),而组织机密特定于整个组织及其下的所有存储库。

如果您有特定于环境的机密,则可以使用环境机密。

如果您不确定,您也可以从所有内容的存储库机密开始。如果您稍后引入需要不同秘密的不同环境,您可以将存储库秘密移动到特定环境。由于继承链,这对作业应该是透明的。

添加到工作流程中的 Holger Just's answer with an example workflow. The GitHub docs show an example when using the jobs.<job_id>.environment 选项,但我认为这是一个更合适的示例。

name: Some task

on:
  push:
    branches:
      - main

jobs:
  prod-task:
    runs-on: ubuntu-latest
    environment: production
    steps:
      # uses production enviroment secrets over repository secrets
  dev-task:
    runs-on: ubuntu-latest
    environment: development
    steps:
      # uses development enviroment secrets over repository secrets
  task:
    runs-on: ubuntu-latest
    steps:
      # uses repository secrets as no environment is defined

所以想法是,当为 job 指定 environment 时,在 该作业中使用的任何秘密 将使用任何 environment-specific secret before using the repository secret.