添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
迷茫的勺子  ·  刘晓庆贾静雯伊能静 ...·  3 周前    · 
卖萌的眼镜  ·  ShellClash说明文档 | ...·  2 月前    · 
非常酷的钥匙扣  ·  Google ...·  1 年前    · 
Skip to main content

上下文

您可以在工作流程和操作中访问上下文信息。

关于上下文

上下文是一种访问工作流运行、变量、运行器环境、作业及步骤相关信息的方式。 每个上下文都是一个包含属性的对象,属性可以是字符串或其他对象。

在不同的工作流运行条件下,上下文、对象和属性大不相同。 例如, matrix 上下文仅针对 矩阵 中的作业填充。

您可以使用表达式语法访问上下文。 有关详细信息,请参阅“ 表达式 ”。

${{ <context> }}

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

上下文名称 类型 说明
github object 工作流程运行的相关信息。 有关更多信息,请参阅 github 上下文
env object 包含工作流、作业或步骤中设置的变量。 有关更多信息,请参阅 env 上下文
vars object 包含在存储库、组织或环境级别上设置的变量集。 有关更多信息,请参阅 vars 上下文
job object 有关当前运行的作业的信息。 有关更多信息,请参阅 job 上下文
jobs object 仅适用于可重用工作流,包含可重用工作流中的作业输出。 有关更多信息,请参阅 jobs 上下文
steps object 有关当前作业中已运行的步骤的信息。 有关更多信息,请参阅 steps 上下文
runner object 有关运行当前作业的运行器的信息。 有关更多信息,请参阅 runner 上下文
secrets object 包含可用于工作流运行的机密的名称和值。 有关更多信息,请参阅 secrets 上下文
strategy object 有关当前作业的矩阵执行策略的信息。 有关更多信息,请参阅 strategy 上下文
matrix object 包含在工作流中定义的应用于当前作业的矩阵属性。 有关更多信息,请参阅 matrix 上下文
needs object 包含定义为当前作业依赖项的所有作业的输出。 有关更多信息,请参阅 needs 上下文
inputs object 包含可重用或手动触发的工作流的输入。 有关更多信息,请参阅 inputs 上下文

作为表达式的一部分,您可以使用以下两种语法之一访问上下文信息。

  • 索引语法: github['sha']
  • 属性取消引用语法: github.sha
  • 若要使用属性取消引用语法,属性名称必须以字母或 _ 开头,并且只能包含字母数字字符、 - _

    如果尝试取消引用不存在的属性,则计算结果为空字符串。

    确定何时使用上下文

    GitHub Actions 包含一个称为“上下文”的变量集和一个称为“默认变量”的类似变量集。 这些变量预期用于工作流程中的不同点:

  • 默认环境变量 :这些环境变量仅存在于执行作业的运行器上。 有关详细信息,请参阅“ 变量 ”。
  • 上下文 :你可以在工作流的任何时间点使用大多数上下文,包括当默认变量不可用时。 例如,你可以使用带表达式的上下文执行初始处理,然后将作业路由到运行器以供执行;这允许你使用带有条件 if 关键字的上下文来确定步骤是否应运行。 作业运行后,还可以从执行作业的运行器(如 runner.os )检索上下文变量。 有关可在工作流中使用各种上下文的位置的详细信息,请参阅“ 上下文可用性 ”。
  • 下面的示例演示了这些不同类型的变量如何在一个作业中一起使用:

    YAML
    name: CI
    on: push
    jobs:
      prod-check:
        if: ${{ github.ref == 'refs/heads/main' }}
        runs-on: ubuntu-latest
        steps:
          - run: echo "Deploying to production server on branch $GITHUB_REF"
    

    在此示例中,if 语句检查 github.ref 上下文以确定当前分支名称;如果名称为 refs/heads/main,则执行后续步骤。 if 检查由 GitHub Actions 处理,作业仅在结果为 true 时才发送到运行器。 将作业发送到运行器后,将执行该步骤,并引用运行器中的 $GITHUB_REF 变量。

    上下文可用性

    在整个工作流程运行过程中,提供不同的上下文。 例如,secrets 上下文只能在作业中的某些位置使用。

    此外,某些功能只能在某些地方使用。 例如,hashFiles 函数在任何地方都不可用。

    下表列出了工作流程中每一个上下文和特殊函数可以使用的地方。 除非下面列出,否则可以在任何地方使用函数。

    工作流程键上下文特殊函数
    run-namegithub, inputs, vars
    concurrencygithub, inputs, varsNone
    envgithub, secrets, inputs, varsNone
    jobs.<job_id>.concurrencygithub, needs, strategy, matrix, inputs, varsNone
    jobs.<job_id>.containergithub, needs, strategy, matrix, vars, inputsNone
    jobs.<job_id>.container.credentialsgithub, needs, strategy, matrix, env, vars, secrets, inputsNone
    jobs.<job_id>.container.env.<env_id>github, needs, strategy, matrix, job, runner, env, vars, secrets, inputsNone
    jobs.<job_id>.container.imagegithub, needs, strategy, matrix, vars, inputsNone
    jobs.<job_id>.continue-on-errorgithub, needs, strategy, vars, matrix, inputsNone
    jobs.<job_id>.defaults.rungithub, needs, strategy, matrix, env, vars, inputsNone
    jobs.<job_id>.envgithub, needs, strategy, matrix, vars, secrets, inputsNone
    jobs.<job_id>.environmentgithub, needs, strategy, matrix, vars, inputsNone
    jobs.<job_id>.environment.urlgithub, needs, strategy, matrix, job, runner, env, vars, steps, inputsNone
    jobs.<job_id>.ifgithub, needs, vars, inputsalways, cancelled, success, failure
    jobs.<job_id>.namegithub, needs, strategy, matrix, vars, inputsNone
    jobs.<job_id>.outputs.<output_id>github, needs, strategy, matrix, job, runner, env, vars, secrets, steps, inputsNone
    jobs.<job_id>.runs-ongithub, needs, strategy, matrix, vars, inputsNone
    jobs.<job_id>.secrets.<secrets_id>github, needs, strategy, matrix, secrets, inputs, varsNone
    jobs.<job_id>.servicesgithub, needs, strategy, matrix, vars, inputsNone
    jobs.<job_id>.services.<service_id>.credentialsgithub, needs, strategy, matrix, env, vars, secrets, inputsNone
    jobs.<job_id>.services.<service_id>.env.<env_id>github, needs, strategy, matrix, job, runner, env, vars, secrets, inputsNone
    jobs.<job_id>.steps.continue-on-errorgithub, needs, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
    jobs.<job_id>.steps.envgithub, needs, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
    jobs.<job_id>.steps.ifgithub, needs, strategy, matrix, job, runner, env, vars, steps, inputsalways, cancelled, success, failure, hashFiles
    jobs.<job_id>.steps.namegithub, needs, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
    jobs.<job_id>.steps.rungithub, needs, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
    jobs.<job_id>.steps.timeout-minutesgithub, needs, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
    jobs.<job_id>.steps.withgithub, needs, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
    jobs.<job_id>.steps.working-directorygithub, needs, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
    jobs.<job_id>.strategygithub, needs, vars, inputsNone
    jobs.<job_id>.timeout-minutesgithub, needs, strategy, matrix, vars, inputsNone
    jobs.<job_id>.with.<with_id>github, needs, strategy, matrix, inputs, varsNone
    on.workflow_call.inputs.<inputs_id>.defaultgithub, inputs, varsNone
    on.workflow_call.outputs.<output_id>.valuegithub, jobs, vars, inputs

    示例:将上下文信息打印到日志

    您可以将上下文的内容打印到日志中进行调试。 需要使用 toJSON 函数 才能将 JSON 对象优质打印到日志。

    警告: 使用整个 github 上下文时,请注意其中包含敏感信息,例如 github.token。 GitHub 在打印到控制台时会隐藏密钥,但您在导出或打印上下文时应谨慎行事。

    YAML
    name: Context testing
    on: push
    jobs:
      dump_contexts_to_log:
        runs-on: ubuntu-latest
        steps:
          - name: Dump GitHub context
              GITHUB_CONTEXT: ${{ toJson(github) }}
            run: echo "$GITHUB_CONTEXT"
          - name: Dump job context
              JOB_CONTEXT: ${{ toJson(job) }}
            run: echo "$JOB_CONTEXT"
          - name: Dump steps context
              STEPS_CONTEXT: ${{ toJson(steps) }}
            run: echo "$STEPS_CONTEXT"
          - name: Dump runner context
              RUNNER_CONTEXT: ${{ toJson(runner) }}
            run: echo "$RUNNER_CONTEXT"
          - name: Dump strategy context
              STRATEGY_CONTEXT: ${{ toJson(strategy) }}
            run: echo "$STRATEGY_CONTEXT"
          - name: Dump matrix context
              MATRIX_CONTEXT: ${{ toJson(matrix) }}
            run: echo "$MATRIX_CONTEXT"
    

    github 上下文

    github 上下文包含有关工作流运行和触发运行的事件的信息。 还可以读取环境变量中的大多数 github 上下文数据。 有关环境变量的详细信息,请参阅“变量”。

    警告: 使用整个 github 上下文时,请注意其中包含敏感信息,例如 github.token。 GitHub 在打印到控制台时会隐藏密钥,但您在导出或打印上下文时应谨慎行事。

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

    属性名称类型​​说明
    githubobject工作流程中任何作业或步骤期间可用的顶层上下文。 此对象包含下面列出的所有属性。
    github.actionstring正在运行的操作的名称,或步骤的 id。 在当前步骤运行脚本(无 id)时,GitHub 删除特殊字符并使用名称 __run。 如果在同一作业中多次使用相同的操作,则名称将包含一个前面跟序号和下划线的后缀。 例如,运行的第一个脚本名称 __run,则第二个脚本将命名为 __run_2。 同样,actions/checkout 的第二次调用将为 actionscheckout2
    github.action_pathstring操作所在的路径。 此属性仅在复合操作中受支持。 可以使用此路径访问与操作位于同一存储库中的文件,例如将目录更改为该路径: cd ${{ github.action_path }}
    github.action_refstring对于执行操作的步骤,这是正在执行的操作的引用。 例如 v2

    不要在 run 关键字中使用。 若要使此上下文适用于复合操作,请在复合操作的 env 上下文中引用它。
    github.action_repositorystring对于执行操作的步骤,这是操作的所有者和存储库名称。 例如 actions/checkout

    不要在 run 关键字中使用。 若要使此上下文适用于复合操作,请在复合操作的 env 上下文中引用它。
    github.action_statusstring对于复合操作,这是复合操作的当前结果。
    github.actorstring触发初始工作流运行的用户的用户名。 如果工作流运行是重新运行,则此值可能与 github.triggering_actor 不同。 即使启动重新运行的参与者 (github.triggering_actor) 具有不同的权限,任何工作流重新运行都将使用 github.actor 的权限。
    github.actor_idstring触发初始工作流运行的个人或应用的帐户 ID。 例如 1234567。 请注意,这与参与者用户名不同。
    github.api_urlstringGitHub REST API 的 URL。
    github.base_refstring工作流运行中拉取请求的 base_ref 或目标分支。 仅当触发工作流运行的事件是 pull_requestpull_request_target 时,才可使用此属性。
    github.envstring运行器上从工作流程命令到设置环境变量的文件路径。 此文件对于当前步骤是唯一的,并且是作业中每个步骤的不同文件。 有关详细信息,请参阅“GitHub Actions 的工作流命令”。
    github.eventobject完整事件 web 挂钩有效负载。 您可以使用上下文访问事件的个别属性。 此对象与触发工作流运行的事件的 web 挂钩有效负载相同,并且对于每个事件都是不同的。 每个 GitHub Actions 事件的 Webhook 在“触发工作流的事件”中链接。 例如,对于由 push 事件触发的工作流运行,此对象包含推送 webhook 有效负载的内容。
    github.event_namestring触发工作流程运行的事件的名称。
    github.event_pathstring运行器上包含完整事件 web 挂钩负载的文件的路径。
    github.graphql_urlstringGitHub GraphQL API 的 URL。
    github.head_refstring工作流程运行中拉取请求的 head_ref 或来源分支。 仅当触发工作流运行的事件是 pull_requestpull_request_target 时,才可使用此属性。
    github.jobstring当前作业的 job_id
    注意:此上下文属性是由 Actions 运行程序设置的,仅在作业的执行 steps 中可用。 否则,此属性的值将为 null
    github.pathstring运行器上从工作流命令设置系统 PATH 变量的文件的路径。 此文件对于当前步骤是唯一的,并且是作业中每个步骤的不同文件。 有关详细信息,请参阅“GitHub Actions 的工作流命令”。
    github.refstring触发工作流运行的分支或标记的格式完整的参考。 对于 push 触发的工作流,这是推送的分支或标记参考。 对于 pull_request 触发的工作流,这是拉取请求合并分支。 对于 release 触发的工作流,这是创建的发布标记。 对于其他触发器,这是触发工作流运行的分支或标记参考。 此变量仅在分支或标记可用于事件类型时才会设置。 给定的参考格式完整,这意味着对于分支,其格式为 refs/heads/<branch_name>,对于拉取请求,其格式为 refs/pull/<pr_number>/merge,对于标签,其格式为 refs/tags/<tag_name>。 例如,refs/heads/feature-branch-1
    github.ref_namestring触发工作流运行的分支或标记的短参考名称。 此值与 GitHub 上显示的分支或标记名称匹配。 例如 feature-branch-1

    拉取请求的格式为 <pr_number>/merge
    github.ref_protectedboolean如果为触发工作流运行的 ref 配置分支保护 或 规则集 ,则为 true
    github.ref_typestring触发工作流运行的 ref 类型。 有效值为 branch or tag进行求值的基于 SQL 语言的筛选器表达式。
    github.repositorystring所有者和仓库名称。 例如 octocat/Hello-World
    github.repository_idstring存储库的 ID。 例如 123456789。 请注意,这与存储库名称不同。
    github.repository_ownerstring存储库所有者的用户名。 例如 octocat
    github.repository_owner_idstring存储库所有者的帐户 ID。 例如 1234567。 请注意,这与所有者名称不同。
    github.repositoryUrlstring存储库的 Git URL。 例如 git://github.com/octocat/hello-world.git
    github.retention_daysstring工作流运行日志和项目保留的天数。
    github.run_idstring存储库中每个工作流运行的唯一编号。 如果您重新执行工作流程运行,此编号不变。
    github.run_numberstring仓库中特定工作流程每个运行的唯一编号。 工作流首次运行时,此编号从 1 开始,并随着每次新的运行而递增。 如果您重新执行工作流程运行,此编号不变。
    github.run_attemptstring存储库中每次尝试运行特定工作流的唯一编号。 对于工作流程运行的第一次尝试,此数字从 1 开始,并随着每次重新运行而递增。
    github.secret_sourcestring工作流中使用的机密的来源。 可能的值为 NoneActionsCodespacesDependabot
    github.server_urlstringGitHub 服务器的 URL。 例如:https://github.com
    github.shastring触发工作流的提交 SHA。 此提交 SHA 的值取决于触发工作流程的事件。 有关详细信息,请参阅“触发工作流的事件”。 例如,ffac537e6cbbf934b08745a378932722df287a53
    github.tokenstring代表存储库中安装的 GitHub 应用程序进行身份验证的令牌。 在功能上,这与 GITHUB_TOKEN 机密等效。 有关详细信息,请参阅“自动令牌身份验证”。
    注意:此上下文属性是由 Actions 运行程序设置的,仅在作业的执行 steps 中可用。 否则,此属性的值将为 null
    github.triggering_actorstring发起工作流运行的用户的用户名。 如果工作流运行是重新运行,则此值可能与 github.actor 不同。 即使启动重新运行的参与者 (github.triggering_actor) 具有不同的权限,任何工作流重新运行都将使用 github.actor 的权限。
    github.workflowstring工作流的名称。 如果工作流程文件未指定 name,则此属性的值是存储库中工作流程文件的完整路径。
    github.workflow_refstring工作流的引用路径。 例如,octocat/hello-world/.github/workflows/my-workflow.yml@refs/heads/my_branch
    github.workflow_shastring工作流文件的提交 SHA。
    github.workspacestring运行器上步骤的默认工作目录,以及使用 checkout 操作时存储库的默认位置。

    github 上下文的示例内容

    以下示例上下文来自 push 事件触发的工作流运行。 此示例中的 event 对象已被截断,因为它与 push webhook 有效负载的内容相同。

    注意:此上下文只是一个示例。 上下文的内容取决于正在运行的工作流。 在不同的工作流运行条件下,上下文、对象和属性大不相同。

    "token": "***", "job": "dump_contexts_to_log", "ref": "refs/heads/my_branch", "sha": "c27d339ee6075c1f744c5d4b200f7901aad2c369", "repository": "octocat/hello-world", "repository_owner": "octocat", "repositoryUrl": "git://github.com/octocat/hello-world.git", "run_id": "1536140711", "run_number": "314", "retention_days": "90", "run_attempt": "1", "actor": "octocat", "workflow": "Context testing", "head_ref": "", "base_ref": "", "event_name": "push", "event": { "server_url": "https://github.com", "api_url": "https://api.github.com", "graphql_url": "https://api.github.com/graphql", "ref_name": "my_branch", "ref_protected": false, "ref_type": "branch", "secret_source": "Actions", "workspace": "/home/runner/work/hello-world/hello-world", "action": "github_step", "event_path": "/home/runner/work/_temp/_github_workflow/event.json", "action_repository": "", "action_ref": "", "path": "/home/runner/work/_temp/_runner_file_commands/add_path_b037e7b5-1c88-48e2-bf78-eaaab5e02602", "env": "/home/runner/work/_temp/_runner_file_commands/set_env_b037e7b5-1c88-48e2-bf78-eaaab5e02602"

    github 上下文的示例用法

    此示例工作流仅当工作流运行由 pull_request 事件触发时才使用 github.event_name 上下文运行作业。

    YAML
    name: Run CI
    on: [push, pull_request]
    jobs:
      normal_ci:
        runs-on: ubuntu-latest
        steps:
          - name: Run normal CI
            run: echo "Running normal CI"
      pull_request_ci:
        runs-on: ubuntu-latest
        if: ${{ github.event_name == 'pull_request' }}
        steps:
          - name: Run PR CI
            run: echo "Running PR only CI"
    

    env 上下文

    env 上下文包含已在工作流、作业或步骤中设置的变量。 它不包含运行器进程继承的变量。 有关在工作流中设置变量的详细信息,请参阅“GitHub Actions 的工作流语法

    可以检索存储在 env 上下文中的变量的值,并在工作流文件中使用这些值。 可以在非 iduses 键的工作流程步骤中,在任何键中使用 env 上下文。 有关步骤语法的详细信息,请参阅“GitHub Actions 的工作流语法”。

    如果想要在运行器中使用变量的值,请使用运行器操作系统的正常方法来读取环境变量。

    属性名称类型​​说明
    envobject此上下文针对作业中的每个步骤而改变。 您可以从作业中的任何步骤访问此上下文。 此对象包含下面列出的属性。
    env.<env_name>string特定环境变量的值。

    env 上下文的示例内容

    env 上下文的内容是变量名称与其值的映射。 上下文的内容可能会根据工作流运行中的使用位置而更改。 在此示例中,env 上下文包含两个变量。

    "first_name": "Mona", "super_duper_var": "totally_awesome"

    env 上下文的示例用法

    此示例工作流显示了在工作流、作业和步骤级别的 env 上下文中设置的变量。 然后,该 ${{ env.VARIABLE-NAME }} 语法用于检索工作流中各个步骤的变量值。

    当多个环境变量使用相同的名称定义时,GitHub 会使用最特定的变量。 例如,步骤中定义的环境变量在步骤执行时将覆盖名称相同的作业和工作流环境变量。 为作业定义的环境变量在作业执行时将覆盖名称相同的工作流变量。

    YAML
    name: Hi Mascot
    on: push
      mascot: Mona
      super_duper_var: totally_awesome
    jobs:
      windows_job:
        runs-on: windows-latest
        steps:
          - run: echo 'Hi ${{ env.mascot }}'  # Hi Mona
          - run: echo 'Hi ${{ env.mascot }}'  # Hi Octocat
              mascot: Octocat
      linux_job:
        runs-on: ubuntu-latest
          mascot: Tux
        steps:
          - run: echo 'Hi ${{ env.mascot }}'  # Hi Tux
    

    vars 上下文

    注意:GitHub Actions 的配置变量为 beta 版本,可能会有变动。

    vars 上下文包含在组织、存储库和环境级别设置的自定义配置变量。 有关定义用于多个工作流的配置变量的详细信息,请参阅“变量”。

    vars 上下文的示例内容

    vars 上下文的内容是配置变量名称与其值的映射。

    "mascot": "Mona"

    vars 上下文的示例用法

    此示例工作流演示如何使用 vars 上下文自动提供在存储库、环境或组织级别设置的配置变量。

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

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

    YAML