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

Jenkins声明式流水线能否基于Git分支设置Agent?

Jenkins声明式流水线:基于Git分支动态设置Agent

别担心,Jenkins声明式流水线完全支持基于Git分支来指定Agent!你觉得when块行不通是因为它主要用来控制阶段(stage)的执行逻辑,而Agent的动态配置其实可以通过表达式直接实现,不用依赖when块。

下面给你两种实用的实现方式:

方式一:直接在agent块中嵌入分支判断逻辑

利用Jenkins自动注入的env.BRANCH_NAME环境变量(只要是Git触发的流水线都会自动填充当前分支名),你可以在agent的节点配置里直接写条件表达式,动态选择对应标签的节点:

pipeline {
    agent {
        node {
            // 主分支用生产环境Agent,其他分支用开发环境Agent
            label "${env.BRANCH_NAME == 'main' ? 'production-node' : 'development-node'}"
        }
    }
    stages {
        stage('Build & Test') {
            steps {
                echo "当前分支:${env.BRANCH_NAME},运行在Agent节点:${env.NODE_NAME}"
            }
        }
    }
}

方式二:先定义环境变量再引用(适合复杂分支规则)

如果你的分支规则比较多(比如release前缀分支、hotfix分支等),可以先在environment块里提前计算好要使用的Agent标签,再在agent块中引用,这样代码可读性更高:

pipeline {
    environment {
        // 多分支场景下的Agent标签判断
        AGENT_LABEL = """
            ${env.BRANCH_NAME == 'main' ? 'prod-agent' : 
              env.BRANCH_NAME ==~ 'release/.*' ? 'staging-agent' : 
              env.BRANCH_NAME ==~ 'hotfix/.*' ? 'hotfix-agent' : 
              'default-dev-agent'}
        """.trim()
    }
    agent {
        label "${AGENT_LABEL}"
    }
    stages {
        stage('Deploy') {
            steps {
                echo "为分支${env.BRANCH_NAME}分配的Agent标签:${AGENT_LABEL}"
            }
        }
    }
}

小提醒

  • 确保你的Jenkins节点已经配置好对应的标签,不然流水线会因为找不到匹配的节点而停滞;
  • 如果是手动触发流水线,记得在触发时指定目标分支,否则env.BRANCH_NAME可能为空或者是默认分支名;
  • 除了标签,你也可以用类似的逻辑动态选择Docker镜像作为Agent,只要把label换成docker配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:43:05