|
32 | 32 | import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
33 | 33 | import hudson.Functions;
|
34 | 34 | import hudson.model.Descriptor;
|
| 35 | +import hudson.model.Run; |
35 | 36 | import hudson.model.TaskListener;
|
36 | 37 | import hudson.slaves.ComputerLauncher;
|
37 | 38 | import hudson.slaves.JNLPLauncher;
|
|
54 | 55 | import java.util.stream.Collectors;
|
55 | 56 | import jenkins.metrics.api.Metrics;
|
56 | 57 | import org.apache.commons.lang.StringUtils;
|
| 58 | +import org.csanchez.jenkins.plugins.kubernetes.pod.decorator.PodDecoratorException; |
57 | 59 | import org.csanchez.jenkins.plugins.kubernetes.pod.retention.Reaper;
|
58 | 60 | import org.kohsuke.stapler.DataBoundConstructor;
|
59 | 61 |
|
@@ -117,7 +119,20 @@ public synchronized void launch(SlaveComputer computer, TaskListener listener) {
|
117 | 119 | PodTemplate template = node.getTemplate();
|
118 | 120 | KubernetesCloud cloud = node.getKubernetesCloud();
|
119 | 121 | KubernetesClient client = cloud.connect();
|
120 |
| - Pod pod = template.build(node); |
| 122 | + Pod pod; |
| 123 | + try { |
| 124 | + pod = template.build(node); |
| 125 | + } catch (PodDecoratorException e) { |
| 126 | + Run<?, ?> run = template.getRun(); |
| 127 | + if (run != null) { |
| 128 | + template.getListener().getLogger().println("Failed to build pod definition : " + e.getMessage()); |
| 129 | + PodUtils.cancelQueueItemFor(run.getUrl(), template.getLabel(), e.getMessage(), null); |
| 130 | + } |
| 131 | + e.printStackTrace(listener.fatalError("Failed to build pod definition")); |
| 132 | + setProblem(e); |
| 133 | + terminateOrLog(node); |
| 134 | + return; |
| 135 | + } |
121 | 136 | node.assignPod(pod);
|
122 | 137 |
|
123 | 138 | String podName = pod.getMetadata().getName();
|
@@ -305,15 +320,19 @@ public synchronized void launch(SlaveComputer computer, TaskListener listener) {
|
305 | 320 | String.format("Error in provisioning; agent=%s, template=%s", node, node.getTemplateId()),
|
306 | 321 | ex);
|
307 | 322 | LOGGER.log(Level.FINER, "Removing Jenkins node: {0}", node.getNodeName());
|
308 |
| - try { |
309 |
| - node.terminate(); |
310 |
| - } catch (IOException | InterruptedException e) { |
311 |
| - LOGGER.log(Level.WARNING, "Unable to remove Jenkins node", e); |
312 |
| - } |
| 323 | + terminateOrLog(node); |
313 | 324 | throw new RuntimeException(ex);
|
314 | 325 | }
|
315 | 326 | }
|
316 | 327 |
|
| 328 | + private static void terminateOrLog(KubernetesSlave node) { |
| 329 | + try { |
| 330 | + node.terminate(); |
| 331 | + } catch (IOException | InterruptedException e) { |
| 332 | + LOGGER.log(Level.WARNING, "Unable to remove Jenkins node", e); |
| 333 | + } |
| 334 | + } |
| 335 | + |
317 | 336 | private void checkTerminatedContainers(
|
318 | 337 | List<ContainerStatus> terminatedContainers,
|
319 | 338 | String podId,
|
|
0 commit comments