如何基于GitHub分支为Jenkins构建选择Solaris或Linux代理?
Jenkins声明式流水线分支代理切换方案
针对Java项目生产部署在Solaris、测试开发用Linux Jenkins代理的场景,以下是实现分支匹配时自动切换代理的声明式流水线方案:
方案一:分场景明确配置(推荐,便于扩展)
这种方式将不同分支的构建逻辑拆分到对应stage块,后续可针对不同分支单独调整构建步骤:
pipeline { agent none // 全局不预设代理,由各stage按需选择 stages { stage('Build (Solaris)') { // 匹配master或release_branch分支时触发 when { anyOf { branch comparator: 'EQUALS', pattern: 'master' branch comparator: 'EQUALS', pattern: 'release_branch' } beforeAgent true // 先判断分支再分配代理,避免浪费资源 } agent { label 'Solaris' } steps { sh 'mvn clean install' // 替换为实际构建命令 } } stage('Build (Linux)') { // 非master/release_branch分支时触发 when { not { anyOf { branch comparator: 'EQUALS', pattern: 'master' branch comparator: 'EQUALS', pattern: 'release_branch' } } beforeAgent true } agent { label 'Linux' } steps { sh 'mvn clean install' // 替换为实际构建命令 } } } }
方案二:动态标签选择(简洁,适合构建逻辑一致的场景)
通过Groovy三元表达式动态生成代理标签,无需拆分stage:
pipeline { agent none stages { stage('Build') { // 根据分支名称动态选择代理标签 agent { label "${env.BRANCH_NAME in ['master', 'release_branch'] ? 'Solaris' : 'Linux'}" } steps { sh 'mvn clean install' // 替换为实际构建命令 } } } }
关键配置说明
agent none:全局不指定代理,确保每个stage仅在满足条件时才分配对应代理资源。beforeAgent true:在分配代理前先执行分支判断,避免为不符合条件的分支分配错误代理。anyOf:用于同时匹配多个分支条件(master和release_branch)。env.BRANCH_NAME:Jenkins内置环境变量,当前构建的分支名称。
内容的提问来源于stack exchange,提问作者Jithu Paul
相关产品推荐
相关产品推荐

