Я использую 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 внутри нее. (Конечно, сначала выключите Дженкинса).