跳到主要内容

上下文

介绍 AtomGit Pipeline 工作流中可用上下文的定义,包括可用属性、访问方法和使用示例。

2.1 可用上下文​

上下文名称类型描述
atomgitobject关于工作流运行的信息。更多信息,请参阅 atomgit。
envobject包含在工作流、作业或步骤中设置的变量。更多信息,请参阅 env。
varsobject包含在仓库、组织或环境级别设置的变量。更多信息,请参阅 vars 。
jobobject关于当前正在运行的作业的信息。更多信息,请参阅 job。
jobsobject仅对于可重用工作流,包含来自可重用工作流的作业输出。更多信息,请参阅 jobs。
stepsobject关于当前作业中已运行的步骤的信息。更多信息,请参阅 steps。
runnerobject关于正在运行当前作业的执行环境的信息。更多信息,请参阅 runner 。
secretsobject包含可用的工作流运行的密钥的名称和值。更多信息,请参阅 secret 。
strategyobject关于当前作业的矩阵执行策略的信息。更多信息,请参阅 strategy。
matrixobject包含在工作流中定义的、适用于当前作业的矩阵属性。更多信息,请参阅 matrix。
inputsobject包含传递给操作、可重用工作流或手动触发的工作流的输入属性。更多信息,请参阅 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-nameatomgit, inputs, varsNone
concurrencyatomgit, inputs, varsNone
envatomgit, secrets, inputs, varsNone
jobs.<job_id>.concurrencyatomgit, strategy, matrix, inputs, varsNone
jobs.<job_id>.containeratomgit, strategy, matrix, vars, inputsNone
jobs.<job_id>.container.credentialsatomgit, strategy, matrix, env, vars, secrets, inputsNone
jobs.<job_id>.container.env.<env_id>atomgit, strategy, matrix, job, runner, env, vars, secrets, inputsNone
jobs.<job_id>.container.imageatomgit, strategy, matrix, vars, inputsNone
jobs.<job_id>.continue-on-erroratomgit, strategy, vars, matrix, inputsNone
jobs.<job_id>.defaults.runatomgit, strategy, matrix, env, vars, inputsNone
jobs.<job_id>.envatomgit, strategy, matrix, vars, secrets, inputsNone
jobs.<job_id>.ifatomgit, vars, inputsalways, cancelled, success, failure
jobs.<job_id>.nameatomgit, strategy, matrix, vars, inputsNone
jobs.<job_id>.outputs.<output_id>atomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputsNone
jobs.<job_id>.runs-onatomgit, strategy, matrix, vars, inputsNone
jobs.<job_id>.secrets.<secrets_id>atomgit, strategy, matrix, secrets, inputs, varsNone
jobs.<job_id>.steps.continue-on-erroratomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
jobs.<job_id>.steps.envatomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
jobs.<job_id>.steps.ifatomgit, strategy, matrix, job, runner, env, vars, steps, inputsalways, cancelled, success, failure, hashFiles
jobs.<job_id>.steps.nameatomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
jobs.<job_id>.steps.runatomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
jobs.<job_id>.steps.timeout-minutesatomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
jobs.<job_id>.steps.withatomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
jobs.<job_id>.steps.working-directoryatomgit, strategy, matrix, job, runner, env, vars, secrets, steps, inputshashFiles
jobs.<job_id>.strategyatomgit, vars, inputsNone
jobs.<job_id>.timeout-minutesatomgit, strategy, matrix, vars, inputsNone
jobs.<job_id>.with.<with_id>atomgit, strategy, matrix, inputs, varsNone
on.workflow_call.inputs.<inputs_id>.defaultatomgit, inputs, varsNone
on.workflow_call.outputs.<output_id>.valueatomgit, jobs, vars, inputsNone

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

您可以将上下文的内容打印到日志以进行调试。 是将 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] 创建工作流和操作时,您应该始终考虑您的代码是否可能执行来自潜在攻击者的不可信输入。某些上下文应被视为不可信输入,因为攻击者可能会插入自己的恶意内容。

属性名称类型描述
atomgitobject工作流中任何作业或步骤期间可用的顶层上下文。此对象包含下面列出的所有属性。
atomgit.actionstring当前正在运行的操作的名称,或步骤的 。AtomGit Pipeline 会移除特殊字符,并且当当前步骤在没有 id 的情况下运行脚本时,使用名称 __run。如果同一作业中多次使用同一操作,该名称将包含带下划线序列号后缀。例如,您运行的第一个脚本将命名为 __run,第二个脚本将命名为 __run_2。类似地,actions/checkout 的第二次调用将是 actionscheckout2。
atomgit.action_pathstring操作所在的路径。此属性仅在复合操作中受支持。您可以使用此路径访问与操作位于同一仓库中的文件,例如通过更改目录到路径:cd ${{ atomgit.action_path }}。
atomgit.action_refstring对于执行操作的步骤,这是正在执行的操作的引用。例如,v2。 不要在 run 关键字中使用。要使此上下文与复合操作一起工作,请在复合操作的 env 上下文中引用它。
atomgit.action_repositorystring对于执行操作的步骤,这是操作的所有者和仓库名称。例如,actions/checkout。 不要在 run 关键字中使用。要使此上下文与复合操作一起工作,请在复合操作的 env 上下文中引用它。
atomgit.actorstring触发初始工作流运行的用户的用户名。如果工作流运行是重新运行,此值可能与 atomgit.triggering_actor 不同。任何工作流重新运行都将使用 atomgit.actor 的权限,即使启动重新运行的参与者 (atomgit.triggering_actor) 具有不同的权限。
atomgit.actor_idstring触发初始工作流运行的人员或应用的账户 ID。例如,1234567。请注意这与参与者用户名不同。
atomgit.api_urlstringAtomGit REST API 的 URL。
atomgit.base_refstring工作流运行中拉取请求的 base_ref 或目标分支。此属性仅在触发工作流运行的事件是 pull_request 或 pull_request_target 时才可用。
atomgit.envstring执行环境上将环境变量从工作流命令设置到的文件的路径。此文件对当前步骤是唯一的,并且作业中的每个步骤都是不同的文件。
atomgit.eventobject完整的事件 webhook 负载。您可以使用此上下文访问事件的各个属性。此对象与触发工作流运行的事件的 webhook 负载相同,并且对于每个事件都不同。每个 AtomGit Pipeline 事件的 webhooks 链接在 中。例如,对于由 触发的工作流运行,此对象包含 的内容。
atomgit.event_namestring触发工作流运行的事件的名称。
atomgit.event_pathstring执行环境上包含完整事件 webhook 负载的文件的路径。
atomgit.head_refstring工作流运行中拉取请求的 head_ref 或源分支。此属性仅在触发工作流运行的事件是 pull_request 或 pull_request_target 时才可用。
atomgit.jobstring当前作业的 。 注意:此上下文属性由 Actions 执行环境设置,仅在作业的执行 steps 中可用。否则,该属性的值为 null。
atomgit.pathstring执行环境上将系统 PATH 变量从工作流命令设置到的文件的路径。此文件对当前步骤是唯一的,并且作业中的每个步骤都是不同的文件。
atomgit.refstring触发工作流运行的分支或标签的完整引用。对于 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_namestring触发工作流运行的分支或标签的短引用名称。此值与 AtomGit 上显示的分支或标签名称匹配。例如,feature-branch-1。 对于未合并的拉取请求,格式是 <pr_number>/merge。
atomgit.ref_typestring触发工作流运行的引用类型。有效值为 branch 或 tag。
atomgit.repositorystring所有者和仓库名称。例如,octocat/Hello-World。
atomgit.repository_idstring仓库的 ID。例如,123456789。请注意这与仓库名称不同。
atomgit.string仓库的 Git URL。例如,git://atomgit.com/octocat/hello-world.git。
atomgit.retention_daysstring工作流运行日志和构件保留的天数。
atomgit.run_idstring存储库中每个工作流运行的唯一编号。如果您重新运行工作流运行,此编号不会更改。
atomgit.run_numberstring存储库中特定工作流每次运行的唯一编号。此编号从工作流的第一次运行为 1 开始,每次新运行都会递增。如果您重新运行工作流运行,此编号不会更改。
atomgit.run_attemptstring存储库中特定工作流运行每次尝试的唯一编号。此编号从工作流运行的第一次尝试为 1 开始,每次重新运行都会递增。
atomgit.server_urlstringAtomGit 服务器的 URL。例如:https://atomgit.com。
atomgit.shastring触发工作流的提交 SHA。此提交 SHA 的值取决于触发工作流的事件。例如,ffac537e6cbbf934b08745a378932722df287a53。
atomgit.tokenstring用于代表安装在您仓库上的 AtomGit App 进行身份验证的令牌。这功能上等效于 ATOMGIT_TOKEN 密钥。 注意:此上下文属性由 Actions 执行环境设置,仅在作业的执行 steps 中可用。否则,该属性的值为 null。
atomgit.triggering_actorstring启动工作流运行的用户的用户名。如果工作流运行是重新运行,此值可能与 atomgit.actor 不同。任何工作流重新运行都将使用 atomgit.actor 的权限,即使启动重新运行的参与者 (atomgit.triggering_actor) 具有不同的权限。
atomgit.workflowstring工作流的名称。如果工作流文件未指定 name,则此属性的值是存储库中工作流文件的完整路径。
atomgit.workflow_refstring工作流的引用路径。例如,octocat/hello-world/.atomgit/workflows/my-workflow.yml@refs/heads/my_branch。
atomgit.workflow_shastring工作流文件的提交 SHA。
atomgit.workspacestring执行环境上步骤的默认工作目录,以及使用 操作时您仓库的默认位置。
atomgit.start_timestampstring工作流启动时间戳。

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,使用前建议判空。
  • 表格"取值"列标注了枚举型字段的完整取值集合;未标注的字段为自由取值。

通用基底字段(所有事件共享)​

下列字段在所有事件的 atomgit.event 中均存在,后续各场景不再重复列出。

访问路径类型取值作用说明
atomgit.event.actionstring取决于事件,见各场景事件的活动类型;push 事件无此字段。常用于在 if 条件中区分动作
atomgit.event.sender.idinteger—触发本次事件的用户 ID
atomgit.event.sender.loginstring—触发者登录名,用于识别本次运行由谁触发
atomgit.event.repository.idinteger—仓库 ID
atomgit.event.repository.namestring—仓库名
atomgit.event.repository.full_namestring—仓库全名(所有者/仓库名),拼接 API 地址时常用
atomgit.event.repository.default_branchstring—仓库默认分支名
atomgit.event.repository.privatebooleantrue / false是否为私有仓库,影响 Fork 与凭据策略

push 事件​

代码推送时触发。该事件无 action 字段,负载聚焦于本次推送的引用与提交信息。

访问路径类型取值作用说明
atomgit.event.refstring—被推送的完整引用,如 refs/heads/main,常作为分支过滤依据
atomgit.event.beforestring—推送前引用指向的提交 SHA;新建分支时为全 0
atomgit.event.afterstring—推送后引用指向的提交 SHA;
atomgit.event.createdbooleantrue / false本次推送是否为新建引用
atomgit.event.base_refstring—新建分支的来源引用,否则为 null
atomgit.event.head_commit.idstring—推送后最新提交的 SHA;删除分支时为 null
atomgit.event.head_commit.messagestring—推送后最新提交的信息

pull_request 事件​

Pull Request 自身发生活动时触发,包括开启、关闭、编辑、同步、指派、增删标签等。

活动类型:

取值触发时机
openedPR 被创建
updatedPR 标题或描述被编辑
closedPR 被关闭(是否合并看 merged 字段)
reopened已关闭的 PR 被重新打开

字段:

访问路径类型取值作用说明
atomgit.event.numberinteger—PR 序号,与 pull_request.number 同值的平级冗余字段
atomgit.event.pull_request.idinteger—PR 的 ID
atomgit.event.pull_request.numberinteger—PR 序号,回写评论、调用 API 的主键
atomgit.event.pull_request.titlestring—PR 标题
atomgit.event.pull_request.bodystring—PR 描述
atomgit.event.pull_request.statestringopen / closedPR 状态
atomgit.event.pull_request.draftbooleantrue / false是否为草稿 PR,草稿常跳过 CI
atomgit.event.pull_request.mergedbooleantrue / false是否已合并,配合 closed 可判断"合并而非仅关闭"
atomgit.event.pull_request.merged_atstring—合并时间,未合并时为 null
atomgit.event.pull_request.user.loginstring—PR 提交人登录名
atomgit.event.pull_request.labelsarray—标签列表,可用于按标签路由流水线
atomgit.event.pull_request.head.refstring—源分支名
atomgit.event.pull_request.head.shastring—源分支最新提交 SHA,显式检出 PR 代码时使用
atomgit.event.pull_request.merge_commit_shastring—PR场景预合并head commit
atomgit.event.pull_request.head.repo.full_namestring—源仓库全名;Fork 场景下与 base 不同,据此判断外部 PR
atomgit.event.pull_request.base.refstring—目标分支名,常作为分支过滤依据
atomgit.event.pull_request.base.shastring—目标分支最新提交 SHA
atomgit.event.pull_request.base.repo.full_namestring—目标仓库全名,即工作流所在仓库
atomgit.event.pull_request.created_atstring—PR 创建时间
atomgit.event.pull_request.updated_atstring—PR 最后更新时间

issue_comment 事件​

Issue 主评论区的评论被创建、编辑或删除时触发。

活动类型: created(评论被发表)、edited(评论被编辑)、deleted(评论被删除)。

访问路径类型取值作用说明
atomgit.event.issue.idinteger—Issue 的 ID
atomgit.event.issue.numberinteger—Issue 序号,回写评论的主键
atomgit.event.issue.titlestring—Issue 标题
atomgit.event.issue.bodystring—Issue 正文
atomgit.event.issue.statestringopen / closedIssue 状态
atomgit.event.issue.user.loginstring—Issue 创建者
atomgit.event.issue.labelsarray—Issue 标签列表
atomgit.event.comment.idinteger—评论 ID,回写或更新评论的主键
atomgit.event.comment.bodystring—评论内容,可用于解析 /deploy 等指令
atomgit.event.comment.user.loginstring—评论作者
atomgit.event.comment.author_associationstringOWNER / MEMBER / COLLABORATOR / CONTRIBUTOR / FIRST_TIME_CONTRIBUTOR / FIRST_TIMER / NONE评论作者与仓库的关系,用作权限过滤依据
atomgit.event.comment.created_atstring—评论创建时间
atomgit.event.comment.updated_atstring—评论最后更新时间

deleted 时,comment 为评论删除前的快照。

pull_request_comment 事件​

Pull Request 主评论区(Conversation 标签页)的评论被创建、编辑或删除时触发。结构与 issue_comment 对称,载体由 issue 替换为 pull_request。

活动类型:

created、edited、deleted,含义同 issue_comment。

访问路径类型取值作用说明
atomgit.event.pull_request.numberinteger—评论所属 PR 序号
atomgit.event.pull_request.statestringopen / closedPR 状态
atomgit.event.pull_request.user.loginstring—PR 提交人
atomgit.event.pull_request.head.refstring—源分支名
atomgit.event.pull_request.head.shastring—源分支最新提交 SHA,评论触发 CI 重跑时检出使用
atomgit.event.pull_request.merge_commit_shastring—PR场景预合并head commit
atomgit.event.pull_request.head.repo.full_namestring—源仓库全名,用于判断是否为外部 Fork
atomgit.event.pull_request.base.refstring—目标分支名,常作为分支过滤依据
atomgit.event.pull_request.base.repo.full_namestring—目标仓库全名
atomgit.event.comment.idinteger—评论 ID
atomgit.event.comment.bodystring—评论内容,可用于解析指令
atomgit.event.comment.user.loginstring—评论作者
atomgit.event.comment.author_associationstringOWNER / MEMBER / COLLABORATOR / CONTRIBUTOR / FIRST_TIME_CONTRIBUTOR / FIRST_TIMER / NONE评论作者与仓库的关系,用作权限过滤依据
atomgit.event.comment.created_atstring—评论创建时间
atomgit.event.comment.updated_atstring—评论最后更新时间

pull_request_review 事件​

Pull Request 的评审被提交、编辑或撤销时触发。一次评审由若干行内评论、一段评审正文与一个评审状态组成。

活动类型:

取值触发时机
submitted评审被提交
edited评审正文被编辑
dismissed评审被撤销(保留记录,非删除)

字段:

访问路径类型取值作用说明
atomgit.event.pull_request.numberinteger—被评审 PR 序号
atomgit.event.pull_request.statestringopen / closedPR 状态
atomgit.event.pull_request.head.refstring—源分支名
atomgit.event.pull_request.head.shastring—源分支最新提交 SHA
atomgit.event.pull_request.base.refstring—目标分支名,常作为分支过滤依据
atomgit.event.review.idinteger—评审 ID
atomgit.event.review.statestringapproved / changes_requested / commented / dismissed评审结果,核心过滤字段
atomgit.event.review.commit_idstring—评审时 PR 的源分支 SHA,锁定被评审的版本
atomgit.event.review.submitted_atstring—评审提交时间

使用示例​

# 评论中包含 /deploy 指令,且评论者为仓库成员时触发部署
on:
pull_request_comment:
types: [created]

jobs:
deploy:
if: >-
contains(atomgit.event.comment.body, '/deploy') &&
contains(fromJSON('["OWNER","MEMBER"]'), atomgit.event.comment.author_association)
runs-on: ubuntu-latest
steps:
- name: Run sh
run: |
echo "PR #$NUMBER ($HEAD → $BASE) 收到部署指令"
env:
NUMBER: ${{ atomgit.event.pull_request.number }}
HEAD: ${{ atomgit.event.pull_request.head.ref }}
BASE: ${{ atomgit.event.pull_request.base.ref }}
# PR 评审通过后运行后续任务
on:
pull_request_review:
types: [submitted]

jobs:
on_approved:
if: ${{ atomgit.event.review.state == 'approved' }}
runs-on: ubuntu-latest
steps:
- name: Run echo
run: echo "PR #${{ atomgit.event.pull_request.number }} 已通过评审"

2.4 其他上下文详细属性​

env 上下文​

env 上下文包含已在工作流、作业或步骤中设置的变量。它不包含执行环境进程继承的变量。

您可以检索存储在 env 上下文中的变量的值,并在您的工作流文件中使用这些值。您可以在工作流步骤中的任何键中使用 env 上下文,除了 id 和 uses 键。

如果您想在执行环境内部使用变量的值,请使用执行环境操作系统的正常方法来读取环境变量。

属性名称类型描述
envobject此上下文对作业中的每个步骤都是不同的。您可以从作业中的任何步骤访问此上下文。此对象包含以下列出的属性。
env.<env_name>string特定环境变量的值。

env 上下文的示例内容​

env 上下文的内容是变量名称到其值的映射。上下文的内容可能取决于它在工作流运行中的使用位置。在此示例中,env 上下文包含两个变量。

{

"first_name": "Mona",

"super_duper_var": "totally_awesome"

}

env 上下文的示例用法​

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

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

name: Hi Mascot
on:
push:
branches: main
env:
mascot: Mona
super_duper_var: totally_awesome

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

vars 上下文​

vars 上下文包含在组织、仓库和环境级别设置的自定义配置变量。

vars 上下文的示例内容​

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

{
"mascot": "Mona"
}

vars 上下文的示例用法​

此示例工作流显示如何在仓库、环境或组织级别设置的配置变量自动通过 vars 上下文可用。

[!NOTE] 环境级别的配置变量在执行环境声明其环境后会自动可用。

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

以下示例展示在工作流中随处使用配置变量与 vars 上下文。以下每个配置变量都已在仓库、组织或环境级别定义。

on:
workflow_dispatch:
env:
# 使用配置变量的值设置环境变量
env_var: ${{ vars.ENV_CONTEXT_VAR }}

jobs:
display-variables:
name: ${{ vars.JOB_NAME }}
# 您可以在动态作业中使用配置变量与 `vars` 上下文
if: ${{ vars.USE_VARIABLES == 'true' }}
runs-on: ${{ vars.RUNNER }}
environment: ${{ vars.ENVIRONMENT_STAGE }}
steps:
- name: Use variables
run: |
echo "repository variable : $REPOSITORY_VAR"
echo "organization variable : $ORGANIZATION_VAR"
echo "overridden variable : $OVERRIDE_VAR"
echo "variable from shell environment : $env_var"
env:
REPOSITORY_VAR: ${{ vars.REPOSITORY_VAR }}
ORGANIZATION_VAR: ${{ vars.ORGANIZATION_VAR }}
OVERRIDE_VAR: ${{ vars.OVERRIDE_VAR }}

- name: ${{ vars.HELLO_WORLD_STEP }}
if: ${{ vars.HELLO_WORLD_ENABLED == 'true' }}
uses: actions/hello-world-javascript-action@main
with:
who-to-greet: ${{ vars.GREET_NAME }}

job 上下文​

job 上下文包含关于当前正在运行的作业的信息。

属性名称类型描述
jobobject此上下文对工作流运行中的每个作业都是不同的。您可以从作业中的任何步骤访问此上下文。此对象包含以下列出的所有属性。
job.containerobject关于作业容器的信息。
job.statusstring作业的当前状态。可能值为 success、failure 或 cancelled。

job 上下文的示例内容​

此示例 job 上下文使用了具有映射端口的 PostgreSQL 服务容器。如果作业中没有使用容器或服务容器,则 job 上下文仅包含 status 和 check_run_id 属性。

{
"status": "success"
}

jobs 上下文​

jobs 上下文仅在可重用工作流中可用,并且只能用于为可重用工作流设置输出

属性名称类型描述
jobsobject这仅在可重用工作流中可用,并且只能用于为可重用工作流设置输出。此对象包含以下列出的所有属性。
jobs.<job_id>.resultstring可重用工作流中作业的结果。可能值为 success、failure、cancelled 或 skipped。
jobs.<job_id>.outputsobject可重用工作流中作业的输出集合。
jobs.<job_id>.outputs.<output_name>string可重用工作流中作业的特定输出的值。

jobs 上下文的示例内容​

此示例 jobs 上下文包含来自可重用工作流运行的作业的结果和输出。

{
"example_job": {
"result": "success",
"outputs": {
"output1": "hello",
"output2": "world"
}
}
}

jobs 上下文的示例用法​

此示例可重用工作流使用 jobs 上下文为可重用工作流设置输出。请注意输出如何从步骤流向作业,然后流向 workflow_call 触发器。

name: Reusable workflow

on:
workflow_call:
# 将工作流输出映射到作业输出
outputs:
firstword:
description: "第一个输出字符串"
value: ${{ jobs.example_job.outputs.output1 }}
secondword:
description: "第二个输出字符串"
value: ${{ jobs.example_job.outputs.output2 }}

jobs:
example_job:
name: Generate output
runs-on: ubuntu-latest
# 将作业输出映射到步骤输出
outputs:
output1: ${{ steps.step1.outputs.firstword }}
output2: ${{ steps.step2.outputs.secondword }}
steps:
- name: Run step1
id: step1
run: echo "firstword=hello" >> $ATOMGIT_OUTPUT
- name: Run step2
id: step2
run: echo "secondword=world" >> $ATOMGIT_OUTPUT

steps 上下文​

steps 上下文包含当前作业中具有 指定并且已经运行的步骤的信息。

属性名称类型描述
stepsobject此上下文对作业中的每个步骤都是不同的。您可以从作业中的任何步骤访问此上下文。此对象包含以下列出的所有属性。
steps.<step_id>.outputsobject为步骤定义的输出集合。
steps.<step_id>.conclusionstring应用 后完成的步骤的结果。可能值为 success、failure、cancelled 或 skipped。当 continue-on-error 步骤失败时,outcome 为 failure,但最终 conclusion 为 success。
steps.<step_id>.outcomestring应用 之前完成的步骤的结果。可能值为 success、failure、cancelled 或 skipped。当 continue-on-error 步骤失败时,outcome 为 failure,但最终 conclusion 为 success。
steps.<step_id>.outputs.<output_name>string特定输出的值。

steps 上下文的示例内容​

此示例 steps 上下文显示了两个先前步骤,它们具有指定的 。第一个步骤具有名为 checkout 的 id,第二个是 generate_number。generate_number 步骤具有名为 random_number 的输出。

{
"checkout": {
"outputs": {},
"outcome": "success",
"conclusion": "success"
},
"generate_number": {
"outputs": {
"random_number": "1"
},
"outcome": "success",
"conclusion": "success"
}
}

steps 上下文的示例用法​

此示例工作流在一个步骤中将随机数生成为输出,并且后续步骤使用 steps 上下文读取该输出的值。

name: Generate random failure
on:
push:
branches: main
jobs:
randomly-failing-job:
runs-on: ubuntu-latest
steps:
- name: Generate 0 or 1
id: generate_number
run: echo "random_number=$(($RANDOM % 2))" >> $ATOMGIT_OUTPUT
- name: Pass or fail
run: |
if [[ ${{ steps.generate_number.outputs.random_number }} == 0 ]]; then exit 0; else exit 1; fi

runner 上下文​

runner 上下文包含关于正在执行当前作业的执行环境的信息。

属性名称类型描述
runnerobject此上下文对工作流运行中的每个作业都是不同的。此对象包含以下列出的所有属性。
runner.namestring执行作业的执行环境的名称。此名称在工作流运行中可能不是唯一的,因为仓库和组织级别的执行环境可能使用相同的名称。
runner.osstring执行作业的执行环境的操作系统。可能值为 Linux、Windows 或 macOS。
runner.archstring执行作业的执行环境的架构。可能值为 X86、X64、ARM 或 ARM64。
runner.tool_cachestringAtomGit 托管的执行环境上包含预安装工具的目录的路径。
runner.environmentstring执行作业的执行环境的环境。可能值为:codearts-hosted 用于 AtomGit 提供的 AtomGit 托管执行环境,self-hosted 用于由仓库所有者配置的自托管执行环境。

runner 上下文的示例内容​

以下示例上下文来自 Linux AtomGit 托管执行环境。

{
"os": "Linux",
"arch": "X64",
"name": "Atomgit Actions 2",
"tool_cache": "/opt/hostedtoolcache",
"temp": "/home/runner/work/_temp"
}

runner 上下文的示例用法​

此示例工作流使用 runner 上下文设置写入日志的临时目录路径,如果工作流失败,则将这些日志作为构件上传。

name: Build
on:
push:
branches: main

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Build with logs
run: |
mkdir ${{ runner.temp }}/build_logs
echo "Logs from building" > ${{ runner.temp }}/build_logs/build.logs
exit 1
- name: Upload logs on fail
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: Build failure logs
path: ${{ runner.temp }}/build_logs

secrets 上下文​

secrets 上下文包含可用的工作流运行的密钥的名称和值。出于安全原因,secrets 上下文不适用于复合操作。如果您想要将密钥传递给复合操作,您需要将其明确作为输入传递。

ATOMGIT_TOKEN 是为每个工作流运行自动创建的密钥,并且始终包含在 secrets 上下文中。

[!WARNING] 如果密钥用于工作流作业中,AtomGit Pipeline 会自动将打印到日志中的密钥遮蔽。您应该避免有意将密钥打印到日志。

属性名称类型描述
secretsobject此上下文在工作流运行中的每个作业中都是相同的。您可以从作业中的任何步骤访问此上下文。此对象包含以下列出的所有属性。
secrets.ATOMGIT_TOKENstring为每个工作流运行自动创建的令牌。
secrets.<secret_name>string特定密钥的值。

secrets 上下文的示例内容​

以下 secrets 上下文的示例内容显示了自动的 ATOMGIT_TOKEN,以及工作流运行可用的其他两个密钥。

{
"atomgit_token": "***",
"NPM_TOKEN": "***",
"SUPERSECRET": "***"
}

secrets 上下文的示例用法​

此示例工作流使用 ,它需要 ATOMGIT_TOKEN 作为 GH_TOKEN 输入参数的值:

name: Open new issue
on: workflow_dispatch

jobs:
open-issue:
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
steps:
- name: Run sh
run: |
gh issue --repo ${{ atomgit.repository }} \
create --title "Issue title" --body "Issue body"
env:
GH_TOKEN: ${{ secrets.ATOMGIT_TOKEN }}

strategy 上下文​

对于具有矩阵的工作流,strategy 上下文包含关于当前作业的矩阵执行策略的信息。

属性名称类型描述
strategyobject此上下文对工作流运行中的每个作业都是不同的。您可以从工作流中的任何作业或步骤访问此上下文。此对象包含以下列出的所有属性。
strategy.fail-fastboolean当此计算为 true 时,如果矩阵中的任何作业失败,所有正在进行的作业都将被取消。
strategy.job-indexnumber矩阵中当前作业的索引。注意:此编号是零基编号。矩阵中第一个作业的索引是 0。
strategy.job-totalnumber矩阵中作业的总数。注意:此编号不是零基编号。例如,对于具有四个作业的矩阵,job-total 的值是 4。
strategy.max-parallelnumber使用 matrix 作业策略时可以同时运行的最大作业数。

strategy 上下文的示例内容​

以下 strategy 上下文的示例内容来自具有四个作业的矩阵,并取自最后一个作业。请注意零基 job-index 编号与不是零基的 job-total 之间的差异。

{
"fail-fast": true,
"job-index": 3,
"job-total": 4,
"max-parallel": 4
}

strategy 上下文的示例用法​

此示例工作流使用 strategy.job-index 属性为矩阵中每个作业的日志文件设置唯一名称。

name: Test strategy
on:
push:
branches: main

jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
test-group: [1, 2]
node: [14, 16]
steps:
- name: Run echo
run: echo "Mock test logs" > test-job-${{ strategy.job-index }}.txt
- name: Upload logs
uses: actions/upload-artifact@v4
with:
name: Build log for job ${{ strategy.job-index }}
path: test-job-${{ strategy.job-index }}.txt

matrix 上下文​

对于具有矩阵的工作流,matrix 上下文包含在工作流文件中定义的、适用于当前作业的矩阵属性。例如,如果您配置具有 os 和 node 键的矩阵,则 matrix 上下文对象包括 os 和 node 属性以及当前作业正在使用的值。

matrix 上下文中没有标准属性,只有在工作流文件中定义的那些属性。

属性名称类型描述
matrixobject此上下文仅适用于矩阵中的作业,并且对工作流运行中的每个作业都是不同的。您可以从工作流中的任何作业或步骤访问此上下文。此对象包含以下列出的属性。
matrix.<property_name>string矩阵属性的值。

matrix 上下文的示例内容​

以下 matrix 上下文的示例内容来自具有在工作流中定义的 os 和 node 矩阵属性的作业中的作业。该作业正在执行 ubuntu-latest OS 和 Node.js 版本 16 的矩阵组合。

{
"os": "ubuntu-latest",
"node": 16
}

matrix 上下文的示例用法​

此示例工作流使用带有 os 和 node 键的矩阵。它使用 matrix.os 属性为每个作业设置执行环境类型,并使用 matrix.node 属性为每个作业设置 Node.js 版本。

name: Test matrix
on:
push:
branches: main

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu os:-latest, windows-latest]
node: [14, 16]
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- name: Output node version
run: node --version

inputs 上下文​

inputs 上下文包含传递给操作、可重用工作流或手动触发的工作流的输入属性。对于可重用工作流,输入名称和类型在可重用工作流的 workflow_call 事件配workflow_call中定义,并且输入值从调用可重用工作流的外部工作流中的 jobs.<job_id>.with 传递。对于手动触发的工作流,输入在工作流的 workflow_dispatch 中定义。

inputs 上下文中的属性在工作流文件中定义。它们仅在 可重用工作流workflow_call 或由workflow_dispatch 触发的工作流中可用。

属性名称类型描述
inputsobject此上下文仅在 可重用工作流或由 workflow_dispatch` 事件触发的工作流中可用。您可以从工作流中的任何作业或步骤访问此上下文。此对象包含以下列出的属性。
inputs.<name>string 或 number 或 boolean 或 choice从外部工作流传递的每个输入值。

inputs 上下文的示例内容​

以下 inputs 上下文的示例内容来自定义了 build_id、deploy_target 和 perform_deploy 输入的工作流。

{
"build_id": 123456768,
"deploy_target": "deployment_sys_1a",
"perform_deploy": true
}

可重用工作流中 inputs 上下文的示例用法​

此示例可重用工作流使用 inputs 上下文获取从调用者工作流传递给可重用工作流的 build_id、deploy_target 和 perform_deploy 输入的值。

name: Reusable deploy workflow
on:
workflow_call:
inputs:
build_id:
required: true
type: number
deploy_target:
required: true
type: string
perform_deploy:
required: true
type: boolean

jobs:
deploy:
runs-on: ubuntu-latest
if: ${{ inputs.perform_deploy }}
steps:
- name: Deploy build to target
run: echo "Deploying build:${{ inputs.build_id }} to target:${{ inputs.deploy_target }}"

手动触发的工作流中 inputs 上下文的示例用法​

此示例由 workflow_dispatch 事件触发的工作流使用 inputs 上下文获取传递给工作流的 build_id、deploy_target 和 perform_deploy 输入的值。

on:
workflow_dispatch:
inputs:
build_id:
required: true
type: string
deploy_target:
required: true
type: string
perform_deploy:
required: true
type: boolean

jobs:
deploy:
runs-on: ubuntu-latest
if: ${{ inputs.perform_deploy }}
steps:
- name: Deploy build to target
run: echo "Deploying build:${{ inputs.build_id }} to target:${{ inputs.deploy_target }}"

上下文生命周期管理​

在 AtomGit Actions 中,上下文并非在工作流触发时一次性全部加载。工作流的执行遵循严格的分步求值机制。只有当流水线编排和调度引擎流转到特定生命周期阶段时,对应的上下文才会被解析并注入到运行环境中。如果在错误的阶段引用了尚未注入的上下文,将导致变量为空或引发语法评估错误。

工作流的上下文注入时机分为四个核心阶段:解析、调度分配、执行、归档。

上下文注入时机​

生命周期阶段注入/求值时机说明注入的上下文数据内容与技术定义
1. 解析阶段1.引擎接收 Webhook 或手动触发事件,初次解析并校验 YAML 结构时。 2.构建作业依赖拓扑图 (DAG),并展开并发矩阵时。ATOMGIT inputs vars matrix strategy全局基线与输入数据 • ATOMGIT: 仓库元数据、触发事件载荷 (Payload)、提交哈希等。 • inputs: 用户手动触发或被上游调用时传入的参数。 • vars: 组织/仓库/环境级别的预设明文变量。 作业编排与拓扑数据 • needs: 前置依赖作业 (needs: xxx) 完成后,其状态和输出产物。 • matrix: 并发矩阵展开时,当前作业实例对应的具体矩阵维度参数。 • strategy: 当前作业的调度策略配置(如并发上限、失败策略)。
2. 调度分配阶段作业通过条件评估,成功分配到具体 Runner 物理节点或容器时。runner secrets运行环境与敏感数据 • runner: 目标机器的硬件和系统环境(如 OS、架构、临时目录)。 • secrets: 加密凭证。仅在安全分配节点后解密注入,严禁在作业级 if 中读取。
3. 执行阶段Runner 接收完整指令,按顺序开始执行具体步骤 (steps) 代码时。env job steps运行时动态状态数据 • env: 环境变量,按 工作流 -> 作业 -> 步骤 的层级在执行到该节点时动态覆盖。 • job: 当前作业的实时执行状态(如 success, cancelled)。 • steps: 当前作业内,已执行完毕步骤的输出结果 (outputs) 和终止状态。
4. 归档阶段(特殊场景) 可复用工作流所有作业执行完毕,需要向上游调用方返回结果时。jobs可复用工作流输出映射 • jobs: 仅限 workflow_call 触发的可复用工作流使用。用于在工作流顶层的 outputs 块中求值,将内部某个具体作业的输出提取并暴露给上游调用方。

上下文可用性​

在编写 YAML 时,引擎对不同配置字段允许读取的上下文有严格的白名单限制。如果在一个节点强行引用了不在白名单内的上下文,解析器会求值为空。

以下是不同场景下的上下文可用性:

上下文jobs.<job_id>.if(作业执行条件)jobs.<job_id>.outputs(作业级输出)steps.if(步骤执行条件)run 脚本(Shell 执行环境)on.workflow_call.outputs(可复用工作流最终输出)
ATOMGIT✅ 可用✅ 可用✅ 可用✅ 可用✅ 可用
inputs✅ 可用✅ 可用✅ 可用✅ 可用✅ 可用
vars✅ 可用✅ 可用✅ 可用✅ 可用❌ 不可用
needs✅ 可用✅ 可用✅ 可用✅ 可用❌ 不可用
matrix❌ 不可用✅ 可用✅ 可用✅ 可用❌ 不可用
strategy❌ 不可用✅ 可用✅ 可用✅ 可用❌ 不可用
runner❌ 不可用✅ 可用✅ 可用✅ 可用❌ 不可用
secrets❌ 不可用✅ 可用✅ 可用✅ 可用❌ 不可用
env❌ 不可用✅ 可用✅ 可用✅ 可用❌ 不可用
job❌ 不可用✅ 可用✅ 可用✅ 可用❌ 不可用
steps❌ 不可用✅ 可用✅ 可用✅ 可用❌ 不可用
jobs❌ 不可用❌ 不可用❌ 不可用❌ 不可用✅ 唯一可用处