-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
Git Plugin 3.3.2
Jenkins 2.60.1
I have a repository which is setup to perform git polling, and it always triggers, suggesting there are changes, even though there are not.
In this case, the job has multiple checkouts using a pipeline, but I think it would only happen in the case of a single checkout as well.
Specifically, the branch name is master, and it checks first all the "remote/branch" combinations, (in this case, "origin/master") and then fails to find anything new (as origin/master was already built). Then, it checks the branch name on its own, thinking that maybe it's a tag or some other ref.
This results in reporting a separate commit (likely whatever master happens to be at when the polling was created), and thus reports a new commit to build. This causes the build to trigger every polling timeout, even though there aren't any real new changes.
Here's a subset of the actual output with repository names and paths redacted. I have the VERBOSE logging enabled for more information.
Started on Apr 3, 2018 4:01:00 PM Using strategy: Default [poll] Last Built Revision: Revision 72c4cea985bb5ff14813d27dac94f34887cbd841 (refs/remotes/origin/master) using GIT_SSH to set credentials > git ls-remote -h <groovyLibURL> # timeout=10 Found 1 remote heads on <groovyLibURL> [poll] Latest remote head revision on refs/heads/master is: 72c4cea985bb5ff14813d27dac94f34887cbd841 - already built by 1738 Using strategy: Default [poll] Last Built Revision: Revision cc24044526e9d460c74a59fcdeb12e43a446cb7d (origin/master) > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repositories > git config remote.origin.url <mainRepositoryURL> # timeout=10 Fetching upstream changes from <mainRepositoryURL> > git --version # timeout=10 using GIT_SSH to set credentials > git fetch --no-tags --progress <mainRepositoryURL> +refs/heads/*:refs/remotes/origin/* Polling for changes in getCandidateRevisions(true,master,,,hudson.plugins.git.util.BuildData@3fcd3164[scmName=<mainRepositoryName>,remoteUrls=[<mainRepositoryURL>],buildsByBranchName={origin/master=Build #1738 of Revision cc24044526e9d460c74a59fcdeb12e43a446cb7d (origin/master)},lastBuild=Build #1738 of Revision cc24044526e9d460c74a59fcdeb12e43a446cb7d (origin/master)]) considering branches to build Qualifying master as a branch in repository origin -> origin/master > git rev-parse origin/master^{commit} # timeout=10 rev-parse origin/master -> AnyObjectId[cc24044526e9d460c74a59fcdeb12e43a446cb7d] AnyObjectId[cc24044526e9d460c74a59fcdeb12e43a446cb7d] has already been built > git rev-parse master^{commit} # timeout=10 Failed to rev-parse: master Using strategy: Default [poll] Last Built Revision: Revision d24e49e865522042434be7b1a46f592aae2608dc (origin/master) > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repositories > git config remote.origin.url <firstRepositoryURL> # timeout=10 Fetching upstream changes from <firstRepositoryURL> > git --version # timeout=10 using GIT_SSH to set credentials > git fetch --no-tags --progress <firstRepositoryURL> +refs/heads/*:refs/remotes/origin/* Polling for changes in getCandidateRevisions(true,master,,,hudson.plugins.git.util.BuildData@857d3e89[scmName=<firstRepositoryName>,remoteUrls=[<firstRepositoryURL>],buildsByBranchName={origin/master=Build #1738 of Revision d24e49e865522042434be7b1a46f592aae2608dc (origin/master)},lastBuild=Build #1738 of Revision d24e49e865522042434be7b1a46f592aae2608dc (origin/master)]) considering branches to build Qualifying master as a branch in repository origin -> origin/master > git rev-parse origin/master^{commit} # timeout=10 rev-parse origin/master -> AnyObjectId[d24e49e865522042434be7b1a46f592aae2608dc] AnyObjectId[d24e49e865522042434be7b1a46f592aae2608dc] has already been built > git rev-parse master^{commit} # timeout=10 rev-parse master -> AnyObjectId[d24e49e865522042434be7b1a46f592aae2608dc] AnyObjectId[d24e49e865522042434be7b1a46f592aae2608dc] has already been built Using strategy: Default [poll] Last Built Revision: Revision 93a6d3510777096a6fbd7f16ac22c28ef4bd872e (origin/master) > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repositories > git config remote.origin.url <secondRepositoryURL> # timeout=10 Fetching upstream changes from <secondRepositoryURL> > git --version # timeout=10 using GIT_SSH to set credentials > git fetch --no-tags --progress <secondRepositoryURL> +refs/heads/*:refs/remotes/origin/* Polling for changes in getCandidateRevisions(true,master,,,hudson.plugins.git.util.BuildData@2e191547[scmName=<secondRepositoryName>,remoteUrls=[<secondRepositoryURL>],buildsByBranchName={origin/master=Build #1738 of Revision 93a6d3510777096a6fbd7f16ac22c28ef4bd872e (origin/master)},lastBuild=Build #1738 of Revision 93a6d3510777096a6fbd7f16ac22c28ef4bd872e (origin/master)]) considering branches to build Qualifying master as a branch in repository origin -> origin/master > git rev-parse origin/master^{commit} # timeout=10 rev-parse origin/master -> AnyObjectId[93a6d3510777096a6fbd7f16ac22c28ef4bd872e] AnyObjectId[93a6d3510777096a6fbd7f16ac22c28ef4bd872e] has already been built > git rev-parse master^{commit} # timeout=10 rev-parse master -> AnyObjectId[4bf94e5146026ba4e3bebef3b2ebf8a795d0d0f8] Found a new commit AnyObjectId[4bf94e5146026ba4e3bebef3b2ebf8a795d0d0f8] to be built on master {0} seems to be a non-branch reference (tag?) > git log --full-history --no-abbrev --format=raw -M -m 93a6d3510777096a6fbd7f16ac22c28ef4bd872e..4bf94e5146026ba4e3bebef3b2ebf8a795d0d0f8 # timeout=10 Using strategy: Default [poll] Last Built Revision: Revision a4db49e3433ef3304c7956e81369c2ed5fa69b5d (origin/master) > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repositories > git config remote.origin.url <thirdRepositoryURL> # timeout=10 Fetching upstream changes from <thirdRepositoryURL> > git --version # timeout=10 using GIT_SSH to set credentials > git fetch --no-tags --progress <thirdRepositoryURL> +refs/heads/*:refs/remotes/origin/* Polling for changes in getCandidateRevisions(true,master,,,hudson.plugins.git.util.BuildData@49f3b5e7[scmName=<thirdRepositoryName>,remoteUrls=[<thirdRepositoryURL>],buildsByBranchName={origin/master=Build #1738 of Revision a4db49e3433ef3304c7956e81369c2ed5fa69b5d (origin/master)},lastBuild=Build #1738 of Revision a4db49e3433ef3304c7956e81369c2ed5fa69b5d (origin/master)]) considering branches to build Qualifying master as a branch in repository origin -> origin/master > git rev-parse origin/master^{commit} # timeout=10 rev-parse origin/master -> AnyObjectId[a4db49e3433ef3304c7956e81369c2ed5fa69b5d] AnyObjectId[a4db49e3433ef3304c7956e81369c2ed5fa69b5d] has already been built > git rev-parse master^{commit} # timeout=10 rev-parse master -> AnyObjectId[00f059f63e272c44fb3f754be4e2f4a1b474c416] Found a new commit AnyObjectId[00f059f63e272c44fb3f754be4e2f4a1b474c416] to be built on master {0} seems to be a non-branch reference (tag?) > git log --full-history --no-abbrev --format=raw -M -m a4db49e3433ef3304c7956e81369c2ed5fa69b5d..00f059f63e272c44fb3f754be4e2f4a1b474c416 # timeout=10 Using strategy: Default [poll] Last Built Revision: Revision 06188df26697ef38293a8533ce601934762c7d6c (origin/master) > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repositories > git config remote.origin.url <fourthRepositoryURL> # timeout=10 Fetching upstream changes from <fourthRepositoryURL> > git --version # timeout=10 using GIT_SSH to set credentials > git fetch --no-tags --progress <fourthRepositoryURL> +refs/heads/*:refs/remotes/origin/* Polling for changes in getCandidateRevisions(true,master,,,hudson.plugins.git.util.BuildData@dff532d1[scmName=<fourthRepositoryName>,remoteUrls=[<fourthRepositoryURL>],buildsByBranchName={origin/master=Build #1738 of Revision 06188df26697ef38293a8533ce601934762c7d6c (origin/master)},lastBuild=Build #1738 of Revision 06188df26697ef38293a8533ce601934762c7d6c (origin/master)]) considering branches to build Qualifying master as a branch in repository origin -> origin/master > git rev-parse origin/master^{commit} # timeout=10 rev-parse origin/master -> AnyObjectId[06188df26697ef38293a8533ce601934762c7d6c] AnyObjectId[06188df26697ef38293a8533ce601934762c7d6c] has already been built > git rev-parse master^{commit} # timeout=10 Failed to rev-parse: master Done. Took 6.5 sec Changes found
I am highly suspect that the relevant commit related to why this breaks is:
c7dae80b85c1 ("JENKINS-21952 Resolve tags with slashes", 2014-02-27)
I believe what is happening is that the "remote/branch" output is failing to find any new changes, so we fall back to attempting to resolve the name like a tag, but it so happens that the polling setup actually does end up with the branch checked out, and it results in us finding the local master name and reporting it.
I don't really know how to resolve this yet.
- relates to
-
JENKINS-50401 Checkout resolution misbehaves with local branch and forward slashes
-
- Open
-
It looks like this is performing polling in the workspace, so it happens that the workspace has master checked out at the older commit. I'm still unsure exactly why that happens, but some of the repositories appear to never actually check the branch out, so the revParse fails, while others do have it checked out.