Estou usando o Jenkins com o plug-in GitHub Pull Request Builder . Depois, configurei webhooks do GitHub para acionar uma compilação em jenkins quando uma nova solicitação pull for aberta ou confirmada.
Eu configurei o plug-in do GHPRB com o DSL do Jenkins:
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");
}
}
O problema que eu tenho é que às vezes o Jenkins fica confuso e escolhe o commit errado para construir.
Quando isso acontece, a saída do jenkins é assim:
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)
Aqui, o Jenkins usa a ponta do recurso ( 126434b
) para usar a dica do mestre ( 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
Observe que, quando o Plug-in de mensagem do Git Tag é executado git describe
para verificar para informações de tag, ele está usando o ID de confirmação para o ramo de recursos.
Jenkins continua o trabalho, trabalhando na dica principal ( 1995d66
), em vez da dica do ramo de recursos ( 126434b
) como esperado.