0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · 课时

条件执行与任务依赖

在 GitHub Actions 工作流中使用 if 条件、needs 关键字、表达式和状态检查函数,控制步骤和任务的运行时机

条件执行与任务依赖 是 CoddyKit 上的免费 CI/CD with GitHub Actions & DevOps Pipelines 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CI/CD with GitHub Actions & DevOps Pipelines 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CI/CD with GitHub Actions & DevOps Pipelines 课程共包含 4 节课。

为什么条件很重要

不是每个步骤都应在每次运行时执行。您可能希望部署步骤仅在 main 分支上运行,或者通知步骤仅在发生故障时运行。

GitHub Actions 允许您为任何步骤或作业附加if 条件,以控制其是否执行。

if 键

向步骤添加 if: 键。只有当表达式计算结果为 true 时,该步骤才会运行。

if 中的表达式不需要使用 ${{ }} 包装器,但使用它也可以。

steps:
  - name: Deploy
    if: github.ref == 'refs/heads/main'
    run: ./deploy.sh

上下文对象

条件会读取描述此次运行的上下文对象中的信息:

  • github — 事件、引用、执行者、提交 SHA
  • env — 环境变量
  • job 和 steps — 之前工作的状态
  • runner — OS 和架构

例如,github.event_name 会告诉您是推送还是拉取请求触发了此次运行。

状态检查函数

默认情况下,如果前一个步骤失败,就会跳过当前步骤。要覆盖此行为,请使用状态函数:

  • success() — 如果之前没有步骤失败,则为 true(默认值)
  • failure() — 如果之前有任何步骤失败,则为 true
  • always() — 无论发生什么都会运行
  • cancelled() — 如果此次运行已取消,则为 true
  - name: Notify on failure
    if: failure()
    run: echo 'Build failed, sending alert'

始终运行清理

一种常见模式是设置一个清理步骤,即使之前的步骤失败,该步骤也必须运行。请使用 if: always()。

这样可以确保无论结果如何,临时资源、容器或测试报告都会得到处理。

  - name: Upload logs
    if: always()
    uses: actions/upload-artifact@v4
    with:
      name: logs
      path: ./logs

使用 needs 的作业依赖

needs 关键字会让一个作业等待其他作业完成。没有它时,各作业会并行运行。

在 needs 中列出的作业必须成功完成,依赖它的作业才能开始。

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: npm test
  deploy:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - run: ./deploy.sh

多个依赖项

通过向 needs 传入列表,一个作业可以依赖多个作业。它会等待所有依赖项完成。

这就是构建扇入模式的方式:只有并行作业全部成功后,最终作业才会运行。

  release:
    needs: [lint, test, build]
    runs-on: ubuntu-latest
    steps:
      - run: echo 'all checks passed'

条件作业

if 键同样适用于作业,而不仅仅是步骤。作业级条件会决定整个作业是否运行。

这里的部署作业仅在向 main 推送时运行,同时仍然依赖测试。

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - run: ./deploy.sh

使用作业输出

作业可以通过 outputs 向下游传递数据。依赖作业可以通过 needs 上下文读取这些数据。

这样,条件就可以依赖之前计算出的值,例如版本是否发生了变化。

  check:
    runs-on: ubuntu-latest
    outputs:
      changed: ${{ steps.diff.outputs.changed }}
    steps:
      - id: diff
        run: echo 'changed=true' >> $GITHUB_OUTPUT

组合条件

您可以使用 &&(与)、||(或)和 !(非)组合表达式。

此示例仅在向 main 成功推送且不是来自派生仓库时运行。

    if: success() && github.ref == 'refs/heads/main' && github.event_name == 'push'

使用 needs 时始终执行 if

请注意:包含 needs 的作业会在某个依赖项失败时被跳过。若要让最终报告作业无论如何都运行,请将 needs 与 if: always() 结合使用。

在其中,您可以检查 needs.<job>.result,以决定要报告的内容。

  report:
    needs: [test, build]
    if: always()
    runs-on: ubuntu-latest
    steps:
      - run: echo ${{ needs.test.result }}

快速检查

请检验您对条件执行的理解。

回顾

您已经学会使用条件和依赖项控制工作流流程。

  • if 根据表达式控制步骤和作业
  • failure() 和 always() 等状态函数可以覆盖失败时跳过的行为
  • needs 可以创建执行顺序和扇入模式
  • 作业的 outputs 可以将值传入后续条件

借助这些基础机制,您可以构建精确而高效的流水线。

常见问题解答

「条件执行与任务依赖」课时是免费的吗?

是的 — 「条件执行与任务依赖」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CI/CD with GitHub Actions & DevOps Pipelines 课程的其余内容,请升级到 CoddyKit PRO。 CI/CD with GitHub Actions & DevOps Pipelines 课程共包含 4 节课。

「条件执行与任务依赖」这节课中我会学到什么?

在 GitHub Actions 工作流中使用 if 条件、needs 关键字、表达式和状态检查函数,控制步骤和任务的运行时机 你通过在浏览器中直接运行的动手代码来练习 CI/CD with GitHub Actions & DevOps Pipelines,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 CI/CD with GitHub Actions & DevOps Pipelines 需要有经验吗?

无需任何先前经验。CoddyKit 上的 CI/CD with GitHub Actions & DevOps Pipelines 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「条件执行与任务依赖」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 CI/CD with GitHub Actions & DevOps Pipelines 课中编写并运行代码吗?

能。每节 CI/CD with GitHub Actions & DevOps Pipelines 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 适用于多环境的矩阵构建
  2. 缓存依赖项以提升速度
  3. 可复用工作流与操作
  4. 条件执行与任务依赖
← 返回 CI/CD with GitHub Actions & DevOps Pipelines