跳至主要内容

使用条件控制作业执行

除非满足您的条件,否则防止作业运行。

概述

注意

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

您可以使用jobs.<job_id>.if条件来防止作业在不满足条件的情况下运行。您可以使用任何受支持的上下文和表达式来创建条件。有关此键中支持哪些上下文的更多信息,请参阅“访问有关工作流运行的上下文信息”。

注意

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

在跳过的作业中,您应该看到“此检查已跳过”。

注意

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