-
Bug
-
Resolution: Fixed
-
Major
-
None
If a job is currently building and new configuration is uploaded via an HTTP POST then the current build in build history is lost.
Build information is maintained as transient state on the job object, which is reset and then reloaded from the build directory:
@Override
public void onLoad(ItemGroup<? extends Item> parent, String name) throws IOException {
super.onLoad(parent, name);
this.builds = new RunMap<R>();
this.builds.load(this,new Constructor<R>() {
public R create(File dir) throws IOException
});
However, the builds.load(...) ignores directories without a build.xml, which is the case when a build is currently building:
public synchronized void load(Job job, Constructor<R> cons) {
....
for( String build : buildDirs ) {
File d = new File(buildDir,build);
if(new File(d,"build.xml").exists()) {
// if the build result file isn't in the directory, ignore it.
try
catch (IOException e)
{ e.printStackTrace(); } catch (InstantiationError e) { e.printStackTrace(); } }
}
The job will be out of sync with the persisted build history until the job is reloaded or saved.
- duplicates
-
JENKINS-3265 Reload Configuration from Disk (or POSTing config.xml) loses info on running builds
-
- Resolved
-
Code changed in jenkins
User: Kohsuke Kawaguchi
Path:
changelog.html
core/src/main/java/hudson/cli/UpdateJobCommand.java
core/src/main/java/hudson/model/AbstractItem.java
core/src/main/java/hudson/model/AbstractProject.java
core/src/main/java/hudson/model/RunMap.java
test/src/test/groovy/hudson/model/RunMapTest.groovy
http://jenkins-ci.org/commit/jenkins/9fbd6d3a482643f4080fbb793c67323e8464b11c
Log:
[FIXED JENKINS-12318]
Preserve in-progress builds when reloading a job.
Because in-flight builds tend to update the state a lot, with this
change we refrain from reloading those builds from the disk.
This should be acceptable since we are primarily reloading a job, and
reloading of builds are secondary.