Назад | Перейти на главную страницу

Конструктор запросов на вытягивание Jenkins github выбирает неправильную фиксацию

Я использую Jenkins с плагином Конструктор запросов на извлечение GitHub. Затем я настроил веб-перехватчики из GitHub, чтобы запускать сборку в jenkins при открытии или фиксации нового запроса на слияние.

Я настроил плагин GHPRB с Jenkins DSL:

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 будет выглядеть так:

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)

Здесь Дженкинс уходит от использования кончика ветки функций (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 бежит git describe чтобы проверить информацию о теге, он использует идентификатор фиксации для ветки функции.

Затем Дженкинс продолжает работу над основным советом (1995d66) вместо подсказки ветки функции (126434b) как и ожидалось.

Проблема заключалась в branch спецификация и refspec. Изменение scm.git В этом разделе работы была решена проблема проверки Дженкинсом неправильной фиксации:

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}')
        }
    }
}

На всякий случай, если у кого-то еще есть эта проблема по тем же причинам, что и у нас!

Это может произойти, если ваш кеш поврежден. Проверьте папку "cache" под вашим Jenkins и удалите все папки git внутри нее. (Конечно, сначала выключите Дженкинса).