添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Skip to main content

在变量中存储信息

GitHub 为每个 GitHub Actions 工作流运行设置默认变量。 你还可以设置自定义变量,以便在单个工作流或多个工作流中使用。

关于变量

变量提供了一种存储和重用非敏感配置信息的方法。 可以将任何配置数据(如编译器标志、用户名或服务器名称)存储为变量。 变量在运行工作流的运行器计算机上插值。 在操作或工作流步骤中运行的命令可以创建、读取和修改变量。

可以设置自己的自定义变量,也可以使用 GitHub 自动设置的默认环境变量。 有关详细信息,请参阅“ 默认环境变量 ”。

可以通过两种方式设置自定义变量。

  • 若要定义要在单个工作流中使用的环境变量,可以在工作流文件中使用 env 键。 有关详细信息,请参阅“ 为单个工作流定义环境变量 ”。
  • 若要跨多个工作流定义配置变量,可以在组织、存储库或环境级别定义它。 有关详细信息,请参阅“ 为多个工作流定义配置变量 ”。
  • Warning

    默认情况下,变量在生成输出中未经屏蔽地呈现。 如果需要提高敏感信息(如密码)的安全性,请改用机密。 有关详细信息,请参阅“ 在 GitHub Actions 中使用机密 ”。

    为单个工作流定义环境变量

    若要设置单个工作流的自定义环境变量,可以在工作流文件中使用 env 键进行定义。 此方法设置的自定义变量的作用域仅限于在其中定义它的元素。 可以定义作用域如下的变量:

  • 整个工作流,方法是在工作流文件的顶层使用 env
  • 工作流中的作业内容,方法是使用 jobs.<job_id>.env
  • 作业中的特定步骤,方法是使用 jobs.<job_id>.steps[*].env
  • YAML
    name: Greeting on variable day
      workflow_dispatch
      DAY_OF_WEEK: Monday
    jobs:
      greeting_job:
        runs-on: ubuntu-latest
          Greeting: Hello
        steps:
          - name: "Say Hello Mona it's Monday"
            run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
              First_Name: Mona
    

    可以使用运行器环境变量或上下文访问 env 变量值。 上面的示例显示了要在 echo 命令中用作运行器环境变量的 3 个自定义变量:$DAY_OF_WEEK$Greeting$First_Name。 这些变量的值分别在工作流、作业和步骤级别设置和定义作用域。 这些变量的内插发生在运行器上。

    工作流或引用操作 run 步骤中的命令由在运行器上使用的 shell 处理。 工作流其他部件中的指令由 GitHub Actions 处理,不会发送到运行器。 可以在 run 步骤中使用运行器环境变量或上下文,但在未发送到运行器的工作流部件中,必须使用上下文来访问变量值。 有关详细信息,请参阅“使用上下文访问变量值”。

    由于运行器环境变量插值是在将工作流作业发送到运行器计算机后完成的,因此必须对运行器上使用的 shell 使用适当的语法。 在此示例中,工作流指定 ubuntu-latest。 默认情况下,Linux 运行器使用 bash shell,因此你需要使用语法 $NAME。 Windows 运行器默认使用 PowerShell,因此您将使用语法 $env:NAME。 有关 shell 的详细信息,请参阅“GitHub Actions 的工作流语法”。

    环境变量命名约定

    设置环境变量时,不能使用任何默认环境变量名称。 有关默认环境变量的完整列表,请参阅下面的“默认环境变量”。 如果尝试重写其中一个默认变量的值,则会忽略赋值。

    通过在步骤中使用 run: env 并检查此步骤的输出,可以列出可用于工作流步骤的整个环境变量集。

    为多个工作流定义配置变量

    GitHub Actions 的配置变量为 公共预览版,可能随时更改。

    可以创建用于多个工作流的配置变量,并且可以在组织存储库环境级别定义它们。

    例如,可以使用配置变量为传递给组织级别的生成工具的参数设置默认值,但随后允许存储库所有者根据具体情况重写这些参数。

    定义配置变量时,它们在 vars 上下文中自动可用。 有关详细信息,请参阅“使用 vars 上下文访问配置变量值”。

    配置变量优先级

    如果具有相同名称的变量存在于多个级别,则级别最低的变量优先。 例如,如果组织级别变量的名称与存储库级别的变量相同,则存储库级别的变量优先。 同样,如果组织、存储库和环境都具有同名的变量,则环境级变量优先。

    对于可重用工作流,将使用调用方工作流存储库中的变量。 存储库中包含被调用工作流的变量不可用于调用方工作流。

    配置变量的命名约定

    以下规则适用于配置变量名称:

  • 名称只能包含字母数字字符([a-z][A-Z][0-9])或下划线 (_)。 不允许空格。
  • 名称不能以 GITHUB_ 前缀开头。
  • 名称不能以数字开头。
  • 名称不区分大小写。
  • 名称在所创建的级别上必须是唯一的。
  • 为存储库创建配置变量

    若要在 GitHub 上为个人帐户存储库创建机密或变量,你必须是存储库所有者。 若要在 GitHub 上为组织存储库创建机密或变量,你必须拥有 admin 访问权限。 最后,若要通过 REST API 为个人帐户存储库或组织存储库创建机密或变量,你必须拥有协作者访问权限。

    在 GitHub 上,导航到存储库的主页面。

    在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。

    在边栏的“安全性”部分中,选择 机密和变量,然后单击 操作

    单击“变量”选项卡。

    单击“新建存储库变量”。

    在“名称”字段中输入变量的名称。

    在“值”字段中输入变量的值。

    单击“添加变量”。

    为环境创建配置变量

    要为个人帐户存储库中的环境创建密码或变量,你必须是存储库所有者。 要为组织存储库中的环境创建密码或变量,必须具有 admin 访问权限。 有关环境的详细信息,请参阅“管理部署环境”。

    在 GitHub 上,导航到存储库的主页面。

    在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。

    在左侧边栏中,单击“环境”。

    单击要向其添加变量的环境。

    在“环境变量”下,单击“添加变量”。

    在“名称”字段中输入变量的名称。

    在“值”字段中输入变量的值。

    单击“添加变量”。

    为组织创建配置变量

    GitHub Free 的专用存储库无法访问组织级机密和变量。 有关升级 GitHub 订阅的详细信息,请参阅“升级帐户的计划”。

    在组织中创建机密或变量时,可以使用策略来限制存储库的访问。 例如,您可以将访问权限授予所有仓库,也可以限制仅私有仓库或指定的仓库列表拥有访问权限。

    组织所有者可以在组织级别创建机密或变量。

    在 GitHub 上,导航到组织的主页面。

    在组织名称下,单击 “设置”****。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”********。

    在边栏的“安全性”部分中,选择 机密和变量,然后单击 操作

    单击“变量”选项卡。

    单击“新建组织变量”。

    在“名称”字段中输入变量的名称。

    在“值”字段中输入变量的值。

    从“存储库访问”下拉列表中,选择访问策略。

    单击“添加变量”。

    配置变量的限制

    单个变量大小限制为 48 KB。

    最多可以存储 1,000 个组织变量、每个存储库 500 个变量和每个环境 100 个变量。 组织和存储库变量的总大小限制为每个工作流运行 256 KB。

    在存储库中创建的工作流可以访问以下数量的变量:

  • 如果存储库变量的总大小小于 256 KB,则最多 500 个存储库变量。 如果存储库变量的总大小超过 256 KB,则只有低于限制的存储库变量才可用(按变量名称的字母顺序排序)。
  • 如果存储库和组织变量的总大小小于 256 KB,则最多 1,000 个组织变量。 如果组织和存储库变量的总大小超过 256 KB,则只有低于该限制的组织变量将可用(在考虑存储库变量并按变量名称的字母顺序排序后)。
  • 最多 100 个环境级别变量。
  • 环境级别变量不计入 256 KB 的总大小限制。 如果超出了存储库和组织变量的总大小限制,但仍需要其他变量,则可以使用一个环境并在该环境中定义其他变量。

    使用上下文访问变量值

    上下文是一种访问工作流运行、变量、运行器环境、作业及步骤相关信息的方式。 有关详细信息,请参阅“访问有关工作流运行的上下文信息”。 在工作流程中,还有许多其他上下文可用于各种目的。 有关可在工作流中使用特定上下文的位置的详细信息,请参阅“访问有关工作流运行的上下文信息”。

    可以使用 env 上下文来访问环境变量值,还可以使用 vars 上下文来访问配置变量值。

    使用 env 上下文访问环境变量值

    除了运行器环境变量之外,GitHub Actions 还允许使用上下文设置和读取 env 键值。 环境变量和上下文旨在用于工作流程中的不同点。

    工作流或引用操作中的 run 步骤由运行器处理。 因此,可以使用此处的运行器环境变量,对运行器上使用的 shell 使用适当的语法(例如,Linux 运行器上的 bash shell 使用 $NAME,Windows 运行器上的 PowerShell 使用 $env:NAME)。 在大多数情况下,还可以使用语法为 ${{ CONTEXT.PROPERTY }} 的上下文来访问相同的值。 区别在于,在作业发送到运行器之前,上下文将被内插并替换为字符串。

    但是,在由 GitHub Actions 处理且不会发送到运行器的工作流部件中,无法使用运行器环境变量。 相反,您必须使用上下文。 例如,if 条件(用于确定作业或步骤是否发送到运行器)始终由 GitHub Actions 处理。 必须在 if 条件语句中使用上下文访问变量的值。

    YAML
    name: Conditional env variable
    on: workflow_dispatch
      DAY_OF_WEEK: Monday
    jobs:
      greeting_job:
        runs-on: ubuntu-latest
          Greeting: Hello
        steps:
          - name: "Say Hello Mona it's Monday"
            if: ${{ env.DAY_OF_WEEK == 'Monday' }}
            run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
              First_Name: Mona
    

    在前面的示例的此修改中,我们引入了 if 条件。 工作流步骤现在仅当 DAY_OF_WEEK 设置为“Monday”时才运行。 我们使用 env 上下文if 条件语句中访问此值。 run 命令中引用的变量不需要 env 上下文。 这些变量被引用为运行器环境变量,并在运行器收到作业后进行内插。 不过,可以选择在将作业发送到运行器之前,通过使用上下文内插这些变量。 输出结果相同。

    run: echo "${{ env.Greeting }} ${{ env.First_Name }}. Today is ${{ env.DAY_OF_WEEK }}!"
    上下文通常使用美元符号和大括号表示,例如 ${{ context.property }}。 在 if 条件中,${{}} 是可选的,但如果使用它们,它们必须括住整个比较语句,如上所示。

    你通常将使用 envgithub 上下文来访问工作流部分中的变量值,这些值是在作业发送给运行器之前处理的。

    上下文使用案例示例
    env引用工作流中定义的自定义变量。${{ env.MY_VARIABLE }}
    github引用有关工作流程运行的信息和触发运行的事件。${{ github.repository }}

    Warning

    创建工作流和操作时,应始终考虑代码是否可能执行潜在攻击者的不受信任的输入。 某些上下文应被视为不受信任的输入,因为攻击者可能会插入自己的恶意内容。 有关详细信息,请参阅“GitHub Actions 的安全强化”。

    使用 vars 上下文访问配置变量值

    可以使用 vars 上下文在整个工作流中访问配置变量。 有关详细信息,请参阅“访问有关工作流运行的上下文信息”。

    如果尚未设置配置变量,则引用该变量的上下文的返回值将为空字符串。

    以下示例演示如何在工作流中将配置变量与 vars 上下文配合使用。 以下每个配置变量都已在存储库、组织或环境级别上定义。

    YAML