TeamCity Platform 团队协作工具

构建链:TeamCity 的管道融合,第 2 部分 – 并行运行构建

上一篇博客文章中,我们了解了快照依赖项以及如何将其应用于 TeamCity 中的构建链。在此博客文章中,我们描述快照依赖项如何实现并行构建。

更多快照依赖

我们之前已经开始为 demo 应用程序创建构建链。我们创建了两个构建配置:一个构建应用程序,另一个构建 Docker 映像。那测试呢?

假设有很多测试,并且依顺序运行这些测试会花费很多时间。并行执行测试组会更好。我们可以创建两个构建配置, Test1  Test2 ,它们将执行不同的测试组。Test1  Test2 都具有对 TodoImage 构建配置的快照依赖项。

由于 Test1  Test2 彼此不依赖,因此,如果有可用的构建代理,TeamCity 可以并行执行这些构建配置。

现在揭示了快照依赖项的新方面。使用快照依赖项,我们创建了一个构建链,该构建链实际上是 DAG – 有向无环图(Directed Acyclic Graph)。如果有足够的处理资源(即构建代理),则可以并行处理图的独立分支。

这就引出了下一个问题:我们如何触发这样的构建链?我们之前将触发器添加到 TodoImage 中,因为它是链中的最后一个构建配置。现在有两种构建配置。我们是否应该添加两个触发器 – 一个添加到 Test1 ,另一个添加到 Test2 ?虽然可以选择,但是还有一种更惯用的方法 – 使用 Composite 类型的构建配置。

合成构建配置

合成构建配置的目的是汇总由快照依赖项组合的其他多个构建结果,并将它们放在一个位置。这种构建配置的一个非常有趣的特性是,它在执行期间不会占用构建代理。

在我们的示例中,我们可以通过快照依赖项创建依赖于 Test 1  Test2 的合成构建配置。新配置将是构建链中的最后一个配置。现在,可以将 VCS 触发器添加到该构建配置。结果是,整个构建链只有一个 VCS 触发器。

请注意,在上面的屏幕截图中,两个构建配置 Test1  Test2 并行运行。TestReport 构建配置也正在运行,但是它不占用构建代理,并且在所有构建完成后将被标记为已完成。

合成构建配置的一个不错的功能是,它还从依赖项中聚合测试结果。在我们的示例中,如果导航到 TestReport 构建配置的 “Tests” 选项卡,我们将观察在属于同一构建链的所有先前构建配置中执行的测试的列表。

小结

表面看,快照依赖看起来像一个简单的概念。但是,它启用了 TeamCity 的许多功能。在上一篇博客文章中,我们讨论了如何重用构建结果来节省构建时间和资源。在此博客文章中,我们了解到快照依赖项还可以在并行执行构建时更好地利用资源。接下来,我们将学习如何使用 TeamCity 构建链来协调部署过程。

如果您有兴趣在本地 TeamCity 实例上试用演示项目,我们已将配置上传到 GitHub 存储库.teamcity/ 目录包含我们在此博客文章中描述的构建链的 Kotlin DSL 设置。要导入这些设置,请从存储库 URL 创建一个项目。TeamCity 将在存储库中检测到 .teamcity/ 目录,并建议使用这些设置来创建项目。

原文发表于 2019 年 10 月 10 日,作者Anton Arhipov

image description

Discover more