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

如何在含云动态节点的所有Jenkins节点上执行维护任务?

在动态云节点的Jenkins环境中批量执行维护任务

你已经通过以下代码获取目标节点名称:

def nodeNames(label) {
    def nodes = []
    jenkins.model.Jenkins.instance.computers.each { c ->
        if (c.node.labelString.contains(label) && c.online) { // 新增在线判断,跳过离线节点
            nodes.add(c.node.selfLabel.name)
        }
    }   
    return nodes
}

声明式流水线实现

声明式本身不支持动态循环,但可以通过script块结合parallel实现批量执行,示例如下:

pipeline {
    agent any
    stages {
        stage('在所有目标节点执行维护任务') {
            steps {
                script {
                    def targetLabel = 'your-target-label' // 替换成你的目标标签
                    def nodes = nodeNames(targetLabel)
                    def parallelTasks = [:]

                    nodes.each { nodeName ->
                        parallelTasks["维护节点: ${nodeName}"] = {
                            node(nodeName) {
                                echo "开始在节点 ${nodeName} 执行维护任务"
                                // 这里替换成你的维护任务代码,比如:
                                // sh 'sudo apt-get update && sudo apt-get upgrade -y'
                                echo "节点 ${nodeName} 维护任务完成"
                            }
                        }
                    }

                    parallel parallelTasks
                }
            }
        }
    }
    post {
        always {
            echo "所有节点维护任务执行结束"
        }
    }
}

脚本式流水线实现

脚本式逻辑更直接,支持串行或并行执行任务,示例如下:

def targetLabel = 'your-target-label'
def nodes = nodeNames(targetLabel)

// 串行执行(逐个节点处理)
nodes.each { nodeName ->
    node(nodeName) {
        stage("维护节点: ${nodeName}") {
            echo "开始在节点 ${nodeName} 执行维护任务"
            // 替换为你的维护任务命令
            // sh 'your-maintenance-command'
            echo "节点 ${nodeName} 维护任务完成"
        }
    }
}

// 或者并行执行(效率更高)
def parallelTasks = [:]
nodes.each { nodeName ->
    parallelTasks["维护节点: ${nodeName}"] = {
        node(nodeName) {
            stage("维护节点: ${nodeName}") {
                echo "开始在节点 ${nodeName} 执行维护任务"
                // 维护任务代码
                echo "节点 ${nodeName} 维护任务完成"
            }
        }
    }
}
parallel parallelTasks

注意事项

  • 权限问题:jenkins.model.Jenkins.instance需要流水线拥有脚本执行权限,需在Jenkins全局安全配置中通过In-process Script Approval插件批准相关脚本。
  • 离线节点处理:代码中新增c.online判断,自动跳过离线节点,避免任务失败。
  • 动态节点稳定性:云动态节点可能在执行过程中被销毁,建议在任务执行前确认节点状态,或配置节点在任务期间不被回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:23:17