-
Bug
-
Resolution: Unresolved
-
Major
-
Jenkins 1.565.2, 1.580.3
Git-Client 1.11.0, 1.14.1
Git plugin 2.2.7, 2.3.4
SCM-API 0.2
Both master and slave works on RHEL 6.3 with Java 7u51
The job is triggered because of SCM change:
Poll log
[poll] Last Built Revision: Revision 3281126a340c0e863f12c11a7f9ccd31bceb587a (origin/master) [git] $ sh -e /DATA/jenkins/app-data/tools/git/hudson598255919908413882.sh > git ls-remote -h [CENSURED] master # timeout=10 [poll] Latest remote head revision is: e72acfe796b818f51ba549991a8f1876657d8986 Done. Took 0.32 sec Changes found
But in the run git log we see that it skips changelog becuase of "First time build" -falsely:
Run log
16:27:52 > /usr/bin/git checkout -f e72acfe796b818f51ba549991a8f1876657d8986 16:27:55 > /usr/bin/git rev-list 3281126a340c0e863f12c11a7f9ccd31bceb587a # timeout=10 16:27:55 First time build. Skipping changelog.
Looking at the current code of Git Plugin I see there's some kind of condition on "exclusion" but I've yet understood what sets it:
from GitSCM.java
private void computeChangeLog(GitClient git, Revision revToBuild, TaskListener listener, BuildData previousBuildData, FilePath changelogFile, BuildChooserContext context) throws IOException, InterruptedException { Writer out = new OutputStreamWriter(changelogFile.write(),"UTF-8"); boolean executed = false; ChangelogCommand changelog = git.changelog(); changelog.includes(revToBuild.getSha1()); try { boolean exclusion = false; ChangelogToBranch changelogToBranch = getExtensions().get(ChangelogToBranch.class); if (changelogToBranch != null) { listener.getLogger().println("Using 'Changelog to branch' strategy."); changelog.excludes(changelogToBranch.getOptions().getRef()); exclusion = true; } else { for (Branch b : revToBuild.getBranches()) { Build lastRevWas = getBuildChooser().prevBuildForChangelog(b.getName(), previousBuildData, git, context); if (lastRevWas != null && git.isCommitInRepo(lastRevWas.getSHA1())) { changelog.excludes(lastRevWas.getSHA1()); exclusion = true; } } } if (!exclusion) { // this is the first time we are building this branch, so there's no base line to compare against. // if we force the changelog, it'll contain all the changes in the repo, which is not what we want. listener.getLogger().println("First time build. Skipping changelog."); } else { changelog.to(out).max(MAX_CHANGELOG).execute(); executed = true; } } catch (GitException ge) { ge.printStackTrace(listener.error("Unable to retrieve changeset")); } finally { if (!executed) changelog.abort(); IOUtils.closeQuietly(out); } }
I might take the task to fix it on my own - but maybe for some of you it may be obvious...
Hi Or -
I seem to be having the same issue (getting the "First time build. Skipping changelog" message, not seeing changes recorded, although not first build). Any luck figuring it out?
My relevant jobs are all using the Job DSL Plugin, I suspect it has to do with that plugin "recreating" the job between runs (making each run practically "first"), though I haven't been able to prove it yet. I'm curious - are your builds using this plugin too?
Thanks,
Tzach (צח)