我正在尝试建立一个复杂的构建管道,依赖关系图如下所示。
Prj-A
|
Prj-B
/ | \
Prj-C Prj-D Prj-E
| | |
| | |
| | |
--------------
|
Prj-F
管道从 Prj-A 开始,然后是 Prj-B。Prj-C DE 可以并行运行。当 Prj-C、D、E 都完成后,运行 Prj-F。
例如,其中一项要求是,由于 Prj-C 依赖于 Prj-A 和 Prj-B,如果仅更改 Prj-C 中的源代码,我只想运行 Prj-C 然后 Prj-G。这是为了避免构建其他作业以节省整个构建时间。
经过大量的谷歌搜索,我没有发现任何解决方案可用于此类情况。所以我想到的解决方案(我不尝试)是:
- 为每个项目创建一个触发器作业,仅检查该项目的源代码是否更改,因此我们将有 7 个触发器作业。
- 为管道创建依赖解析器作业。
- 当任何触发器作业检测到更改时,它会触发依赖关系解析器作业。依赖解析器作业会知道哪个项目被更改,并确定在此构建中可以跳过的项目,并设置相应的环境变量。例如,当更改 Prj-C 时,它设置 skip-proja=true,skip-projb=true,skip-projd=true,skip proj-e=true。之后,它会触发构建管道。
- 当每个项目运行时,它会根据依赖解析器作业设置的环境变量检查是否可以跳过。
希望我已经让自己理解了,请让我知道是否有针对此案例的其他解决方案或您对我的解决方案的评论。谢谢!