我有一个 jenkins CI 设置,其中开发工作在功能分支中完成,当针对 master
分支发出 pull 请求时,Jenkins 针对该 pull 请求运行构建以确认所有测试都是通过。然后将其同步回我们的存储库,以便审查 pull 请求的人知道测试没有搞砸。
我想更新此设置,以便 Jenkins 在从 pull 请求构建分支之前,将 master
merge 到 pull 请求分支并构建结果。不应推迟此 merge ,因为它仍在等待审查,但这将确保测试根据实际的 pull 后请求结果运行。
我找到了相关信息并尝试了 Merge before build
操作,但这似乎将 pull 请求分支 merge 到 master
中,然后如果成功,请检查 pull 请求分支出来并构建。这对于捕捉 future 的 merge 冲突非常有用,但在构建之前仍然无法捕捉到 master
的 pull 请求分支。
在 Git 插件 ( https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin) 的文档中,它提到了一个似乎完全符合我要求的功能:“接下来,在‘高级’部分中选择一个特定的分支名称作为集成目标——(例如,‘ master',或'stable'),然后选择'Merge before build'”,但我在 Jenkins 中无法使用此选项。我有最新的插件,所以我不确定他们是否删除了它并且没有更新他们的文档或其他什么。
有谁知道如何实现“将另一个分支 merge 到我当前的分支并构建结果”操作?
谢谢!
最佳答案
您应该使用 SHA 检查 PR Branch 和 master 是否同步。如果它们不同步,请在运行构建阶段之前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
}
}
关于git - Jenkins with Git - 在构建之前将另一个分支* merge 到*当前分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35802676/