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

首次编写Jenkins Pipeline脚本求助:多分支合并后触发构建

完整Jenkins Pipeline脚本实现你的分支合并+自动构建需求

嘿,我帮你把这个Pipeline脚本补全并优化,完美适配你说的两个团队分支合并到main再构建的需求!先给你完整的脚本,再一步步拆解说明:

pipeline {
    agent any
    environment {
        // 这里定义你的两个团队分支名称,根据实际情况修改
        TEAM_A_BRANCH = 'teamA-feature'
        TEAM_BRANCH = 'teamB-feature'
        MAIN_BRANCH = 'main'
        // 仓库URL,也可以从checkout步骤里直接引用
        REPO_URL = 'git@your-repo-url.git'
    }
    triggers {
        // 每隔5分钟检查一次分支提交,有更新就触发Pipeline
        pollSCM('H/5 * * * *')
        // 如果用GitHub/GitLab,也可以换成webhook触发,比如githubPush()
    }
    stages {
        stage('Initialize: Pull Latest Code') {
            steps {
                script {
                    // 拉取main和两个团队分支的最新代码
                    checkout([$class: 'GitSCM',
                        branches: [[name: '*/main'], [name: "*/${TEAM_A_BRANCH}"], [name: "*/${TEAM_BRANCH}"]],
                        userRemoteConfigs: [[url: REPO_URL]],
                        changelog: true,
                        poll: true
                    ])
                }
            }
        }

        stage('Pre-Merge Check: Verify Branch Status') {
            steps {
                script {
                    // 检查两个团队分支是否都有比main新的提交(可选,确保两边都完成开发)
                    def teamACommits = sh(script: "git log --oneline ${MAIN_BRANCH}..${TEAM_A_BRANCH} | wc -l", returnStdout: true).trim()
                    def teamBCommits = sh(script: "git log --oneline ${MAIN_BRANCH}..${TEAM_BRANCH} | wc -l", returnStdout: true).trim()

                    if (teamACommits == '0' || teamBCommits == '0') {
                        error("⚠️ 团队分支没有新提交:Team A分支新增提交数${teamACommits},Team B分支新增提交数${teamBCommits},请确认两个分支都完成开发后再触发!")
                    }
                    echo "✅ 两个团队分支都有新提交,可以开始合并流程"
                }
            }
        }

        stage('Merge Team Branches to Main') {
            steps {
                script {
                    // 切换到main分支并拉取最新代码
                    sh "git checkout ${MAIN_BRANCH}"
                    sh "git pull origin ${MAIN_BRANCH}"

                    // 合并Team A分支到main,冲突时终止流程(避免自动处理出问题)
                    try {
                        sh "git merge --no-ff ${TEAM_A_BRANCH} -m 'Merge Team A feature branch to main'"
                    } catch (Exception e) {
                        error("❌ 合并Team A分支到main时出现冲突,请手动解决冲突后重新触发Pipeline!")
                    }

                    // 合并Team B分支到main
                    try {
                        sh "git merge --no-ff ${TEAM_BRANCH} -m 'Merge Team B feature branch to main'"
                    } catch (Exception e) {
                        error("❌ 合并Team B分支到main时出现冲突,请手动解决冲突后重新触发Pipeline!")
                    }

                    // 推送合并后的main分支回远程仓库
                    sh "git push origin ${MAIN_BRANCH}"
                    echo "✅ 两个团队分支已成功合并到main分支并推送"
                }
            }
        }

        stage('Build After Merge') {
            steps {
                script {
                    // 替换成你的实际构建命令,比如maven、npm、docker build等
                    echo "🚀 开始构建main分支..."
                    // 示例:Maven构建
                    // sh "mvn clean package -DskipTests"
                    // 示例:Node.js构建
                    // sh "npm install && npm run build"
                    echo "✅ 构建完成!"
                }
            }
        }
    }
    post {
        success {
            echo "🎉 整个Pipeline流程执行成功!"
        }
        failure {
            echo "❌ Pipeline执行失败,请查看日志排查问题"
        }
    }
}

关键细节说明

  • 触发方式:我用了pollSCM做定时检查,如果你用GitHub/GitLab,换成对应的webhook触发器(比如githubPush())能更实时触发Pipeline。
  • 分支自定义:你可以在environment块里修改团队分支的名称,完全匹配你们的分支命名规则。
  • 冲突处理:脚本遇到合并冲突会直接终止,这是因为自动处理冲突容易引发代码问题,建议手动解决后再重新触发。如果有固定冲突解决策略,也可以改成git merge --no-ff -X theirs ${TEAM_A_BRANCH}(强制用分支代码覆盖),但不推荐随意使用。
  • 权限注意:确保Jenkins运行用户有仓库的读写权限(比如配置SSH密钥),不然拉取和推送代码会失败。
  • 预合并检查:Pre-Merge Check是可选阶段,用来避免其中一个团队分支还没开发完就合并的情况,不需要的话可以直接删掉这个stage。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:12:50