Skip to main content

使用条件控制作业执行

除非满足条件,否则阻止作业运行。

Note

GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。

概述

Note

跳过的作业将报告其状态为“Success”。 即使是必需检查,也不会阻止拉取请求合并。

可以使用 jobs.<job_id>.if 条件来阻止步骤运行,除非满足条件。 您可以使用任何支持上下文和表达式来创建条件。 有关此键支持哪些上下文的详细信息,请参阅“访问有关工作流运行的上下文信息”。

Note

jobs.<job_id>.if 条件在应用 jobs.<job_id>.strategy.matrix 之前进行评估。

if 条件中使用表达式时,可以有选择地忽略 ${{ }} 表达式语法,因为 GitHub Actions 自动将 if 条件作为表达式求值。 但此例外并非适用于所有情况。

必须始终使用 ${{ }} 表达式语法,或者当表达式以!开头时,必须使用 ''""() 进行转义,因为 ! 是 YAML 格式的保留表示法。 例如:

if: ${{ ! startsWith(github.ref, 'refs/tags/') }}

有关详细信息,请参阅“对工作流和操作中的表达式求值”。

示例:仅针对特定存储库运行作业

此示例使用 if 控制 production-deploy 作业何时可以运行。 仅当存储库名为 octo-repo-prod 且位于 octo-org 组织内时,它才会运行。 否则,作业将被标记为“跳过”。

YAML
name: example-workflow
on: [push]
jobs:
  production-deploy:
    if: github.repository == 'octo-org/octo-repo-prod'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '14'
      - run: npm install -g bats

在跳过的作业上,你应该会看到“已跳过此检查”。

Note

在工作流的某些部分中,不能使用环境变量。 但是,可以使用上下文来访问环境变量的值。 有关详细信息,请参阅“在变量中存储信息”。