我们有一个包含3个阶段的管道:
如果我们提交lib,它应该构建,然后触发使用新lib构建的应用程序,最后,重新打包发行版。发行版的工作计划包括:
- name: build-distro
serial_groups: [grp]
plan:
- get: app
passed: [build-app]
trigger: true
- get: distro
trigger: true
所有作业都是同一个串行组的成员,但如果通过更改lib触发管道,则不会运行发行版阶段。只有对应用程序进行更改才能运行发行版步骤。
为了在对lib进行提交时构建发行版,必须将另一个资源依赖项添加到发行版的计划中:
- get: lib
passed: [build-lib]
trigger: true
在这个简化的设置中,这并不是一件坏事,但我们的实际情况有十多个库和五个应用程序,它们对libs有各种依赖关系。然后应将这些应用程序打包在一起。如果发行版必须依赖于除应用程序之外的所有库,为了针对所有更改进行构建,在YAML文件和管道的图形视图中,设置变得非常复杂。我们还想添加第四个阶段来对已完成的发行版进行UI测试,但这几乎无法管理所有必需的依赖项。
我是否可以设置从发行版到应用程序的某种依赖项,以便每次构建应用程序时都可以构建发行版,而不依赖于lib?
答案 0 :(得分:1)
所以,我想我终于知道这里发生了什么。这实际上很合乎逻辑:
依赖项触发器取决于资源,而不是构建的结论。因此,如果运行build-app
作业,因为它取决于lib
资源,这不会更改app
所依赖的build-distro
资源(具有限制) build-app
通过了。
为了使这项工作,必须有build-app
的{{1}}输出资源到下一阶段可以发现更改并触发的资源put
。我们没有这样做,因为我们的构建是使用gradle完成的,构建脚本已经具有将输出资源上传到我们的本地存储库的功能,可以在下一阶段轻松下载它。