注意:GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。
关于上下文
上下文是一种访问工作流运行、变量、运行器环境、作业及步骤相关信息的方式。 每个上下文都是一个包含属性的对象,属性可以是字符串或其他对象。
在不同的工作流运行条件下,上下文、对象和属性大不相同。 例如,matrix
上下文仅针对矩阵中的作业填充。
您可以使用表达式语法访问上下文。 有关详细信息,请参阅“表达式”。
${{ <context> }}
警告:创建工作流程和操作时,应始终考虑代码是否会执行来自可能的攻击者的不信任输入。 某些上下文应被视为不受信任的输入,因为攻击者可能会插入自己的恶意内容。 有关详细信息,请参阅“GitHub Actions 的安全强化”。
上下文名称 | 类型 | 说明 |
---|---|---|
github | object | 工作流程运行的相关信息。 有关更多信息,请参阅 github 上下文。 |
env | object | 包含工作流、作业或步骤中设置的变量。 有关更多信息,请参阅 env 上下文。 |
作为表达式的一部分,您可以使用以下两种语法之一访问上下文信息。
- 索引语法:
github['sha']
- 属性取消引用语法:
github.sha
若要使用属性取消引用语法,属性名称必须以字母或 _
开头,并且只能包含字母数字字符、-
或 _
。
如果尝试取消引用不存在的属性,则计算结果为空字符串。
确定何时使用上下文
GitHub Actions 包含一个称为“上下文”的变量集和一个称为“默认变量”的类似变量集。 这些变量预期用于工作流程中的不同点:
- 默认环境变量:这些环境变量仅存在于执行作业的运行器上。 有关详细信息,请参阅“变量”。
- 上下文:你可以在工作流的任何时间点使用大多数上下文,包括当默认变量不可用时。 例如,你可以使用带表达式的上下文执行初始处理,然后将作业路由到运行器以供执行;这允许你使用带有条件
if
关键字的上下文来确定步骤是否应运行。 作业运行后,还可以从执行作业的运行器(如runner.os
)检索上下文变量。 有关可在工作流中使用不同上下文的位置的详细信息,请参阅“上下文”。
下面的示例演示了这些不同类型的变量如何在一个作业中一起使用:
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
函数在任何地方都不可用。
下表列出了工作流程中每一个上下文和特殊函数可以使用的地方。 除非下面列出,否则可以在任何地方使用函数。
| 工作流程键 | 上下文 | 特殊函数 |
| ---- | ------- | ----------------- | | concurrency
| github, inputs
| 无 | | env
| github, secrets, inputs
| 无 | | jobs.<job_id>.concurrency
| github, needs, strategy, matrix, inputs
| 无 | | jobs.<job_id>.container
| github, needs, strategy, matrix, env, secrets, inputs
| 无 | | jobs.<job_id>.container.credentials
| github, needs, strategy, matrix, env, secrets, inputs
| 无 | | jobs.<job_id>.container.env.<env_id>
| github, needs, strategy, matrix, job, runner, env, secrets, inputs
| 无 | | jobs.<job_id>.continue-on-error
| github, needs, strategy, matrix, inputs
| 无 | | jobs.<job_id>.defaults.run
| github, needs, strategy, matrix, env, inputs
| 无 | | jobs.<job_id>.env
| github, needs, strategy, matrix, secrets, inputs
| 无 | | jobs.<job_id>.environment
| github, needs, strategy, matrix, inputs
| 无 | | jobs.<job_id>.environment.url
| github, needs, strategy, matrix, job, runner, env, steps, inputs
| 无 | | jobs.<job_id>.if
| github, needs, inputs
| always, cancelled, success, failure
| | jobs.<job_id>.name
| github, needs, strategy, matrix, inputs
| 无 | | jobs.<job_id>.outputs.<output_id>
| github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs
| 无 | | jobs.<job_id>.runs-on
| github, needs, strategy, matrix, inputs
| 无 | | jobs.<job_id>.secrets.<secrets_id>
| github, needs, strategy, matrix, secrets, inputs
| 无 | | jobs.<job_id>.services
| github, needs, strategy, matrix, inputs
| 无 | | jobs.<job_id>.services.<service_id>.credentials
| github, needs, strategy, matrix, env, secrets, inputs
| 无 | | jobs.<job_id>.services.<service_id>.env.<env_id>
| github, needs, strategy, matrix, job, runner, env, secrets, inputs
| 无 | | jobs.<job_id>.steps.continue-on-error
| github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs
| hashFiles
| | jobs.<job_id>.steps.env
| github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs
| hashFiles
| | jobs.<job_id>.steps.if
| github, needs, strategy, matrix, job, runner, env, steps, inputs
| always, cancelled, success, failure, hashFiles
| | jobs.<job_id>.steps.name
| github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs
| hashFiles
| | jobs.<job_id>.steps.run
| github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs
| hashFiles
| | jobs.<job_id>.steps.timeout-minutes
| github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs
| hashFiles
| | jobs.<job_id>.steps.with
| github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs
| hashFiles
| | jobs.<job_id>.steps.working-directory
| github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs
| hashFiles
| | jobs.<job_id>.strategy
| github, needs, inputs
| 无 | | jobs.<job_id>.timeout-minutes
| github, needs, strategy, matrix, inputs
| 无 | | jobs.<job_id>.with.<with_id>
| github, needs, strategy, matrix, inputs
| 无 | | on.workflow_call.inputs.<inputs_id>.default
| github, inputs
| 无 | | on.workflow_call.outputs.<output_id>.value
| github, jobs, inputs
| 无 |
示例:将上下文信息打印到日志
您可以将上下文的内容打印到日志中进行调试。 需要使用 toJSON
函数 才能将 JSON 对象优质打印到日志。
警告: 使用整个 github
上下文时,请注意其中包含敏感信息,例如 github.token
。 GitHub 在打印到控制台时会隐藏密钥,但您在导出或打印上下文时应谨慎行事。
name: Context testing
on: push
jobs:
dump_contexts_to_log:
runs-on: ubuntu-latest
steps:
- name: Dump GitHub context
id: github_context_step
run: echo '${{ toJSON(github) }}'
- name: Dump job context
run: echo '${{ toJSON(job) }}'
- name: Dump steps context
run: echo '${{ toJSON(steps) }}'
- name: Dump runner context
run: echo '${{ toJSON(runner) }}'
- name: Dump strategy context
run: echo '${{ toJSON(strategy) }}'
- name: Dump matrix context
run: echo '${{ toJSON(matrix) }}'
github
上下文
github
上下文包含有关工作流运行和触发运行的事件的信息。 还可以读取环境变量中的大多数 github
上下文数据。 有关环境变量的详细信息,请参阅“变量”。
警告: 使用整个 github
上下文时,请注意其中包含敏感信息,例如 github.token
。 GitHub 在打印到控制台时会隐藏密钥,但您在导出或打印上下文时应谨慎行事。
警告:创建工作流程和操作时,应始终考虑代码是否会执行来自可能的攻击者的不信任输入。 某些上下文应被视为不受信任的输入,因为攻击者可能会插入自己的恶意内容。 有关详细信息,请参阅“GitHub Actions 的安全强化”。
属性名称 | 类型 | 说明 |
---|---|---|
github | object | 工作流程中任何作业或步骤期间可用的顶层上下文。 此对象包含下面列出的所有属性。 |
github.action | string | 正在运行的操作的名称,或步骤的 id 。 在当前步骤运行脚本(无 id )时,GitHub 删除特殊字符并使用名称 __run 。 如果在同一作业中多次使用相同的操作,则名称将包含一个前面跟序号和下划线的后缀。 例如,运行的第一个脚本名称 __run ,则第二个脚本将命名为 __run_2 。 同样,actions/checkout 的第二次调用将为 actionscheckout2 。 |
github.action_path | string | 操作所在的路径。 此属性仅在复合操作中受支持。 可以使用此路径访问与操作位于同一存储库中的文件,例如将目录更改为该路径: cd ${{ github.action_path }} 。 |
github.action_ref | string | 对于执行操作的步骤,这是正在执行的操作的引用。 例如,v2 。 |
github.action_repository | string | 对于执行操作的步骤,这是操作的所有者和存储库名称。 例如,actions/checkout 。 |
github.action_status | string | 对于复合操作,这是复合操作的当前结果。 |
github.actor | string | 触发初始工作流运行的用户的用户名。 如果工作流运行是重新运行,则此值可能与 github.triggering_actor 不同。 即使启动重新运行的参与者 (github.triggering_actor ) 具有不同的权限,任何工作流重新运行都将使用 github.actor 的权限。 |
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
上下文运行作业。
name: Run CI
on: [push, pull_request]
jobs:
normal_ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run normal CI
run: ./run-tests
pull_request_ci:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
steps:
- uses: actions/checkout@v3
- name: Run PR CI
run: ./run-additional-pr-ci
env
上下文
env
上下文包含已在工作流、作业或步骤中设置的变量。 有关在工作流中设置变量的详细信息,请参阅“GitHub Actions 的工作流语法”
env
上下文语法支持在工作流文件中使用变量的值。 可以在非 id
和 uses
键的步骤中,在任何键的值中使用 env
上下文。 有关步骤语法的详细信息,请参阅“GitHub Actions 的工作流语法”。
如果想要在运行器中使用变量的值,请使用运行器操作系统的正常方法来读取环境变量。
属性名称 | 类型 | 说明 |
---|---|---|
env | object | 此上下文针对作业中的每个步骤而改变。 您可以从作业中的任何步骤访问此上下文。 此对象包含下面列出的属性。 |
env.<env_name> | string | 特定环境变量的值。 |
env
上下文的示例内容
env
上下文的内容是变量名称与其值的映射。 上下文的内容可能会根据工作流运行中的使用位置而更改。
{
"first_name": "Mona",
"super_duper_var": "totally_awesome"
}
env
上下文的示例用法
此示例工作流演示如何在工作流、作业和步骤级别配置 env
上下文,以及如何在步骤中使用上下文。
当多个环境变量使用相同的名称定义时,GitHub 会使用最特定的变量。 例如,步骤中定义的环境变量在步骤执行时将覆盖名称相同的作业和工作流环境变量。 为作业定义的环境变量在作业执行时将覆盖名称相同的工作流变量。
name: Hi Mascot
on: push
env:
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
env:
mascot: Octocat
linux_job:
runs-on: ubuntu-latest
env:
mascot: Tux
steps:
- run: echo 'Hi ${{ env.mascot }}' # Hi Tux
job
上下文
job
上下文包含当前正在运行的作业相关信息。
属性名称 | 类型 | 说明 |
---|---|---|
job | object | 此上下文针对工作流程运行中的每项作业而改变。 您可以从作业中的任何步骤访问此上下文。 此对象包含下面列出的所有属性。 |
job.container | object | 作业的容器相关信息。 有关容器的详细信息,请参阅“GitHub Actions 的工作流语法”。 |
job.container.id | string | 容器的 ID。 |
job.container.network | string | 容器网络的 ID。 运行程序创建作业中所有容器使用的网络。 |
job.services | object | 为作业创建的服务容器。 有关服务容器的详细信息,请参阅“GitHub Actions 的工作流语法”。 |
job.services.<service_id>.id | string | 服务容器的 ID。 |
job.services.<service_id>.network | string | 服务容器网络的 ID。 运行程序创建作业中所有容器使用的网络。 |
job.services.<service_id>.ports | object | 服务容器显露的端口。 |
job.status | string | 作业的当前状态。 可能的值为 success 、failure 或 cancelled 。 |
job
上下文的示例内容
此示例 job
上下文使用具有映射端口的 PostgreSQL 服务容器。 如果作业中没有容器或服务容器,则 job
上下文仅包含 status
属性。
{
"status": "success",
"container": {
"network": "github_network_53269bd575974817b43f4733536b200c"
},
"services": {
"postgres": {
"id": "60972d9aa486605e66b0dad4abb638dc3d9116f566579e418166eedb8abb9105",
"ports": {
"5432": "49153"
},
"network": "github_network_53269bd575974817b43f4733536b200c"
}
}
}
job
上下文的示例用法
此示例工作流程配置 PostgreSQL 服务容器,并自动将服务容器中的端口 5432 映射到主机上随机选择的可用端口。 job
上下文用于访问在主机上分配的端口号。
name: PostgreSQL Service Example
on: push
jobs:
postgres-job:
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: postgres
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
ports:
# Maps TCP port 5432 in the service container to a randomly chosen available port on the host.
- 5432
steps:
- uses: actions/checkout@v3
- run: pg_isready -h localhost -p ${{ job.services.postgres.ports[5432] }}
- run: ./run-tests
jobs
上下文
jobs
上下文仅在可重用工作流中可用,并且只能用于设置可重用工作流的输出。 有关详细信息,请参阅“重新使用工作流”。
属性名称 | 类型 | 说明 |
---|---|---|
jobs | object | 这仅在可重用工作流中使用,并且只能用于设置可重用工作流的输出。 此对象包含下面列出的所有属性。 |
jobs.<job_id>.result | string | 可重用工作流中作业的结果。 可能的值为 success 、failure 、cancelled 或 skipped 。 |
jobs.<job_id>.outputs | object | 可重用工作流中作业的输出集。 |
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:
# Map the workflow outputs to job outputs
outputs:
firstword:
description: "The first output string"
value: ${{ jobs.example_job.outputs.output1 }}
secondword:
description: "The second output string"
value: ${{ jobs.example_job.outputs.output2 }}
jobs:
example_job:
name: Generate output
runs-on: ubuntu-latest
# Map the job outputs to step outputs
outputs:
output1: ${{ steps.step1.outputs.firstword }}
output2: ${{ steps.step2.outputs.secondword }}
steps:
- id: step1
run: echo "::set-output name=firstword::hello"
- id: step2
run: echo "::set-output name=secondword::world"
steps
上下文
steps
上下文包含有关当前作业中已指定 id
且已运行的步骤的信息。
属性名称 | 类型 | 说明 |
---|---|---|
steps | object | 此上下文针对作业中的每个步骤而改变。 您可以从作业中的任何步骤访问此上下文。 此对象包含下面列出的所有属性。 |
steps.<step_id>.outputs | object | 为步骤定义的输出集。 有关详细信息,请参阅“GitHub Actions 的元数据语法”。 |
steps.<step_id>.conclusion | string | 应用 continue-on-error 后完成的步骤的结果。 可能的值为 success 、failure 、cancelled 或 skipped 。 当 continue-on-error 步骤失败时,outcome 是 failure ,但最终 conclusion 是 success 。 |
steps.<step_id>.outcome | string | 应用 continue-on-error 前完成的步骤的结果。 可能的值为 success 、failure 、cancelled 或 skipped 。 当 continue-on-error 步骤失败时,outcome 是 failure ,但最终 conclusion 是 success 。 |
steps.<step_id>.outputs.<output_name> | string | 特定输出的值。 |
steps
上下文的示例内容
此示例 steps
上下文显示已指定 id
的前两个步骤。 第一步的 id
名为 checkout
,第二步是 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
jobs:
randomly-failing-job:
runs-on: ubuntu-latest
steps:
- id: checkout
uses: actions/checkout@v3
- name: Generate 0 or 1
id: generate_number
run: echo "::set-output name=random_number::$(($RANDOM % 2))"
- name: Pass or fail
run: |
if [[ ${{ steps.generate_number.outputs.random_number }} == 0 ]]; then exit 0; else exit 1; fi
runner
上下文
runner
上下文包含正在执行当前作业的运行器相关信息。
属性名称 | 类型 | 说明 |
---|---|---|
runner | object | 此上下文针对工作流程运行中的每项作业而改变。 此对象包含下面列出的所有属性。 |
runner.name | string | 执行作业的运行器的名称。 |
runner.os | string | 执行作业的运行器的操作系统。 可能的值为 Linux 、Windows 或 macOS 。 |
runner.arch | string | 执行作业的运行器的体系结构。 可能的值为 X86 、X64 、ARM 或 ARM64 。 |
runner.temp | string | 运行器临时目录的路径。 此目录在每个作业的开始和结束时都是空的。 注意,如果运行者的用户帐户没有权限删除这些文件,则不会被删除。 |
runner.tool_cache | string | 包含 GitHub 托管运行器预安装工具的目录路径。 有关详细信息,请参阅“关于 GitHub 托管的运行程序”。 |
runner.debug | string | 仅当启用调试日志记录并且始终具有值 1 时,才会进行此设置。 它可以用作指示器,以便在自己的作业步骤中启用更多调试或详细日志记录。 |
runner
上下文的示例内容
以下示例上下文来自 Linux GitHub 托管的运行器。
{
"os": "Linux",
"arch": "X64",
"name": "GitHub Actions 2",
"tool_cache": "/opt/hostedtoolcache",
"temp": "/home/runner/work/_temp"
}
runner
上下文的示例用法
此示例工作流使用 runner
上下文来设置临时目录的路径以写入日志,如果工作流失败,它将这些日志上传为项目。
name: Build
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build with logs
run: |
mkdir ${{ runner.temp }}/build_logs
./build.sh --log-path ${{ runner.temp }}/build_logs
- name: Upload logs on fail
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: Build failure logs
path: ${{ runner.temp }}/build_logs
secrets
上下文
secrets
上下文包含可用于工作流运行的机密的名称和值。 出于安全原因,上下文 secrets
不适用于复合操作。 如果要将机密传递给复合操作,则需要将其作为输入显式传递。 有关机密的详细信息,请参阅“加密机密”。
GITHUB_TOKEN
是为每个工作流运行自动创建的机密,始终包含在 secrets
上下文中。 有关详细信息,请参阅“自动令牌身份验证”。
警告:GitHub 自动将密码编写到日志,但应避免有意将密码打印到日志。
属性名称 | 类型 | 说明 |
---|---|---|
secrets | object | 对于工作流程运行中的每个作业,此上下文都是相同的。 您可以从作业中的任何步骤访问此上下文。 此对象包含下面列出的所有属性。 |
secrets.GITHUB_TOKEN | string | 为每个工作流程运行自动创建的令牌。 有关详细信息,请参阅“自动令牌身份验证”。 |
secrets.<secret_name> | string | 特定机密的值。 |
secrets
上下文的示例内容
secrets
上下文的以下示例内容显示自动 GITHUB_TOKEN
,以及可用于工作流运行的两个其他机密。
{
"github_token": "***",
"NPM_TOKEN": "***",
"SUPERSECRET": "***"
}
secrets
上下文的示例用法
此示例工作流程使用 labeler 操作,该操作需要 GITHUB_TOKEN
作为 repo-token
输入参数的值:
name: Pull request labeler
on: [ pull_request_target ]
jobs:
triage:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/labeler@v4
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
strategy
上下文
对于具有矩阵的工作流,strategy
上下文包含有关当前作业的矩阵执行策略的信息。
属性名称 | 类型 | 说明 |
---|---|---|
strategy | object | 此上下文针对工作流程运行中的每项作业而改变。 您可以从工作流程中的任何作业或步骤访问此上下文。 此对象包含下面列出的所有属性。 |
strategy.fail-fast | boolean | 如果为 true ,当矩阵中的任何作业失败时,则取消所有正在进行的作业。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。 |
strategy.job-index | number | 矩阵中当前作业的索引。 注意:此数字是从零开始的数字。 矩阵中的第一个作业索引为 0 。 |
strategy.job-total | number | 矩阵中的作业总数。 注意:此数字不是从零开始的数字。 例如,对于具有四个作业的矩阵,job-total 的值为 4 。 |
strategy.max-parallel | number | 使用 matrix 作业策略时可以同时运行的最大作业数。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。 |
strategy
上下文的示例内容
strategy
上下文的以下示例内容来自具有四个作业的矩阵,取自最终作业。 请注意从零开始的 job-index
数字与 job-total
(不从零开始)之间的差异。
{
"fail-fast": true,
"job-index": 3,
"job-total": 4,
"max-parallel": 4
}
strategy
上下文的示例用法
此示例工作流使用 strategy.job-index
属性为矩阵中的每个作业设置日志文件的唯一名称。
name: Test matrix
on: push
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
test-group: [1, 2]
node: [14, 16]
steps:
- uses: actions/checkout@v3
- run: npm test > test-job-${{ strategy.job-index }}.txt
- name: Upload logs
uses: actions/upload-artifact@v3
with:
name: Build log for job ${{ strategy.job-index }}
path: test-job-${{ strategy.job-index }}.txt
matrix
上下文
对于具有矩阵的工作流,matrix
上下文包含工作流程文件中定义的适用于当前作业的矩阵属性。 例如,如果使用 os
和 node
键配置矩阵,则 matrix
上下文对象包含 os
和 node
属性,该属性具有用于当前作业的值。
matrix
上下文中没有标准属性,只有工作流文件中定义的属性。
属性名称 | 类型 | 说明 |
---|---|---|
matrix | object | 此上下文仅适用于矩阵中的作业,并且对于工作流运行中的每个作业都会发生更改。 您可以从工作流程中的任何作业或步骤访问此上下文。 此对象包含下面列出的属性。 |
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
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node: [14, 16]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
needs
上下文
needs
上下文包含定义为当前作业直接依赖项的所有作业的输出。 请注意,这不包括隐式依赖作业(例如依赖作业的依赖作业)。 有关如何定义作业依赖项的详细信息,请参阅“GitHub Actions 的工作流语法”。
属性名称 | 类型 | 说明 |
---|---|---|
needs | object | 仅为具有相关作业的工作流程运行填充此上下文,并为工作流程运行中的每个作业填充此上下文。 您可以从工作流程中的任何作业或步骤访问此上下文。 此对象包含下面列出的所有属性。 |
needs.<job_id> | object | 当前作业依赖的单个作业。 |
needs.<job_id>.outputs | object | 当前作业依赖的作业的输出集。 |
needs.<job_id>.outputs.<output name> | string | 当前作业依赖的作业的特定输出值。 |
needs.<job_id>.result | string | 当前作业依赖的作业的结果。 可能的值为 success 、failure 、cancelled 或 skipped 。 |
needs
上下文的示例内容
needs
上下文的以下示例内容显示了当前作业所依赖的两个作业的信息。
{
"build": {
"result": "success",
"outputs": {
"build_id": "ABC123"
}
},
"deploy": {
"result": "failure",
"outputs": {}
}
}
needs
上下文的示例用法
此示例工作流有三个作业:一个 build
作业(执行生成),一个 deploy
作业(需要 build
作业)以及一个 debug
作业(需要 build
和 deploy
作业且仅当工作流中有故障时运行)。 deploy
作业还使用 needs
上下文来访问 build
作业中的输出。
name: Build and deploy
on: push
jobs:
build:
runs-on: ubuntu-latest
outputs:
build_id: ${{ steps.build_step.outputs.build_id }}
steps:
- uses: actions/checkout@v3
- name: Build
id: build_step
run: |
./build
echo "::set-output name=build_id::$BUILD_ID"
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: ./deploy --build ${{ needs.build.outputs.build_id }}
debug:
needs: [build, deploy]
runs-on: ubuntu-latest
if: ${{ failure() }}
steps:
- uses: actions/checkout@v3
- run: ./debug
inputs
上下文
inputs
上下文包含传递给操作可重用工作流或手动触发的工作流的输入属性。 对于可重用工作流,输入名称和类型是在可重用工作流的 workflow_call
事件配置 中定义的,输入值从调用可重用工作流的外部工作流中的 jobs.<job_id>.with
传递。 对于手动触发的工作流,输入是在工作流的 workflow_dispatch
事件配置中定义的。
inputs
上下文中的属性在工作流文件中定义。 它们仅在可重用工作流或 workflow_dispatch
事件触发的工作流中可用
属性名称 | 类型 | 说明 |
---|---|---|
inputs | object | 此上下文仅在可重用工作流或 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: deploy --build ${{ inputs.build_id }} --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: deploy --build ${{ inputs.build_id }} --target ${{ inputs.deploy_target }}