Github 的“环境”和“存储库”秘密之间的区别?

Ada*_*dam 15 continuous-integration github environment-variables continuous-deployment github-actions

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

我的问题是:

  1. EnvironmentRepositorysecret和有什么不一样?
  2. Environment什么时候应该使用秘密?
  3. Repository什么时候应该使用秘密?

Hol*_*ust 18

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

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

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

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

  • 只是为了检查我是否正确理解这一点,基本上,如果我有“开发”、“测试”和“生产”的变量,我将为它们中的每一个创建一个“环境”,并在那里放置唯一的变量,然后将公共的“存储库”变量中的变量? (9认同)
  • 当我必须在 GitHub 上设置秘密时,我总是感到沮丧,直到今天看到你的答案。非常感谢! (2认同)

Nic*_*yme 10

通过示例工作流程添加到Holger Just 的答案中。GitHub文档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
      - name: Run node build process
        run: "NODE_ENV=${{ env.NODE_ENV }} npm run build"
  dev-task:
    runs-on: ubuntu-latest
    environment: development
    steps:
      # uses development enviroment secrets over repository secrets
      - name: Run node build process
        run: "NODE_ENV=${{ env.NODE_ENV }} npm run build"
  task:
    runs-on: ubuntu-latest
    steps:
      # uses repository secrets as no environment is defined
      - name: Run node build process
        run: "NODE_ENV=${{ env.NODE_ENV }} npm run build"
Run Code Online (Sandbox Code Playgroud)

注意:在上面的示例中,您可以看到脚本使用表达式通过env上下文访问环境变量。

因此,我们的想法是,当environment为 a 指定an 时,该作业job使用的任何机密都将在使用存储库机密之前使用任何特定的机密。environment

要设置环境机密,请导航至“环境”部分下的存储库设置(即https://github.com/<owner>/<repo>/settings/environments)。创建或选择环境。然后添加您需要的任何秘密,请参见下面的屏幕截图。确保在访问它的所有必需环境中提供秘密,否则该值将从父env范围继承或可能返回''

在此输入图像描述

  • 需要更多演示代码来展示如何使用环境机密 (2认同)
  • 查看要发布的更新。另请参阅此[文档页面](https://docs.github.com/en/actions/learn-github-actions/environment-variables)以获取更多说明。 (2认同)