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

声明式Jenkins Pipeline:如何仅在满足条件时设置agent any?

问题:能否仅在满足条件时指定agent any?

解决方案

核心思路是避免提前固定全局agent,改用agent none作为全局配置,然后根据参数动态控制各阶段的agent分配,实现仅在同时运行Linux和Windows测试时,Windows阶段才启用新的agent,其他情况复用通用步骤的agent。

修改后的Pipeline代码:

pipeline {
    agent none  // 全局不预先分配agent
    parameters {
        booleanParam(name: 'RUN_WINDOWS')
        booleanParam(name: 'RUN_LINUX')
    }
    stages {
        stage('Common step') {
            agent any  // 通用步骤分配一个agent,后续可复用
            steps {
                script {
                    // 记录当前agent的节点名称,方便后续复用
                    env.COMMON_AGENT_NODE = env.NODE_NAME
                }
                // 执行你的通用步骤
                echo "通用步骤运行于节点: ${env.COMMON_AGENT_NODE}"
            }
        }
        stage("Test") {
            parallel {
                stage('Windows') {
                    when {
                        expression { return params.RUN_WINDOWS }
                    }
                    agent {
                        // 仅当同时运行Linux测试时,才分配新的agent;否则复用通用步骤的agent
                        node {
                            label params.RUN_LINUX ? '' : env.COMMON_AGENT_NODE
                            // label为空等价于agent any,会分配任意可用节点
                        }
                    }
                    stages {
                        stage('Test Windows') {
                            steps {
                                echo "Windows测试运行于节点: ${env.NODE_NAME}"
                                // 执行你的Windows测试步骤
                            }
                        }
                    }
                }
                stage('Linux') {
                    when {
                        expression { return params.RUN_LINUX }
                    }
                    agent {
                        node {
                            label env.COMMON_AGENT_NODE  // 复用通用步骤的agent
                        }
                    }
                    stages {
                        stage('Test Linux') {
                            steps {
                                echo "Linux测试运行于节点: ${env.NODE_NAME}"
                                // 执行你的Linux测试步骤
                            }
                        }
                    }
                }
            }
        }
    }
}

逻辑说明

  • 仅运行Linux:通用步骤分配1个agent,Linux阶段复用该agent,总agent数1,符合预期。
  • 仅运行Windows:通用步骤分配1个agent,Windows阶段复用该agent,不会出现主agent被阻塞的情况,总agent数1。
  • 同时运行两者:通用步骤分配1个agent给Linux测试,Windows阶段额外分配1个新agent,总agent数2,满足并行测试需求。

关键细节

  • 使用agent none全局配置,避免提前占用不必要的agent资源。
  • 通过env.COMMON_AGENT_NODE记录通用步骤的节点名称,实现后续阶段的agent复用。
  • Windows阶段的node标签通过条件判断动态切换:当RUN_LINUX为true时,标签为空(等价于agent any),分配新节点;否则复用通用步骤的节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:15:45