需求

当我们为每个微服务配置了不同的job时,如果需要批量对所有job进行指定分支的更新,低效率的方法是逐个点进job,手动触发构建。当job数量大了以后,操作起来就比较费劲了。

此时可以通过总分结构,设置一个父job,一次构建完成所有微服务的批量构建。

实现

  1. 安装Multijob plugin

  2. 新建一个item,选择multijob project

  3. 一个multijob项目在逻辑上可以包含多个phase,每个phase又可以引用多个已有的job。phase之间是串行的,phase内的多个job之间可以选择串行/并行。

  4. 新建phase和job,用folder/projectName的形式引用其他job。

  5. 配置可同时运行的任务数量:系统设置-Maven项目配置-执行者数量,配置一个合适的数量

  6. 如果采用了kubernetes动态slave pod的方式,需求修改集群层面的slave pod的并发量限制:系统设置-cloud-选定kubernetes集群-容器数量。同时需要设置单个pod模板对应的slave pod并发量限制:系统设置-cloud-选定kubernetes集群-选定podTemplate-Concurrency Limit

传参

该方案的一个关键问题是,如果multijob的子job有参数需要通过父job传入,如何配置父job?

  1. 在multijob中勾选参数化构建,增加欲传入的参数
  2. 在multijob的phase job中增加predefined parameter,每行一个参数,使用p1=${parameterName}的方式,将父job的parameterName参数传给子job的p1参数

参考

Multijob | Jenkins plugin

文章目录