-
Bug
-
Resolution: Fixed
-
Critical
-
None
Updating an existing Pull-Request with additional commits leads to broken builds of the Pull Request, because jenkins tries to check out a not existing ref in git.
Reproduction:
- create a branch in the repository
- create a new commit
- create a multibranch job building all branches and pull requests
- create a new pull request in Bitbucket server from the new branch to master
- scan for changes in the multibranch job -> the first build of the PR succeeds
- change some files on the branch and commit
with the --amend flag setand pushwith force flagEdit: Found out, that a normal commit to the branch also crashes the build. - scan for changes in the multibranch job -> a build in the PR is triggered but fails due to git complaining that the ref does not exist
- After visiting the Pull-Request overview in Bitbucket, following builds succeed
This is the jenkins console output:
Started by user admin Checking out git http://xstash.itd.meisterplan.io/scm/mp/failing-builds.git http://xstash.itd.meisterplan.io/scm/mp/failing-builds.git into /var/jenkins_home/workspace/failing-builds_PR-3-5GPUDFBBY64BPS5T63E3TRH74RJSNKWF5A6YELFFKHSOT5HTAQ4A@script to read Jenkinsfile > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from 2 remote Git repositories > git config remote.origin.url http://xstash.itd.meisterplan.io/scm/mp/failing-builds.git # timeout=10 Fetching without tags Fetching upstream changes from http://xstash.itd.meisterplan.io/scm/mp/failing-builds.git > git --version # timeout=10 using GIT_ASKPASS to set credentials Bitbucket-Server Account > git fetch --no-tags --progress http://xstash.itd.meisterplan.io/scm/mp/failing-builds.git +refs/pull-requests/3/from:refs/remotes/origin/PR-3 > git config remote.upstream.url http://xstash.itd.meisterplan.io/scm/mp/failing-builds.git # timeout=10 Fetching without tags Fetching upstream changes from http://xstash.itd.meisterplan.io/scm/mp/failing-builds.git using GIT_ASKPASS to set credentials Bitbucket-Server Account > git fetch --no-tags --progress http://xstash.itd.meisterplan.io/scm/mp/failing-builds.git +refs/heads/master:refs/remotes/upstream/master Merging remotes/upstream/master commit d4eaaccd2e0f61e87b2a48fcae8a8b6693038a48 into PR head commit cec48748dc421b835274476029a9c98123babc15 > git config core.sparsecheckout # timeout=10 > git checkout -f cec48748dc421b835274476029a9c98123babc15 [Bitbucket] Notifying pull request build result [Bitbucket] Build result notified hudson.plugins.git.GitException: Command "git checkout -f cec48748dc421b835274476029a9c98123babc15" returned status code 128: stdout: stderr: fatal: reference is not a tree: cec48748dc421b835274476029a9c98123babc15 at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1924) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$800(CliGitAPIImpl.java:71) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:2214) Caused: hudson.plugins.git.GitException: Could not checkout cec48748dc421b835274476029a9c98123babc15 at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:2237) at jenkins.plugins.git.MergeWithGitSCMExtension.checkout(MergeWithGitSCMExtension.java:146) at jenkins.plugins.git.MergeWithGitSCMExtension.decorateRevisionToBuild(MergeWithGitSCMExtension.java:112) at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.java:1023) at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1116) at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:109) at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:130) at org.jenkinsci.plugins.workflow.multibranch.SCMBinder.create(SCMBinder.java:120) at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:246) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:405) Finished: FAILURE
I opened an issue at the bitbucket atlassian support and got the answer, that this behavior is by design and one should never checkout refs, which are generated lazily.
This is the full answer from atlassian:
I'm one of the Bitbucket Server developers. The issue you're running into here is from fetching pull request refs. Here's a detailed response I wrote to someone else having a similar issue.
When new commits are pushed to a branch which has an open pull request, the pull request hashes are eagerly updated in the database but the refs on disk are not. This behavior has existed unchanged since pull requests were introduced in Stash 1.3.0. If someone views the pull request, then the refs are updated as part of performing a new merge to show an up-to-date diff. Any integration which attempts to use refs/pull-requests/*/from is going to be racy and unreliable because that ref is not eagerly updated.
- is duplicated by
-
JENKINS-45891 Cannot merge PRs from private, forked repositories
- Resolved
-
JENKINS-46183 "reference is not a tree" when doing a git checkout of the commit being built
- Closed
- relates to
-
JENKINS-46174 Error cloning remote from PR at first try
- Closed
-
JENKINS-45973 PRs failing to build due to missing branch
- Open
-
JENKINS-61493 Lightweight checkout fails in Bitbucket Server 7.0; refs/pull-requests/*/merge does not exist
- Open
-
JENKINS-48737 Provide lightweight checkouts for Bitbucket Pull Requests
- Resolved
- links to