上下文
介绍 AtomGit Pipeline 工作流中可用上下文的定义,包括可用属性、访问方法和使用示例。
2.1 可用上下文
| 上下文名称 | 类型 | 描述 |
|---|---|---|
atomgit | object | 关于工作流运行的信息。更多信息,请参阅 atomgit。 |
env | object | 包含在工作流、作业或步骤中设置的变量。更多信息,请参阅 env。 |
vars | object | 包含在仓库、组织或环境级别设置的变量。更多信息,请参阅 vars 。 |
job | object | 关于当前正在运行的作业的信息。更多信息,请参阅 job。 |
jobs | object | 仅对于可重用工作流,包含来自可重用工作流的作业输出。更多信息,请参阅 jobs。 |
steps | object | 关于当前作业中已运行的步骤的信息。更多信息,请参阅 steps。 |
runner | object | 关于正在运行当前作业的执行环境的信息。更多信息,请参阅 runner 。 |
secrets | object | 包含可用的工作流运行的密钥的名称和值。更多信息,请参阅 secret 。 |
strategy | object | 关于当前作业的矩阵执行策略的信息。更多信息,请参阅 strategy。 |
matrix | object | 包含在工作流中定义的、适用于当前作业的矩阵属性。更多信息,请参阅 matrix。 |
inputs | object | 包含传递给操作、可重用工作流或手动触发的工作流的输入属性。更多信息,请参阅 inputs 。 |
作为表达式的一部分,您可以使用以下两种语法之一访问上下文信息。
- 索引 语法:
atomgit['sha'] - 属性解引用语法:
atomgit.sha要使用属性解引用语法,属性名称必须以字母或_开头,并且只能包含字母数字字符、-或_。
如果您尝试引用不存在的属性,它将计算为空字符串。
确定何时使用上下文
- 默认环境变量:这些环境变量仅存在于执行您作业的执行环境上。
- 上下文:您可以在工作流中的任何时候使用大多数上下文,包括 默认变量 不可用的时候。例如,您可以将上下文与表达式一起使用,在任务路由到执行环境执行之前执行初始处理;这允许您使用与条件
if关键字相关的上下文来确定是否应运行某个步骤。一旦作业开始运行,您还可以从执行哪位的执行环境中检索上下文变量,例如runner.os。 以下示例演示了如何在作业中一起使用这些不同类型的变量:
name: CI
on:
push:
branches: main
jobs:
prod-check:
if: ${{ atomgit.ref == 'refs/heads/main' }}
runs-on: ubuntu-latest
steps:
- name: Run echo
run: echo "Deploying to production server on branch $ATOMGIT_REF"
在此示例中,if 语句检查 上下文以确定当前分支名称;如果名称是 refs/heads/main,则执行后续步骤。if 检查由 AtomGit Pipeline 处理,并且只有当结果为 true 时任务才被发送到执行环境。一旦任务被发送到执行环境,步骤就会执行,并引用来自 变量。
上下文可用性
不同的上下文在工作流运行过程中的不同时间可用。例如,secrets 上下文可能只能在作业中的某些位置使用。
此外,某些函数可能只可以在某些地方使用。例如,hashFiles 函数并非到处可用。
下表列出了工作流中每个上下文和特殊函数的使用限制。列出的上下文仅对给定的工作流键可用,并且不能在其他任何地方使用。除非在下面列出,否则函数可以在任何地方使用。
| 工作流场景 | 可用上下文 | 特殊函数 |
|---|---|---|
run-name | atomgit, inputs, vars | None |
concurrency | atomgit, inputs, vars | None |
env | atomgit, secrets, inputs, vars | None |
jobs.<job_id>.concurrency | atomgit, strategy, matrix, inputs, vars | None |
jobs.<job_id>.container | atomgit, strategy, matrix, vars, inputs | None |
jobs.<job_id>.container.credentials | atomgit, strategy, matrix, env, vars, secrets, inputs | None |
jobs.<job_id>.container.env.<env_id> | atomgit, strategy, matrix, job, runner, env, vars, secrets, inputs | None |
jobs.<job_id>.container.image | atomgit, strategy, matrix, vars, inputs | None |
jobs.<job_id>.continue-on-error | atomgit, strategy, vars, matrix, inputs | None |
jobs.<job_id>.defaults.run | atomgit, strategy, matrix, env, vars, inputs | None |
jobs.<job_id>.env | atomgit, strategy, matrix, vars, secrets, inputs | None |
jobs.<job_id>.if | atomgit, vars, inputs | always, cancelled, success, failure |
jobs.<job_id>.name | atomgit, strategy, matrix, vars, inputs | None |
jobs.<job_id>.outputs.<output_id> | atomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputs | None |
jobs.<job_id>.runs-on | atomgit, strategy, matrix, vars, inputs | None |
jobs.<job_id>.secrets.<secrets_id> | atomgit, strategy, matrix, secrets, inputs, vars | None |
jobs.<job_id>.steps.continue-on-error | atomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputs | hashFiles |
jobs.<job_id>.steps.env | atomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputs | hashFiles |
jobs.<job_id>.steps.if | atomgit, strategy, matrix, job, runner, env, vars, steps, inputs | always, cancelled, success, failure, hashFiles |
jobs.<job_id>.steps.name | atomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputs | hashFiles |
jobs.<job_id>.steps.run | atomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputs | hashFiles |
jobs.<job_id>.steps.timeout-minutes | atomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputs | hashFiles |
jobs.<job_id>.steps.with | atomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputs | hashFiles |
jobs.<job_id>.steps.working-directory | atomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputs | hashFiles |
jobs.<job_id>.strategy | atomgit, vars, inputs | None |
jobs.<job_id>.timeout-minutes | atomgit, strategy, matrix, vars, inputs | None |
jobs.<job_id>.with.<with_id> | atomgit, strategy, matrix, inputs, vars | None |
on.workflow_call.inputs.<inputs_id>.default | atomgit, inputs, vars | None |
on.workflow_call.outputs.<output_id>.value | atomgit, jobs, vars, inputs | None |
示例:将上下文信息打印到日志
您可以将上下文的内容打印到日志以进行调试。 是将 JSON 对象美化打印到日志所必需的。
[!WARNING] 当使用整个
atomgit上下文时,请注意它包含敏感信息,如atomgit.token。AtomGit Pipeline 在将密钥打印到控制台时会掩藏它们,但在导出或打印上下文时您应该谨慎。
name: Context testing
on:
push:
branches: main
jobs:
dump_contexts_to_log:
runs-on: ubuntu-latest
steps:
- name: Dump Atomgit context
env:
ATOMGIT_CONTEXT: ${{ toJson(atomgit) }}
run: echo "$ATOMGIT_CONTEXT"
- name: Dump job context
env:
JOB_CONTEXT: ${{ toJson(job) }}
run: echo "$JOB_CONTEXT"
- name: Dump steps context
env:
STEPS_CONTEXT: ${{ toJson(steps) }}
run: echo "$STEPS_CONTEXT"
- name: Dump runner context
env:
RUNNER_CONTEXT: ${{ toJson(runner) }}
run: echo "$RUNNER_CONTEXT"
- name: Dump strategy context
env:
STRATEGY_CONTEXT: ${{ toJson(strategy) }}
run: echo "$STRATEGY_CONTEXT"
- name: Dump matrix context
env:
MATRIX_CONTEXT: ${{ toJson(matrix) }}
run: echo "$MATRIX_CONTEXT"
2.2 atomgit 上下文
atomgit 上下文包含关于工作流运行以及触发运行的事件的信息。您可以在环境变量中读取大部分 atomgit 上下文数据。
[!WARNING] 当使用整个
atomgit上下文时,请注意它包含敏感信息,如atomgit.token。AtomGit Pipeline 在将密钥打印到控制台时会掩藏它们,但在导出或打印上下文时您应该谨慎。 [!WARNING] 创建工作流和操作时,您应该始终考虑您的代码是否可能执行来自潜在攻击者的不可信输入。某些上下文应被视为不可信输入,因为攻击者可能会插入自己的恶意内容。
| 属性名称 | 类型 | 描述 |
|---|---|---|
atomgit | object | 工作流中任何作业或步骤期间可用的顶层上下文。此对象包含下面列出的所有属性。 |
atomgit.action | string | 当前正在运行的操作的名称,或步骤的 。AtomGit Pipeline 会移除特殊字符,并且当当前步骤在没有 id 的情况下运行脚本时,使用名称 __run。如果同一作业中多次使用同一操作,该名称将包含带下划线序列号后缀。例如,您运行的第一个脚本将命名为 __run,第二个脚本将命名为 __run_2。类似地,actions/checkout 的第二次调用将是 actionscheckout2。 |
atomgit.action_path | string | 操作所在的路径。此属性仅在复合操作中受支持。您可以使用此路径访问与操作位于同一仓库中的文件,例如通过更改目录到路径:cd ${{ atomgit.action_path }}。 |
atomgit.action_ref | string | 对于执行操作的步骤,这是正在执行的操作的引用。例如,v2。 不要在 run 关键字中使用。要使此上下文与复合操作一起工作,请在复合操作的 env 上下文中引用它。 |
atomgit.action_repository | string | 对于执行操作的步骤,这是操作的所有者和仓 库名称。例如,actions/checkout。 不要在 run 关键字中使用。要使此上下文与复合操作一起工作,请在复合操作的 env 上下文中引用它。 |
atomgit.actor | string | 触发初始工作流运行的用户的用户名。如果工作流运行是重新运行,此值可能与 atomgit.triggering_actor 不同。任何工作流重新运行都将使用 atomgit.actor 的权限,即使启动重新运行的参与者 (atomgit.triggering_actor) 具有不同的权限。 |
atomgit.actor_id | string | 触发初始工作流运行的人员或应用的账户 ID。例如,1234567。请注意这与参与者用户名不同。 |
atomgit.api_url | string | AtomGit REST API 的 URL。 |
atomgit.base_ref | string | 工作流运行中拉取请求的 base_ref 或目标分支。此属性仅在触发工作流运行的事件是 pull_request 或 pull_request_target 时才可用。 |
atomgit.env | string | 执行环境上将环境变量从工作流命令设置到的文件的路径。此文件对当前步骤是唯一的,并且作业中的每个步骤都是不同的文件。 |
atomgit.event | object | 完整的事件 webhook 负载。您可以使用此上下文访问事件的各个属性。此对象与触发工作流运行的事件的 webhook 负载相同,并且对于每个事件都不同。每个 AtomGit Pipeline 事件的 webhooks 链接在 中。例如,对于由 触发的工作流运行,此对象包含 的内容。 |
atomgit.event_name | string | 触发工作流运行的事件的名称。 |
atomgit.event_path | string | 执行环境上包含完整事件 webhook 负载的文件的路径。 |
atomgit.head_ref | string | 工作流运行中拉取请求的 head_ref 或源分支。此属性仅在触发工作流运行的事件是 pull_request 或 pull_request_target 时才可用。 |
atomgit.job | string | 当前作业的 。 注意:此上下文属性由 Actions 执行环境设置,仅在作业的执行 steps 中可用。否则,该属性的值为 null。 |
atomgit.path | string | 执行环境上将系统 PATH 变量从工作流命令设置到的文件的路径。此文件对当前步骤是唯一的,并且作业中的每个步骤都是不同的文件。 |
atomgit.ref | string | 触发工作流运行的分支或标签的完整引用。对于 push 触发的工作流,这是推送的分支或标签引用。对于未合并的 pull_request 触发的工作流,这是拉取请求合并分支。如果拉取请求已合并,这是主分支。对于 release 触发的工作流,这是创建的发布标签。对于其他触发器,这是触发工作流运行的分支或标签引用。只有当事件类型有可用分支或标签时才会设置此引用。给定的引用是完整的,意味着对于分支,格式是 refs/heads/<branch_name>。对于除了 pull_request_target 未合并的拉取请求事件,它是 refs/pull/<pr_number>/merge。pull_request_target 事件有来自基础分支的 ref。对于标签,它是 refs/tags/<tag_name>。例如,refs/heads/feature-branch-1。 |
atomgit.ref_name | string | 触发工作流运行的分支或标签的短引用名称。此值与 AtomGit 上显示的分支或标签名称匹配。例如,feature-branch-1。 对于未合并的拉取请求,格式是 <pr_number>/merge。 |
atomgit.ref_type | string | 触发工作流运行的引用类型。有效值为 branch 或 tag。 |
atomgit.repository | string | 所有者和仓库名称。例如,octocat/Hello-World。 |
atomgit.repository_id | string | 仓库的 ID。例如,123456789。请注意这与仓库名称不同。 |
atomgit. | string | 仓库的 Git URL。例如,git://atomgit.com/octocat/hello-world.git。 |
atomgit.retention_days | string | 工作流运行日志和构件保留的天数。 |
atomgit.run_id | string | 存储库中每个工作流运行的唯一编号。如果您重新运行工作流运行,此编号不会更改。 |
atomgit.run_number | string | 存储库中特定工作流每次运行的唯一编号。此编号从工作流的第一次运行为 1 开始,每次新运行都会递增。如果您重新运行工作流运行,此编号不会更改。 |
atomgit.run_attempt | string | 存储库中特定工作流运行每次尝试的唯一编号。此编号从工作流运行的第一次尝试为 1 开始,每次重新运行都会递增。 |
atomgit.server_url | string | AtomGit 服务器的 URL。例如:https://atomgit.com。 |
atomgit.sha | string | 触发工作流的提交 SHA。此提交 SHA 的值取决于触发工作流的事件。例如,ffac537e6cbbf934b08745a378932722df287a53。 |
atomgit.token | string | 用于代表安装在您仓库上的 AtomGit App 进行身份验证的令牌。这功能上等效于 ATOMGIT_TOKEN 密钥。 注意:此上下文属性由 Actions 执行环境设置,仅在作业的执行 steps 中可用。否则,该属性的值为 null。 |
atomgit.triggering_actor | string | 启动工作流运行的用户的用户名。如果工作流运行是重新运行,此值可能与 atomgit.actor 不同。任何工作流重新运行都将使用 atomgit.actor 的权限,即使启动重新运行的参与者 (atomgit.triggering_actor) 具有不同的权限。 |
atomgit.workflow | string | 工作流的名称。如果工作流文件未指定 name,则此属性的值是存储库中工作流文件的完整路径。 |
atomgit.workflow_ref | string | 工作流的引用路径。例如,octocat/hello-world/.atomgit/workflows/my-workflow.yml@refs/heads/my_branch。 |
atomgit.workflow_sha | string | 工作流文件的提交 SHA。 |
atomgit.workspace | string | 执行环境上步骤的默认工作目录,以及使用 操作时您仓库的默认位置。 |
atomgit.start_timestamp | string | 工作流启动时间戳。 |
2.3 atomgit.event
概述
atomgit.event 是 atomgit 上下文下的一个子对象,承载触发本次工作流运行的事件负载(event payload)。当某个事件触发工作流时,平台会将该事件的完整负载原样挂载到 atomgit.event 下,供工作流通过表达式读取。
atomgit.event 与事件的 Webhook 负载 100% 同构:字段名、嵌套层级、取值含义完全一致。因此,你在 Webhook 文档中看到的负载结构,可直接以 atomgit.event.<字段路径> 的形式在工作流中访问。例如负载中的 comment.body,在工作流中即为 atomgit.event.comment.body。
atomgit.event 下挂载的字段随触发事件的不同而不同。所有事件共享一组通用基底字段(action、sender、repository 等),各事件再附加各自的专有字段。本章节按事件场景分别说明。
说明
atomgit.event.action表示事件的活动类型(如created、edited),与顶层上下文atomgit.action(当前步骤标识)不是同一字段,请勿混淆。- 标注"仅
xxx"的字段只在对应活动类型下出现,在其他活动类型下读取将得到空值。 head_commit、merged_at、review.body等字段在特定条件下可能为null,使用前建议判空。- 表格"取值"列标注了枚举型字段的完整取值集合;未标注的字段为自由取值。