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

如何将节点作为代理运行stage内脚本并在stage中添加agent标签

实现方法

你可以根据实际需求选择以下两种方案:

1. 为整个Stage指定运行代理标签(声明式Pipeline标准写法)

直接在Stage定义块内部添加agent标签,标记该Stage的默认运行节点,你的原有并行逻辑可以保留在steps中:

pipeline {
    agent none // 全局不指定代理,由各Stage单独配置
    stages {
        stage('多节点并行执行Python脚本') {
            // 在Stage内部添加agent标签,填写你需要的节点标签即可
            agent { label '你的目标节点标签' }
            steps {
                script {
                    last_started = env.STAGE_NAME
                    try{
                        def branches = [:]
                        def names = FAW_HOSTS.split(',')
                        for (int i=0; i<names.size(); ++i) {
                            def nodeName = names[i]
                            branches[nodeName] = {
                                node(nodeName) {
                                    echo "Running patch oci vmscript.."
                                    def exec = sh(script:"python $source_code_loc/patch_oci_vm.py $WORK_DIR", returnStdout:true).trim()
                                    echo "$exec"
                                }
                            }
                        }
                        parallel branches
                    }
                    catch (Exception e) {
                        currentBuild.result='FAILURE'
                        echo "当前构建状态为 ${currentBuild.result}"
                        echo "执行失败:${e}"
                        error "Run_task_on_multiple_host 阶段执行失败!"
                    }
                }
            }
        }
    }
}

提示:Stage层的agent标签只会指定该Stage初始运行的代理节点,你代码中用来分发并行任务的node(nodeName)块不受影响,依然会正常调度到对应目标节点执行Python脚本。

2. 并行任务直接按标签匹配节点

如果你的并行任务不需要绑定固定节点名,只要匹配对应标签的节点即可运行,可以直接把标签作为参数传入node方法,无需提前拆分节点名称列表:

// 示例:按标签调度并行任务
def branches = [:]
// 填写你需要匹配的节点标签列表
def targetNodeLabels = ['oci-vm-worker', 'python-runtime']
targetNodeLabels.each { label ->
    branches["标签${label}节点执行任务"] = {
        // 直接传入标签,Jenkins会自动调度到符合标签条件的空闲节点
        node(label) {
            echo "Running patch oci vmscript.."
            def exec = sh(script:"python $source_code_loc/patch_oci_vm.py $WORK_DIR", returnStdout:true).trim()
            echo "$exec"
        }
    }
}
parallel branches

关键说明

  • 声明式Pipeline的agent { label 'xxx' }写法仅作用于当前Stage的默认运行环境,是官方推荐的Stage级代理标记方式
  • 脚本式的node('xxx')方法传入的参数同时支持节点名和节点标签,只要节点配置了对应标签就可以正常调度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:48:00