为什么这个 Concourse 管道没有 运行 一直通过?
Why does this Concourse pipeline not run all the way through?
我们有一个包含 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
在这个简化的设置中,这并不是一件坏事,但我们的实际情况有十多个库和五个对库有各种依赖的应用程序。然后应将这些应用程序打包在一起。如果发行版除了应用程序之外还必须依赖所有库,以便针对所有更改进行构建,那么在 YAML 文件和管道的图形视图中的设置都会变得非常复杂。我们还想添加第四个阶段来对已完成的发行版进行 UI 测试,但这几乎无法管理所有必需的依赖项。
我是否可以设置从发行版到应用程序的某种依赖关系,以便每次构建应用程序时都构建发行版,而不依赖于库?
所以,我想我终于知道这里发生了什么。这实际上是很合乎逻辑的:
依赖触发器取决于资源,而不是构建的结论。因此,如果 build-app
作业是 运行,因为它依赖于 lib
资源,这不会更改 app
资源,而 build-distro
依赖于该资源(有 build-app
通过的限制)。
为了使这项工作正常进行,必须有从 build-app
到 put
的输出资源到下一阶段可以发现更改并触发的资源。我们没有这样做,因为我们的构建是使用 gradle 完成的,并且 build-scripts 已经具有将输出资源上传到我们的本地存储库的功能,可以在下一阶段轻松下载。
我们有一个包含 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
在这个简化的设置中,这并不是一件坏事,但我们的实际情况有十多个库和五个对库有各种依赖的应用程序。然后应将这些应用程序打包在一起。如果发行版除了应用程序之外还必须依赖所有库,以便针对所有更改进行构建,那么在 YAML 文件和管道的图形视图中的设置都会变得非常复杂。我们还想添加第四个阶段来对已完成的发行版进行 UI 测试,但这几乎无法管理所有必需的依赖项。
我是否可以设置从发行版到应用程序的某种依赖关系,以便每次构建应用程序时都构建发行版,而不依赖于库?
所以,我想我终于知道这里发生了什么。这实际上是很合乎逻辑的:
依赖触发器取决于资源,而不是构建的结论。因此,如果 build-app
作业是 运行,因为它依赖于 lib
资源,这不会更改 app
资源,而 build-distro
依赖于该资源(有 build-app
通过的限制)。
为了使这项工作正常进行,必须有从 build-app
到 put
的输出资源到下一阶段可以发现更改并触发的资源。我们没有这样做,因为我们的构建是使用 gradle 完成的,并且 build-scripts 已经具有将输出资源上传到我们的本地存储库的功能,可以在下一阶段轻松下载。