web-dev-qa-db-ja.com

Jenkinsgithubプルリクエストビルダーが間違ったコミットを選択する

プラグインでJenkinsを使用しています GitHub Pull Request Builder 。次に、GitHubからwebhookを設定して、新しいプルリクエストが開かれたり、コミットされたりしたときにジェンキンスでビルドをトリガーします。

JenkinsDSLを使用して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");
    }
}

私が経験している問題は、ジェンキンスが混乱して、間違ったコミットを選択して構築することがあるということです。

その場合、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 [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)マスター(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 Tag Message Plugin が実行されるとgit describeタグ情報をチェックするために、機能ブランチのコミットIDを使用しています。

その後、Jenkinsはマスターチップ(1995d66)、機能ブランチのヒントの代わりに(126434b) 予想通り。

3
benedikt

問題は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
benedikt

他の誰かが私たちと同じ理由でこの問題を抱えている場合に備えて!

キャッシュが破損している場合に発生する可能性があります。 Jenkinsフォルダの下にある「キャッシュ」フォルダを確認し、その中のすべてのgitフォルダを削除します。 (もちろん、最初にJenkinsをシャットダウンします)。

0
Andrew Ducker