Skip to content

Commit edb8602

Browse files
authored
Merge pull request #669 from dwnusbaum/flush-log-on-shutdown
Flush overall Pipeline log stream when shutting down Jenkins
2 parents 8177e69 + 6888d82 commit edb8602

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1720,6 +1720,7 @@ public void pause(final boolean v) throws IOException {
17201720
LOGGER.log(Level.WARNING, null, t);
17211721
}
17221722
});
1723+
cpsExec.getOwner().getListener().getLogger().close();
17231724
}
17241725
} catch (Exception ex) {
17251726
LOGGER.log(Level.WARNING, "Error persisting Pipeline execution at shutdown: "+((CpsFlowExecution) execution).owner, ex);

plugin/src/test/java/org/jenkinsci/plugins/workflow/cps/CpsFlowDefinitionRJRTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package org.jenkinsci.plugins.workflow.cps;
22

3+
import hudson.Functions;
4+
import java.util.logging.Level;
35
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
6+
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
7+
import org.junit.Assume;
48
import org.junit.Rule;
59
import org.junit.Test;
610
import org.jvnet.hudson.test.JenkinsRule;
@@ -21,4 +25,28 @@ private static void doesItSmoke(JenkinsRule r) throws Exception {
2125
p.setDefinition(new CpsFlowDefinition("print Jenkins.get().getRootDir().toString()", false));
2226
r.assertBuildStatusSuccess(p.scheduleBuild2(0));
2327
}
28+
29+
@Test
30+
public void flushLogsOnShutdown() throws Throwable {
31+
Assume.assumeFalse("RealJenkinsRule does not shut down Jenkins cleanly on Windows, see https://github.com/jenkinsci/jenkins-test-harness/pull/559", Functions.isWindows());
32+
rjr.withLogger(CpsFlowExecution.class, Level.FINER);
33+
rjr.then(CpsFlowDefinitionRJRTest::flushLogsOnShutdownPreRestart);
34+
rjr.then(CpsFlowDefinitionRJRTest::flushLogsOnShutdownPostRestart);
35+
}
36+
37+
private static void flushLogsOnShutdownPreRestart(JenkinsRule r) throws Exception {
38+
WorkflowJob p = r.createProject(WorkflowJob.class, "p");
39+
p.setDefinition(new CpsFlowDefinition("sleep 10\n", true));
40+
WorkflowRun b = p.scheduleBuild2(0).waitForStart();
41+
r.waitForMessage("Sleeping for 10 sec", b);
42+
r.jenkins.doQuietDown();
43+
}
44+
45+
private static void flushLogsOnShutdownPostRestart(JenkinsRule r) throws Exception {
46+
WorkflowJob p = r.jenkins.getItemByFullName("p", WorkflowJob.class);
47+
WorkflowRun b = p.getLastBuild();
48+
r.assertBuildStatusSuccess(r.waitForCompletion(b));
49+
r.assertLogContains("Resuming build at ", b);
50+
r.assertLogContains("Pausing (Preparing for shutdown)", b);
51+
}
2452
}

0 commit comments

Comments
 (0)