jenkins上下游持续构建

2,282 阅读4分钟

上下游与持续集成构建

SpringBoot项目之间的引用触发上下游构建

上下游关系可以通过正向配置或反向配置来实现,建议统一使用一种。

上下游:当一个项目A依赖另一个项目B,则称项目B为上游,而项目A为下游。

正反向配置:上游主动去建立和下游的关系,称为正向配置,下游项目主动去和上游建立关系,则为反向配置。

正向配置:在被依赖任务B中找到构建后操作模块增加构建后操作步骤,选择构建其他工程,在该路径填写下游A任务名称,则B构建成功后会主动触A任务进行构建

正向配置

添加项目

反向配置:在下游B项目中找到构建触发器模块,勾选其他工程构建后触发并填写上游A项目名称。

反向配置

不管正向配置还是反向配置,作用都是一样的,都是建立上下游关系,上游构建成功后触发下游构建,所以建议只使用一种配置,没必要双向关系.

配置好上下游权限后,建议每一个下游任务的配置中增加限制,打开任务进入General模块,点击高级,勾选该项目上游正在构建时阻止该项目构建选项.

防止构建冲突配置

设想一下,如果存在项目关系如下:

  • A项目作为B项目的上游

  • A项目作为C项目的上游

  • B项目作为C项目的上游

那么在A项目构建成功后,逻辑来讲它是会触发两个下游之间的构建,也就是B项目和C项目同时构建,等B项目构建完会再次触发一次C项目的构建。而通过勾选上游构建时阻止构建下游,就能避免这个问题。

最理想的构建顺序是 A-B-C ,那么在A任务的正向配置中,则不需要配置下游项目C,只需要配置下游项目B,反向配置也一样。

其次,在任务模块构建触发器中,建议关闭Build whenever a SNAPSHOT dependency is built,因为该配置会根据pom文件的快照项目依赖自动创建上下游关系,导致和正反向配置重复并可能 出现多次打包的情况。

jenkins持续集成构建

任务关系依赖可能出现这种情况,A、B项目都作为C项目的上游,而A、B又是单独互不影响的项目,这时候它们是可以进行并发构建的,可是这样就会触发C项目的2次构建,这明显是不合理的,那么怎么做到 A、B项目同时构建,然后再触发下游C项目的构建呢?

首先安装一个并行的插件 Multijob,它支持将任务捆绑构建。我们需要先解除A、B项目和C项目的上下游关系,也就是取消正反向配置,并且取消A、B任务中General模块的该项目上游正在构建 时阻止该项目构建配置,切记必须取消,否则无法进行构建.

新建任务,选择 Multijob Project,创建一个任务D。

Multijob

找到构建模块,点击增加构建步骤并选择Multijob Phase,并依次添加A、B任务名称

Multijob-detail

Multijob-detail

这个时候可以点击每个任务右下角的高级进行详细配置

high-detail

high-detail

构建方式可以选择 串行或者并行,串行的话则按照添加任务的顺序进行构建,并行则同时构建。

构建条件可以选择 构建成功触发、构建失败触发、无论结果如何都触发等操作,按需求配置。

配置完成后关联C项目和D项目之间的上下游关系,并配置该项目上游正在构建时阻止该项目构建即可,就能满足触发D项目时, 触发A、B项目同时构建,然后再触发下游C项目的构建的操作。

这个时候如果项目是并行的,必须设置jenkins的最大并行执行器的数量,系统管理->系统设置->填写执行器数量

其他问题

比如对于定时扫描进行触发的,对外面的大任务设置后,里面的任务不需要再设置定时即可。