我在 Jenkins 中设置条件构建作业时遇到了很多麻烦。这是我的设置:
我有一系列工作,例如:JobA <- JobB <- JobC <- JobC-tests,其中<-表示“为”生产工件。因此,JobA产生JobB 所依赖的工件,依此类推(从右到左阅读,这意味着“依赖于”)。
下游作业之一,假设JobC使用 2 个 SCM 存储库,我们称它们为 fooC 和 barC。JobC-tests有另一个文件集,称为 barC-tests。
JobC-tests需要很长时间。JobC非常快。我想避免运行JobC 测试,除非 barC 或 barC 测试已更改。
我想将我的构建设置为像这样工作:
- 如果 fooC 发生变化,则构建 JobC 但不构建 JobC-tests。
- 如果 barC 发生变化,则构建 JobC,然后在 JobC 完成时构建 JobC-tests。
- 如果 barC-tests 发生变化,请使用最后成功的 JobC 工件构建 JobC-tests。
- 如果 JobC 是手动启动的,请不要构建 JobC-tests。
- 如果 JobC-tests 是手动启动的,则不要构建 JobC。
- JobC 阻塞上游作业 (JobB)。
我尝试使用Conditional BuildStep 插件,但这对我来说似乎根本不起作用。我将 JobC 设置为从 SCM 触发中排除 barC,并将 JobC-tests 设置为轮询 barC,在 JobC-tests 中使用条件构建步骤仅在由 SCM 更改触发时构建 JobC。对 barC-tests 的更改不会触发任何构建,如果这完全可行的话,那会很好。我遇到的问题是 JobC 测试根本没有触发 JobC。
我还尝试创建一个“轮询”作业来轮询对 barC 的更改,然后在构建 JobC 时阻塞,然后构建 JobC 测试。但是,轮询作业变成了上游作业,并且由于 JobC 阻塞了上游作业,我遇到了死锁。
任何帮助或想法将不胜感激。