You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline实现部分并行任务完成后触发后续任务

Jenkins Pipeline实现"任意并行任务完成即触发后续任务"的方案

Jenkins Pipeline完全支持你的需求,核心是通过线程安全的原子变量配合并行执行逻辑,确保3台服务器中任意一台完成任务后,立即触发另外4台服务器的任务,且仅触发一次。

实现思路

  1. 用parallel块启动3台服务器的并行任务;
  2. 定义一个原子布尔变量,标记后续任务是否已触发,避免重复执行;
  3. 每台服务器的任务完成后,通过原子操作检查标记:若未触发,则启动4台服务器的并行任务,并将标记设为已触发;若已触发,则直接跳过。

完整代码示例

pipeline {
    agent any
    stages {
        stage('并行执行3台服务器任务') {
            steps {
                script {
                    // 线程安全的原子变量,控制后续任务触发逻辑
                    def isFollowUpTriggered = new java.util.concurrent.atomic.AtomicBoolean(false)
                    
                    // 启动3台服务器的并行任务
                    parallel(
                        "Server-1": {
                            // 替换为Server-1的实际任务,比如SSH执行命令、部署操作等
                            sh 'echo "Server-1 任务执行中..." && sleep 10'
                            println "Server-1 任务完成"
                            triggerFollowUpTasks(isFollowUpTriggered)
                        },
                        "Server-2": {
                            sh 'echo "Server-2 任务执行中..." && sleep 5'
                            println "Server-2 任务完成"
                            triggerFollowUpTasks(isFollowUpTriggered)
                        },
                        "Server-3": {
                            sh 'echo "Server-3 任务执行中..." && sleep 15'
                            println "Server-3 任务完成"
                            triggerFollowUpTasks(isFollowUpTriggered)
                        }
                    )
                }
            }
        }
    }
}

// 封装后续任务触发逻辑
def triggerFollowUpTasks(def triggerFlag) {
    // 原子操作:仅当标记为false时,才执行后续任务并将标记设为true
    if (triggerFlag.compareAndSet(false, true)) {
        println "触发4台服务器的后续任务"
        parallel(
            "FollowUp-Server-A": {
                // 替换为后续服务器A的实际任务
                sh 'echo "后续Server-A 任务执行中..."'
            },
            "FollowUp-Server-B": {
                sh 'echo "后续Server-B 任务执行中..."'
            },
            "FollowUp-Server-C": {
                sh 'echo "后续Server-C 任务执行中..."'
            },
            "FollowUp-Server-D": {
                sh 'echo "后续Server-D 任务执行中..."'
            }
        )
    } else {
        println "后续任务已触发,无需重复执行"
    }
}

关键说明

  • 原子变量的作用:AtomicBoolean的compareAndSet方法是线程安全的,能确保只有第一个完成的任务可以触发后续流程,避免多台服务器同时触发导致重复执行;
  • 并行逻辑独立性:后续任务启动后,原来3台服务器中未完成的任务会继续执行,不会被中断;
  • 自定义适配:你可以将示例中的sh命令替换为实际的服务器操作(如通过sshagent插件执行远程命令、调用部署脚本等),也可以为不同服务器指定专属的agent节点。

内容的提问来源于stack exchange,提问作者Emilia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:05:16