Skip to content

Commit 1aea471

Browse files
committed
Initialize reaper when launching a kubernetes agent
1 parent a6d44ae commit 1aea471

File tree

4 files changed

+27
-2
lines changed

4 files changed

+27
-2
lines changed

src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesLauncher.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import java.util.stream.Collectors;
4949
import jenkins.metrics.api.Metrics;
5050
import org.apache.commons.lang.StringUtils;
51+
import org.csanchez.jenkins.plugins.kubernetes.pod.retention.Reaper;
5152
import org.kohsuke.stapler.DataBoundConstructor;
5253

5354
import static java.util.logging.Level.FINE;
@@ -94,6 +95,8 @@ public synchronized void launch(SlaveComputer computer, TaskListener listener) {
9495
if (!(computer instanceof KubernetesComputer)) {
9596
throw new IllegalArgumentException("This Launcher can be used only with KubernetesComputer");
9697
}
98+
// Activate reaper if it never got activated.
99+
Reaper.getInstance().maybeActivate();
97100
KubernetesComputer kubernetesComputer = (KubernetesComputer) computer;
98101
computer.setAcceptingTasks(false);
99102
KubernetesSlave node = kubernetesComputer.getNode();

src/main/java/org/csanchez/jenkins/plugins/kubernetes/pod/retention/Reaper.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,18 @@ public static Reaper getInstance() {
9292

9393
@Override
9494
public void onOnline(Computer c, TaskListener listener) throws IOException, InterruptedException {
95-
if (c instanceof KubernetesComputer && activated.compareAndSet(false, true)) {
95+
if (c instanceof KubernetesComputer) {
96+
maybeActivate();
97+
}
98+
}
99+
100+
public void maybeActivate() {
101+
if (activated.compareAndSet(false, true)) {
96102
activate();
97103
}
98104
}
99105

100-
private void activate() {
106+
private synchronized void activate() {
101107
LOGGER.fine("Activating reaper");
102108
// First check all existing nodes to see if they still have active pods.
103109
// (We may have missed deletion events while Jenkins was shut off,

src/test/java/org/csanchez/jenkins/plugins/kubernetes/pipeline/KubernetesPipelineTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,12 @@ public void invalidPodGetsCancelled() throws Exception {
701701
r.assertLogContains("Queue task was cancelled", b);
702702
}
703703

704+
@Test
705+
public void invalidImageGetsCancelled() throws Exception {
706+
r.assertBuildStatus(Result.ABORTED, r.waitForCompletion(b));
707+
r.assertLogContains("Queue task was cancelled", b);
708+
}
709+
704710
@Issue("SECURITY-1646")
705711
@Test
706712
public void substituteEnv() throws Exception {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
podTemplate(yaml: '''
2+
spec:
3+
containers:
4+
- name: jnlp
5+
image: some/invalid
6+
''') {
7+
node(POD_LABEL) {
8+
sh 'This will never run'
9+
}
10+
}

0 commit comments

Comments
 (0)