git - Jenkins with Git - 在构建之前将另一个分支* merge 到*当前分支

标签 git jenkins jenkins-plugins git-merge

我有一个 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/

相关文章:

linux - git 更改权限在下一次提交之前无法持续

python - Jenkins Python API 和多配置项目

jenkins - 当 Jenkins 服务器位于 kubernetes 集群之外时,我可以使用 Jenkins kubernetes 插件吗?

git - Azure Git 身份验证失败

git 推送错误 : HTTP request failed: The requested URL returned 504

git - 删除一个看起来像 "\357\275\236"的文件

git - 从 Gitlab 有效负载获取分支名称 - Jenkins

jenkins - 在 Jenkins 队列中装饰(更改名称)作业

java - Jenkins:doFill 函数没有正确获取@QueryParameter

Jenkins SSH 管道步骤 -- com.jcraft.jsch.JSchException : invalid privatekey: [B@84d6b5c