Jenkins多仓库指定分支推送触发对应构建任务的配置咨询
Jenkins多仓库指定分支触发构建配置方案
触发规则配置
以下提供两种可直接落地的方案,按需选择即可:
方案1:SCM轮询(适合内网无法配置WebHook的场景)
Pipeline原生支持多SCM变更监听,不需要额外安装多SCM插件,直接在Jenkinsfile中定义轮询规则和对应仓库分支即可,Jenkins只会比对你指定分支的提交变更,匹配到才会触发构建:
- 提前将两个仓库的访问凭证录入Jenkins凭证管理,假设凭证ID分别为
repo1-cred、repo2-cred - 对应job1的触发配置示例如下,job2、job3仅需修改对应分支名即可:
triggers { // 每5分钟轮询一次两个仓库的指定分支变更,cron表达式可根据需求调整 pollSCM 'H/5 * * * *' }
方案2:WebHook触发(性能更高、实时性更好,推荐)
需要提前安装Generic Webhook Trigger插件,配置步骤如下:
- 给每个job生成唯一的触发token,在job配置页的通用Webhook触发模块配置
- 在repo1、repo2的仓库管理页分别配置WebHook,推送事件指向地址:
http://<你的Jenkins服务地址>/generic-webhook-trigger/invoke?token=<job1自定义token> - 在WebHook触发规则中添加过滤条件,只有匹配以下规则的推送才会触发构建:
(payload.ref == 'refs/heads/master' && payload.repository.name == 'repo2') || (payload.ref == 'refs/heads/4.2' && payload.repository.name == 'repo1')
工作区目录结构配置
按照你的需求,repo2作为根目录检出,repo1作为根目录下的子目录检出,直接在检出阶段用dir块指定子目录即可,完整示例如下:
pipeline { agent any // 轮询触发配置,用WebHook的话可以删掉这部分 triggers { pollSCM 'H/5 * * * *' } stages { stage('代码检出') { steps { // 检出repo2的master分支到当前工作区根目录 checkout([ $class: 'GitSCM', branches: [[name: 'master']], userRemoteConfigs: [[url: 'https://你的仓库地址/repo2.git', credentialsId: 'repo2-cred']] ]) // 检出repo1的4.2分支到根目录下的repo1子目录 dir('repo1') { checkout([ $class: 'GitSCM', branches: [[name: '4.2']], userRemoteConfigs: [[url: 'https://你的仓库地址/repo1.git', credentialsId: 'repo1-cred']] ]) } } } stage('构建') { steps { // 此处替换为你的实际构建命令 sh 'make build' } } } }
多任务适配说明
如果要适配job2、job3等其他分支组合的任务,不需要重复编写Jenkinsfile,只需要把两个仓库的分支名设置为任务参数,不同任务传入对应分支参数即可,维护成本更低。
内容的提问来源于stack exchange,提问作者viridescence
相关产品推荐
相关产品推荐

