Github-Action-Day17:依赖性任务(Dependent Jobs)

这是 Github Action Advent Calendar 的第十七天的内容,如果您想要了解更多已经发布的 tips 信息,查看此处的 索引

如果您已经配置了一个包含多个任务(jobs) 的工作流 — 无论是 基于矩阵的工作流 还是您才刚刚单独定义的任务— 这些任务都是独立于其他任务而并行运行的。通常来说,这是理想的。您的任务会在机器能够执行它们的时候尽快运行。

但是,有些时候您可能希望可以配置依赖于其他任务的任务。例如,你可能有一些想要测试的服务。但是为了省钱,您只希望在您真正运行测试的时候再运行这些服务。所以,您可能需要一个启动您的服务的任务,一个运行测试的任务,还有一个停止服务的任务。

为了明确任务之间的依赖关系,您可以使用 needs 关键字来指示哪些任务依赖于其他任务的完成。

Translate Note:

考虑到我们自身仓库中可能没有如 setup_test_infrastructure.shbuild.shtest.shshutdown_test_infrastructure.sh 等可执行文件,这里我都注释了。
我们查看运行日志依然能看到它们运行的顺序:

image-20210829181731548

现在,这可能看起来不是一个非常好的例子 — 相对于使用分开的任务(jobs),我们或许可以直接使这三个 steps 在一个单独的任务中。但是,使用任务(jobs)允许我们 “成长”;我们实际可以在一个任务中配置我们测试的基础架构,然后并行运行多个任务(jobs),对其进行测试 ,最后再运行我们的清理任务

Fan out and fan in

Translate Note:

上面这一大片可能有点绕,总的来说意思就是:

由于矩阵扩展的存在,如果这个任务通过矩阵扩展为多个任务,可以直接依赖于一个任务的完成,h一个任务也可以依赖于多个任务的完成。多个任务可以并行运行。

具体看下面的例子应该就能理解了。

这允许我们在多个平台上并行地运行我们的测试任务(jobs) — 并通过 setup 和 teardown 任务来存档这些任务(jobs)。我们可以通过定义我们的 setup 任务,然后定义一些依赖这个 setup 任务的任务,最后定义一个依赖于这些任务的最终任务来实现这一点。这通常被称为 “fanning out” 和 “fanning in”。

有了这个工作流,我们的 setup 任务将会运行,之后我们将使用一个矩阵在Windows,macOS以及Linux上运行我们的构建和测试任务,最后我们将关闭我们启动的那些测试资源。

image-20210829184120277

通过指定彼此 need 的任务来明确您的工作流的依赖关系图,从而轻松地构建高级的工作流。