Jenkins:如何仅轮询匹配特定正则表达式的新Git分支?
如何配置Jenkins Git SCM仅轮询匹配特定正则的新分支
当然可以实现,下面是两种实用的配置方案,针对你需要检测release-v<version>格式新分支的场景:
方案1:通过Git插件基础配置实现
限定关注的分支
进入Jenkins项目的「配置」页面,找到「源代码管理」下的Git配置:- 在「分支说明」输入框中,填入正则表达式
*/release-v[0-9]+,这个规则会让Jenkins只追踪符合release-v加数字版本格式的分支(比如release-v1、release-v123)。如果版本号包含小数点,可调整为*/release-v\d+(\.\d+)*。
- 在「分支说明」输入框中,填入正则表达式
配置SCM轮询
切换到「构建触发器」区域,勾选「轮询SCM」,设置轮询时间表达式(比如H/15 * * * *代表每15分钟轮询一次,H是随机分钟数避免集中负载)。- 此时Jenkins会定期检查远程仓库中符合分支规则的分支,一旦有新分支创建或者已有符合规则的分支有代码变更,就会触发构建。如果只想仅响应新分支创建而非代码变更,需要结合方案2的脚本逻辑。
方案2:用Pipeline脚本精准检测新分支
如果需要更精准地只在新分支创建时触发操作,推荐用Jenkins Pipeline编写逻辑:
pipeline { agent any triggers { pollSCM('H/15 * * * *') // 每15分钟轮询一次 } stages { stage('检测新发布分支') { steps { script { // 获取远程仓库所有符合规则的分支 def remoteBranches = sh( script: 'git ls-remote --heads origin | grep -E "release-v[0-9]+" | cut -f2 | sed "s/refs\\/heads\\///"', returnStdout: true ).trim().split('\n') // 获取本地已追踪的符合规则的分支 def localBranches = sh( script: 'git branch -r | grep -E "origin/release-v[0-9]+" | sed "s/origin\\///"', returnStdout: true ).trim().split('\n') // 对比找出新增的分支 def newBranches = remoteBranches - localBranches if (newBranches.size() > 0) { echo "发现新发布分支:${newBranches.join(', ')}" // 在这里添加你需要执行的操作,比如调用部署任务、发送通知等 // 示例:build job: 'Release-Deployment', parameters: [[$class: 'StringParameterValue', name: 'BRANCH', value: newBranches[0]]] } else { echo "未发现新的发布分支" } } } } } }
注意事项
- 正则表达式可根据实际需求调整,比如支持带前缀的版本号、多段版本号等。
- 轮询时间需根据仓库规模和需求平衡,过于频繁会增加Jenkins和Git服务器的负载。
- 如果使用多分支流水线,可在「分支来源」的「过滤」选项中设置分支名称正则,自动为符合规则的新分支创建流水线任务。
内容的提问来源于stack exchange,提问作者Alphie
相关产品推荐
相关产品推荐

