Jenkins github pull request 构建器选择了错误的提交

Jenkins github pull request 构建器选择了错误的提交

我正在使用带有插件的 JenkinsGitHub 拉取请求生成器。然后我从 GitHub 设置了 webhook,以便在打开或提交新的 Pull 请求时触发 jenkins 中的构建。

我使用 Jenkins DSL 配置了 GHPRB 插件:

job("name") {
    properties {
        githubProjectUrl("https://github.com/org/${repo}")
    }
    scm {
        git {
            remote {
                name("origin")
                url("[email protected]:org/${repo}.git")
                credentials("jenkins-ssh-keyid")
            }
            branch("**")
            extensions {
                gitTagMessageExtension()
            }
        }
    }
    triggers {
        githubPullRequest{
            admins(["github-username"])
            orgWhitelist('org-name')
            cron("")
            triggerPhrase("build")
            extensions {
                commitStatus {
                    context("unittest")
                }
            }
           useGitHubHooks()
       }
    }
    steps {
        shell("./run-unittests");
    }
}

我遇到的问题是,有时詹金斯会感到困惑并选择错误的提交进行构建。

当发生这种情况时,詹金斯输出如下所示:

GitHub pull request #9 of commit 126434b, no merge conflicts.
Setting status of 126434b to PENDING with url http://jenkins/job/unittest/26/ and message: 'Build started sha1 is merged.'
Using context: unittest
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url [email protected]:org/repo.git # timeout=10
Fetching upstream changes from [email protected]:org/repo.git
> git --version # timeout=10
using GIT_SSH to set credentials 
> git -c core.askpass=true fetch --tags --progress [email protected]:org/repo.git +refs/heads/*:refs/remotes/origin/*
Seen branch in repository origin/feature-branch-0
Seen branch in repository origin/feature-branch-1
Seen branch in repository origin/feature-branch-2
Seen 3 remote branches
Checking out Revision 1995d66 (origin/master)

这里,Jenkins 从使用功能分支的尖端 ( 126434b) 转变为使用 master 分支的尖端 ( 1995d66)。

 > git config core.sparsecheckout # timeout=10
 > git checkout -f 1995d66
 > git rev-list ba7ec55 # timeout=10
 > git describe --tags 126434b # timeout=10
Tag information could not be determined for this revision; no git tag info will be exported

请注意,当Git 标签消息插件运行git describe检查标签信息,它使用功能分支的提交 ID。

然后,詹金斯继续工作,处理主分支提示 ( 1995d66),而不是预期的功能分支提示 ( 126434b)。

答案1

问题在于branch规范和refspec。将scm.git作业部分更改为以下内容解决了 Jenkins 签出错误提交的问题:

scm {
    git {
        remote {
            name("origin")
            url("[email protected]:org/${repo}.git")
            credentials("jenkins-ssh-keyid")
            refspec('+refs/pull/*:refs/remotes/origin/pr/*')
            }
            branch('${ghprbActualCommit}')
        }
    }
}

答案2

以防其他人因为与我们相同的原因遇到这个问题!

如果您的缓存已损坏,则可能会发生这种情况。检查 Jenkins 下的“缓存”文件夹,并删除其中的所有 git 文件夹。(当然,先关闭 Jenkins)。

相关内容