diff --git a/README.md b/README.md index c03a6a3ecb..6d07abb310 100644 --- a/README.md +++ b/README.md @@ -437,6 +437,14 @@ containerTemplate(name: 'busybox', image: 'busybox', command: 'sleep', args: '99 ``` See [Defining a liveness command](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#defining-a-liveness-command) for more details. +### Readiness Probe Usage +```groovy +containerTemplate(name: 'busybox', image: 'busybox', command: 'sleep', args: '99d', + readinessProbe: containerReadinessProbe(execArgs: 'some --command', initialDelaySeconds: 30, timeoutSeconds: 1, failureThreshold: 3, periodSeconds: 10, successThreshold: 1) +) +``` +See [Define readiness probes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes) for more details. + # Inheritance ## Overview diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe.java new file mode 100644 index 0000000000..71d99ec9af --- /dev/null +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe.java @@ -0,0 +1,100 @@ +package org.csanchez.jenkins.plugins.kubernetes; + +import hudson.Extension; +import hudson.model.AbstractDescribableImpl; +import hudson.model.Descriptor; +import org.jenkinsci.Symbol; +import org.kohsuke.stapler.DataBoundConstructor; + +import java.io.Serializable; + +/** + * Created by geanpalacios on 15/02/23. + */ +public class ContainerReadinessProbe extends AbstractDescribableImpl implements Serializable { + private String execArgs; + private int timeoutSeconds; + private int initialDelaySeconds; + private int failureThreshold; + private int periodSeconds; + private int successThreshold; + + @DataBoundConstructor + public ContainerReadinessProbe(String execArgs, int timeoutSeconds, int initialDelaySeconds, int failureThreshold, int periodSeconds, int successThreshold) { + this.execArgs = execArgs; + this.timeoutSeconds = timeoutSeconds; + this.initialDelaySeconds = initialDelaySeconds; + this.failureThreshold = failureThreshold; + this.periodSeconds = periodSeconds; + this.successThreshold = successThreshold; + } + + public String getExecArgs() { + return execArgs; + } + + public void setExecArgs(String execArgs) { + this.execArgs = execArgs; + } + + public int getTimeoutSeconds() { + return timeoutSeconds; + } + + public void setTimeoutSeconds(int timeoutSeconds) { + this.timeoutSeconds = timeoutSeconds; + } + + public int getInitialDelaySeconds() { + return initialDelaySeconds; + } + + public void setInitialDelaySeconds(int initialDelaySeconds) { + this.initialDelaySeconds = initialDelaySeconds; + } + + public int getFailureThreshold() { + return failureThreshold; + } + + public void setFailureThreshold(int failureThreshold) { + this.failureThreshold = failureThreshold; + } + + public int getPeriodSeconds() { + return periodSeconds; + } + + public void setPeriodSeconds(int periodSeconds) { + this.periodSeconds = periodSeconds; + } + + public int getSuccessThreshold() { + return successThreshold; + } + + public void setSuccessThreshold(int successThreshold) { + this.successThreshold = successThreshold; + } + + @Override + public String toString() { + return "ContainerReadinessProbe{" + + "execArgs='" + execArgs + '\'' + + ", timeoutSeconds=" + timeoutSeconds + + ", initialDelaySeconds=" + initialDelaySeconds + + ", failureThreshold=" + failureThreshold + + ", periodSeconds=" + periodSeconds + + ", successThreshold=" + successThreshold + + '}'; + } + + @Extension + @Symbol("containerReadinessProbe") + public static class DescriptorImpl extends Descriptor { + @Override + public String getDisplayName() { + return "Container Readiness Probe"; + } + } +} diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate.java index a34d5f6d9e..a11d047164 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate.java @@ -69,6 +69,7 @@ public class ContainerTemplate extends AbstractDescribableImpl ports = new ArrayList<>(); private ContainerLivenessProbe livenessProbe; + private ContainerReadinessProbe readinessProbe; @Deprecated public ContainerTemplate(String image) { @@ -111,6 +112,7 @@ public ContainerTemplate(ContainerTemplate from) { this.setEnvVars(from.getEnvVars()); this.setPorts(from.getPorts()); this.setLivenessProbe(from.getLivenessProbe()); + this.setReadinessProbe(from.getReadinessProbe()); } public void setName(String name) { @@ -229,6 +231,14 @@ public void setEnvVars(List envVars) { public void setLivenessProbe(ContainerLivenessProbe livenessProbe) { this.livenessProbe = livenessProbe; } + + public ContainerReadinessProbe getReadinessProbe() { return readinessProbe; } + + @DataBoundSetter + public void setReadinessProbe(ContainerReadinessProbe readinessProbe) { + this.readinessProbe = readinessProbe; + } + public List getPorts() { return ports != null ? ports : Collections.emptyList(); @@ -375,6 +385,7 @@ public String toString() { (envVars == null || envVars.isEmpty() ? "" : ", envVars=" + envVars) + (ports == null || ports.isEmpty() ? "" : ", ports=" + ports) + (livenessProbe == null ? "" : ", livenessProbe=" + livenessProbe) + + (readinessProbe == null ? "" : ", readinessProbe=" + readinessProbe) + '}'; } @@ -446,7 +457,10 @@ public boolean equals(Object o) { if (!Objects.equals(ports, that.ports)) { return false; } - return Objects.equals(livenessProbe, that.livenessProbe); + if (!Objects.equals(livenessProbe, that.livenessProbe)) { + return false; + } + return Objects.equals(readinessProbe, that.readinessProbe); } @Override @@ -471,6 +485,7 @@ public int hashCode() { result = 31 * result + (envVars != null ? envVars.hashCode() : 0); result = 31 * result + (ports != null ? ports.hashCode() : 0); result = 31 * result + (livenessProbe != null ? livenessProbe.hashCode() : 0); + result = 31 * result + (readinessProbe != null ? readinessProbe.hashCode() : 0); return result; } diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilder.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilder.java index 8e79419536..9b88d6058b 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilder.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilder.java @@ -487,6 +487,19 @@ private Container createContainer(ContainerTemplate containerTemplate, Collectio .build(); } + ContainerReadinessProbe crp = containerTemplate.getReadinessProbe(); + Probe readinessProbe = null; + if (crp != null && parseReadinessProbe(crp.getExecArgs()) != null) { + readinessProbe = new ProbeBuilder() + .withExec(new ExecAction(parseReadinessProbe(crp.getExecArgs()))) + .withInitialDelaySeconds(crp.getInitialDelaySeconds()) + .withTimeoutSeconds(crp.getTimeoutSeconds()) + .withFailureThreshold(crp.getFailureThreshold()) + .withPeriodSeconds(crp.getPeriodSeconds()) + .withSuccessThreshold(crp.getSuccessThreshold()) + .build(); + } + ContainerBuilder containerBuilder = new ContainerBuilder() .withName(substituteEnv(containerTemplate.getName())) .withImage(substituteEnv(containerTemplate.getImage())) @@ -506,6 +519,7 @@ private Container createContainer(ContainerTemplate containerTemplate, Collectio .withCommand(parseDockerCommand(containerTemplate.getCommand())) .withArgs(arguments) .withLivenessProbe(livenessProbe) + .withReadinessProbe(readinessProbe) .withTty(containerTemplate.isTtyEnabled()) .withNewResources() .withRequests(getResourcesMap(containerTemplate.getResourceRequestMemory(), containerTemplate.getResourceRequestCpu(),containerTemplate.getResourceRequestEphemeralStorage())) @@ -571,6 +585,26 @@ static List parseLivenessProbe(String livenessProbeExec) { return commands; } + /** + * Split a command in the parts that ReadinessProbe needs + * + * @param readinessProbeExec + * @return + */ + @Restricted(NoExternalUse.class) + static List parseReadinessProbe(String readinessProbeExec) { + if (StringUtils.isBlank(readinessProbeExec)) { + return null; + } + // handle quoted arguments + Matcher m = SPLIT_IN_SPACES.matcher(readinessProbeExec); + List commands = new ArrayList(); + while (m.find()) { + commands.add(substituteEnv(m.group(1).replace("\"", "").replace("?:\\\"", ""))); + } + return commands; + } + private Map getResourcesMap(String memory, String cpu, String ephemeralStorage) { Map builder = new HashMap<>(); String actualMemory = substituteEnv(memory); diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateUtils.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateUtils.java index bad5748c6b..a9fa3b3e75 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateUtils.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateUtils.java @@ -109,6 +109,7 @@ public static ContainerTemplate combine(@CheckForNull ContainerTemplate parent, .collect(Collectors.toMap(PortMapping::getName, Function.identity())); template.getPorts().stream().forEach(p -> ports.put(p.getName(), p)); ContainerLivenessProbe livenessProbe = template.getLivenessProbe() != null ? template.getLivenessProbe() : parent.getLivenessProbe(); + ContainerReadinessProbe readinessProbe = template.getReadinessProbe() != null ? template.getReadinessProbe() : parent.getReadinessProbe(); ContainerTemplate combined = new ContainerTemplate(image); combined.setName(name); @@ -131,6 +132,7 @@ public static ContainerTemplate combine(@CheckForNull ContainerTemplate parent, combined.setEnvVars(combineEnvVars(parent, template)); combined.setPorts(new ArrayList<>(ports.values())); combined.setLivenessProbe(livenessProbe); + combined.setReadinessProbe(readinessProbe); return combined; } diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/config.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/config.jelly new file mode 100644 index 0000000000..52ce867369 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/config.jelly @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/config_zh_CN.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/config_zh_CN.properties new file mode 100644 index 0000000000..f88d26902e --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/config_zh_CN.properties @@ -0,0 +1,28 @@ +# The MIT License +# +# Copyright (c) 2018, Alauda +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Exec\ action= +Initial\ Delay\ Seconds= +Timeout\ Seconds= +Failure\ Threshold= +Period\ Seconds= +Success\ Threshold= diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-execArgs.html b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-execArgs.html new file mode 100644 index 0000000000..a4510f3c11 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-execArgs.html @@ -0,0 +1 @@ +Command executed by the readiness probe. diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-failureThreshold.html b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-failureThreshold.html new file mode 100644 index 0000000000..79fe0783c0 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-failureThreshold.html @@ -0,0 +1,5 @@ +

+ When a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up.
+ Giving up in case of liveness probe means restarting the container.
+ In case of readiness probe the Pod will be marked Unready. Defaults to 3. Minimum value is 1. +

diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-initialDelaySeconds.html b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-initialDelaySeconds.html new file mode 100644 index 0000000000..04958b3a23 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-initialDelaySeconds.html @@ -0,0 +1 @@ +Number of seconds after the container has started before liveness or readiness probes are initiated. Defaults to 0 seconds. Minimum value is 0. diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-periodSeconds.html b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-periodSeconds.html new file mode 100644 index 0000000000..ec42d0a935 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-periodSeconds.html @@ -0,0 +1,3 @@ +

+ How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. +

diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-successThreshold.html b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-successThreshold.html new file mode 100644 index 0000000000..57035a2919 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-successThreshold.html @@ -0,0 +1 @@ +Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Minimum value is 1. diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-timeoutSeconds.html b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-timeoutSeconds.html new file mode 100644 index 0000000000..9910930063 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerReadinessProbe/help-timeoutSeconds.html @@ -0,0 +1 @@ +Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate/config.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate/config.jelly index 92d1080626..c1fd849079 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate/config.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate/config.jelly @@ -83,6 +83,15 @@ + + + + + + + + + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate/config_zh_CN.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate/config_zh_CN.properties index 32d471f7c6..81e7ab4ef8 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate/config_zh_CN.properties +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplate/config_zh_CN.properties @@ -36,6 +36,7 @@ Request\ Memory=\u5185\u5B58\u9700\u6C42 Limit\ CPU=CPU \u9650\u5236 Limit\ Memory=\u5185\u5B58\u9650\u5236 Liveness\ Probe=\u5065\u5EB7\u68C0\u67E5 +Readiness\ Probe=\u5c31\u7eea\u6001\u68c0\u67e5 Port\ Mappings=\u7AEF\u53E3\u6620\u5C04 List\ of\ exposed\ ports=\u66B4\u9732\u7684\u7AEF\u53E3\u5217\u8868 Add\ Port\ Mapping=\u6DFB\u52A0\u7AEF\u53E3\u6620\u5C04 diff --git a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplateTest.java b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplateTest.java index 409091c8e0..ef8162d17e 100644 --- a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplateTest.java +++ b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/ContainerTemplateTest.java @@ -40,6 +40,7 @@ public void testCopyConstructorCreatesEqualInstance() { originalTemplate.setEnvVars(Collections.emptyList()); originalTemplate.setPorts(Collections.emptyList()); originalTemplate.setLivenessProbe(new ContainerLivenessProbe("test", 1, 2, 3, 4, 5)); + originalTemplate.setReadinessProbe(new ContainerReadinessProbe("test", 1, 2, 3, 4, 5)); ContainerTemplate clonedTemplate = new ContainerTemplate(originalTemplate); diff --git a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilderTest.java b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilderTest.java index 47d93e3a0e..8b3845b543 100644 --- a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilderTest.java +++ b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateBuilderTest.java @@ -121,6 +121,19 @@ public void testParseLivenessProbe() { parseLivenessProbe("curl -k --silent --output=/dev/null \"https://localhost:8080\"")); } + @WithoutJenkins + @Test + public void testParseReadinessProbe() { + assertNull(parseReadinessProbe("")); + assertNull(parseReadinessProbe(null)); + assertEquals(Collections.unmodifiableList(Arrays.asList("docker", "info")), parseReadinessProbe("docker info")); + assertEquals(Collections.unmodifiableList(Arrays.asList("echo", "I said: 'I am ready'")), + parseReadinessProbe("echo \"I said: 'I am ready'\"")); + assertEquals(Collections.unmodifiableList(Arrays.asList("docker", "--version")), parseReadinessProbe("docker --version")); + assertEquals(Collections.unmodifiableList(Arrays.asList("curl", "-k", "--silent", "--output=/dev/null", "https://localhost:8080")), + parseReadinessProbe("curl -k --silent --output=/dev/null \"https://localhost:8080\"")); + } + @Test @TestCaseName("{method}(directConnection={0})") @Parameters({ "true", "false" }) diff --git a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/casc/CasCTest.java b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/casc/CasCTest.java index 944b63faf9..f16c7b2ea2 100644 --- a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/casc/CasCTest.java +++ b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/casc/CasCTest.java @@ -2,6 +2,7 @@ import io.jenkins.plugins.casc.misc.RoundTripAbstractTest; import org.csanchez.jenkins.plugins.kubernetes.ContainerLivenessProbe; +import org.csanchez.jenkins.plugins.kubernetes.ContainerReadinessProbe; import org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate; import org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud; import org.csanchez.jenkins.plugins.kubernetes.PodTemplate; diff --git a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/pipeline/KubernetesPipelineTest.java b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/pipeline/KubernetesPipelineTest.java index c6720ef05d..49e562b866 100644 --- a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/pipeline/KubernetesPipelineTest.java +++ b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/pipeline/KubernetesPipelineTest.java @@ -423,6 +423,12 @@ public void runInPodWithLivenessProbe() throws Exception { r.assertLogContains("Still alive", b); } + @Test + public void runInPodWithReadinessProbe() throws Exception { + r.assertBuildStatusSuccess(r.waitForCompletion(b)); + r.assertLogContains("Still ready", b); + } + @Test public void podTemplateWithMultipleLabels() throws Exception { PodTemplate pt = new PodTemplate(); diff --git a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesRestartTest/upgradeFrom_1_27_1/config.xml b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesRestartTest/upgradeFrom_1_27_1/config.xml index 2b8553292b..c2338a0340 100644 --- a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesRestartTest/upgradeFrom_1_27_1/config.xml +++ b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesRestartTest/upgradeFrom_1_27_1/config.xml @@ -81,6 +81,14 @@ 0 0 + + + 0 + 0 + 0 + 0 + 0 + busybox @@ -105,6 +113,14 @@ 0 0 + + + 0 + 0 + 0 + 0 + 0 + diff --git a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_0_12/config.xml b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_0_12/config.xml index 87a9d279f1..d7a71e87bc 100644 --- a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_0_12/config.xml +++ b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_0_12/config.xml @@ -81,6 +81,14 @@ 0 0 + + + 0 + 0 + 0 + 0 + 0 + diff --git a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_10/config.xml b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_10/config.xml index a72a4744e3..0edf6eca51 100644 --- a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_10/config.xml +++ b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_10/config.xml @@ -84,6 +84,14 @@ 0 0 + + + 0 + 0 + 0 + 0 + 0 + diff --git a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_1/config.xml b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_1/config.xml index 69e3eb8d9c..796a811096 100644 --- a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_1/config.xml +++ b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_1/config.xml @@ -81,6 +81,14 @@ 0 0 + + + 0 + 0 + 0 + 0 + 0 + diff --git a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_9/config.xml b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_9/config.xml index 93338636b1..80d881f702 100644 --- a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_9/config.xml +++ b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_9/config.xml @@ -81,6 +81,14 @@ 0 0 + + + 0 + 0 + 0 + 0 + 0 + diff --git a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_9_invalid/config.xml b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_9_invalid/config.xml index ea2180b9d0..b416d47f36 100644 --- a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_9_invalid/config.xml +++ b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_15_9_invalid/config.xml @@ -81,6 +81,14 @@ 0 0 + + + 0 + 0 + 0 + 0 + 0 + diff --git a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_17_2/config.xml b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_17_2/config.xml index fa616d4762..e5cc111e83 100644 --- a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_17_2/config.xml +++ b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesTest/upgradeFrom_1_17_2/config.xml @@ -81,6 +81,14 @@ 0 0 + + + 0 + 0 + 0 + 0 + 0 + busybox @@ -105,6 +113,14 @@ 0 0 + + + 0 + 0 + 0 + 0 + 0 + diff --git a/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/pipeline/runInPodWithReadinessProbe.groovy b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/pipeline/runInPodWithReadinessProbe.groovy new file mode 100644 index 0000000000..11842cc6cc --- /dev/null +++ b/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/pipeline/runInPodWithReadinessProbe.groovy @@ -0,0 +1,12 @@ +podTemplate(volumes: [emptyDirVolume(mountPath: '/my-mount')], containers: [ + containerTemplate(name: 'busybox', image: 'busybox', ttyEnabled: true, command: 'cat', readinessProbe: containerReadinessProbe( execArgs: 'uname -a', initialDelaySeconds: 5, timeoutSeconds: 1, failureThreshold: 3, periodSeconds: 10, successThreshold: 1)) +]) { + + node(POD_LABEL) { + stage('Wait for Readiness Probe') { + container('busybox') { + sh 'sleep 6 && echo "Still ready"' + } + } + } +}