Jenkins with Git - 在构建之前将另一个分支*合并到当前分支中

时间:2016-03-04 17:43:18

标签: git jenkins jenkins-plugins git-merge

我有一个jenkins CI设置,其中开发工作在功能分支中完成,当对master分支发出拉取请求时,Jenkins针对该pull请求运行构建以确认所有测试都在通过。然后将其同步回我们的仓库,以便审核拉取请求的人知道测试没有进行。

我想更新此设置,以便在Jenkins从pull请求构建分支之前,它将master 合并到拉取请求分支中并构建结果。不应该推回此合并,因为它仍处于等待审核状态,但这将确保测试针对实际的拉取后请求结果运行。

我已经找到了信息并尝试了Merge before build操作,但这似乎将拉取请求分支合并到master,然后如果成功,请检查拉取请求分支退出并构建。这对于捕获未来的合并问题非常有用,但在构建之前仍然无法将请求分支捕获到master

在Git插件(https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin)的文档中,它提到了一个看似完全符合我想要的功能:"接下来,选择一个特定的分支名称作为&#39中的集成目标;高级'部分 - (例如' master'或' stable'),并选择'在构建之前合并'",但此选项在我无法使用詹金斯。我有最新的插件,所以我不确定他们是否删除了这个,并没有更新他们的文档或什么。

有谁知道如何实现"将另一个分支合并到我当前的分支中并构建结果"行动?

谢谢!

1 个答案:

答案 0 :(得分:0)

您应检查P​​R Branch和Master是否使用SHA同步。如果它们不同步,请在运行构建阶段之前git rebase

stage ("Rebase Master") {
    pr_branch_name = sh(script: "curl https://github.com/api/v3/repos/${git_org}/${git_repo}/pulls/${CHANGE_ID} -H \"Content-Type: application/json\" -H \"authorization: token ${authentication_token}\" | jq -r .head.ref", returnStdout: true).trim()
    rebaseability = sh(script: "curl https://github.com/api/v3/repos/${git_org}/${git_repo}/pulls/${CHANGE_ID} -H \"Content-Type: application/json\" -H \"authorization: token ${authentication_token}\" | jq -r 'select(.base.sha==.head.sha) | \"up-to-date\"'", returnStdout: true).trim()

    if (rebaseability != "up-to-date" ) {
        git checkout ${pr_branch_name}
        git rebase master
    }
}