Jenkins Pipeline实现数组按每组2个分割为逗号分隔行用于并行执行
Jenkins Pipeline 数组分组并行实现方案
直接用Groovy原生的collate()方法就能快速实现按每组2个元素分割数组,再转成逗号连接的字符串,最终构建并行执行的阶段:
1. 核心分组与格式转换
假设你的projectDirectories数组示例如下:
def projectDirectories = ["order-service", "user-service", "pay-service", "cart-service", "log-service"]
用以下代码完成分组和格式转换:
// 按每组2个元素分割数组,最后一组不足2个也保留 def groupedDirs = projectDirectories.collate(2) // 将每组元素用逗号连接成单行字符串 def taskGroups = groupedDirs.collect { group -> group.join(',') }
执行后taskGroups的结果为:
["order-service,user-service", "pay-service,cart-service", "log-service"]
2. 构建并行执行阶段
把转换后的字符串数组转成Jenkins Pipeline支持的并行任务Map,即可实现多阶段并行执行:
def parallelStages = [:] taskGroups.eachWithIndex { taskStr, idx -> parallelStages["Stage_${idx+1}"] = { stage("Process: ${taskStr}") { // 拆分字符串回到目录数组,执行具体任务 def dirs = taskStr.split(',') dirs.each { dir -> echo "Running job for ${dir}" // 这里替换成你的实际操作,比如: // sh "./build.sh ${dir}" } } } } // 启动并行执行 parallel parallelStages
3. 替代自定义partition函数的原因
Groovy的collate()方法是原生实现的数组分组工具,比自定义partition函数更稳定,支持自动处理数组长度不能被分组数整除的情况(比如示例中最后一组只有1个元素),无需额外编写边界处理逻辑。
内容的提问来源于stack exchange,提问作者Hare Krshn
相关产品推荐
相关产品推荐

