问题的背景
我们正在使用jenkins构建许多依赖于某些项目的项目。 正如大多数人所知,如果构建稳定,jenkins允许您触发另一个作业(稳定性是我们想要的选项)。并且jenkins中还有另一个工具允许您“阻止构建,如果某些作业正在运行”。还有一个选项为“PrerequisitiesCheck”。
假设存在项目A触发项目B和B正在触发项目C.为简单起见,我将此配置称为A-> B-> C.假设存在另一条路径,例如A-> X-> C.第一个问题,如果A和B成功构建,即使在同一时刻建立Y,也会触发C.解决方案是使用“块构建,如果某些作业正在运行”选项。第二个问题是,当A触发B和X时,如果B失败,那么X正在触发C和C失败,因为B已经失败。这是我们不想要的。解决方案(不是确切的解决方案)是使用“PrerequisitiesCheck”选项。至少在该选项下,负责项目C的人员可以理解由于项目C而未发生的问题。此外,我们必须使用触发选项来链接这些A-> B-> C和A- > X-> C互相投射。
问题
问题是如此简单,我们不想使用这三个选项(Trigger,PrerequisitiesCheck,Block build如果某些作业正在运行)因为它太多工作而且很可能这个复杂的结构会导致很多问题(即忘记链接是简单的一个)。是否有任何工具可以同时执行其中三个工具?你知道任何能让我们解决这个问题的插件只能链接一个吗?
答案 0 :(得分:3)
Multijob插件将是您感兴趣的。 这就是文档所说的内容。
安装此插件后,您将能够执行以下操作:
When creating new Jenkins job you have an option to create MultiJob project.
This job can define in the Build section phases that contains one job or more.
All jobs belong to one phase will be executed in parallel (if there are enough executors on the node)
All jobs in phase 2 will be executed only after jobs in phase 1 are completed etc.
由于A同时触发B和X,我将使它们并行运行(使它们成为相同相位的一部分)并仅在两者完成时触发C.
答案 1 :(得分:1)
也许Build Flow Plugin正是您所寻找的: Build Flow Plugin
在那里,您可以编写一个触发现有作业的小脚本,例如:
parallel (
// job 1, 2 and 3 will be scheduled in parallel.
{ build("job1") },
{ build("job2") },
{ build("job3") }
)
// job4 will be triggered after jobs 1, 2 and 3 complete
build("job4")