Git
Jenkins github pull request builder選擇了錯誤的送出
我將 Jenkins 與外掛GitHub Pull Request Builder一起使用。然後,我從 GitHub 設置 webhook,以在打開或送出新的拉取請求時觸發 jenkins 中的建構。
我用 Jenkins DSL 配置了 GHPRB 外掛:
job("name") { properties { githubProjectUrl("https://github.com/org/${repo}") } scm { git { remote { name("origin") url("git@github.com: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"); } }
我遇到的問題是,有時 Jenkins 會感到困惑並選擇錯誤的送出來建構。
發生這種情況時,jenkins 輸出如下所示:
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 git@github.com:org/repo.git # timeout=10 Fetching upstream changes from git@github.com:org/repo.git > git --version # timeout=10 using GIT_SSH to set credentials > git -c core.askpass=true fetch --tags --progress git@github.com: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。然後 Jenkins 繼續工作,處理主提示 ( ),而不是預期
1995d66
的功能分支提示 ( )。126434b
問題在於
branch
規範和refspec
. 將工作部分更改scm.git
為此解決了 Jenkins 檢查錯誤送出的問題:scm { git { remote { name("origin") url("git@github.com:org/${repo}.git") credentials("jenkins-ssh-keyid") refspec('+refs/pull/*:refs/remotes/origin/pr/*') } branch('${ghprbActualCommit}') } } }
以防其他人出於與我們相同的原因遇到此問題!
如果您的記憶體已損壞,則可能會發生這種情況。檢查 Jenkins 下的“記憶體”文件夾,並刪除其中的所有 git 文件夾。(當然,首先關閉 Jenkins)。