Git

Jenkins github pull request builder選擇了錯誤的送出

  • December 13, 2019

我將 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)。

引用自:https://serverfault.com/questions/804697