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

DSH*_*son 5 git git-merge jenkins jenkins-plugins

我有一个jenkins CI安装程序,其中开发工作是在功能分支中完成的,并且当针对该master分支发出请求请求时,Jenkins针对该请求请求运行构建以确认所有测试都已通过。然后将其同步回我们的仓库,以使查看拉取请求的人员知道测试没有问题。

我想更新此设置,以便在Jenkins从pull请求构建分支之前,它会合并master pull request分支中并构建结果。不应推迟合并,因为它仍在等待审核,但是这将确保测试针对实际的请求后结果进行测试。

我找到了有关信息并尝试了Merge before build操作,但这似乎将pull request分支合并到中master,然后,如果成功,请检查出pull request分支并进行构建。这对于捕获将来的合并冲突很有用,但master在构建之前仍未捕获到拉取请求分支。

在Git插件的文档(https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin)中,它提到了一项功能似乎完全符合我的要求:“下一步,选择一个特定的分支名称作为“高级”部分中的集成目标-(例如“主”或“稳定”),然后选择“在构建之前合并””,但是我在Jenkins中无法使用此选项。我有最新的插件,所以我不确定他们是否删除了此插件并且未更新其文档或其他内容。

有谁知道如何实现“将另一个分支合并到我当前的分支中并生成结果”的动作?

谢谢!

sai*_*sai 0

您应该使用 SHA 检查 PR 分支和主分支是否同步。如果它们不同步,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
    }
}
Run Code Online (Sandbox Code Playgroud)