我有一个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'),并选择'在构建之前合并'",但此选项在我无法使用詹金斯。我有最新的插件,所以我不确定他们是否删除了这个,并没有更新他们的文档或什么。
有谁知道如何实现"将另一个分支合并到我当前的分支中并构建结果"行动?
谢谢!
答案 0 :(得分:0)
您应检查PR 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
}
}