@Test public void runWithExistingEnvVariables() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runInPodWithExistingTemplate.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); assertEnvVars(r, b); }
@Test public void runWithActiveDeadlineSeconds() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "Deadline"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runWithActiveDeadlineSeconds.groovy") , true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.waitForMessage("podTemplate", b); PodTemplate deadlineTemplate = cloud.getAllTemplates().stream().filter(x -> x.getLabel() == "deadline").findAny().orElse(null); assertNotNull(deadlineTemplate); assertEquals(10, deadlineTemplate.getActiveDeadlineSeconds()); r.assertLogNotContains("Hello from container!", b); }
p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runInPod.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); while ((template = podTemplateWithLabel("mypod", templates)) == null) { LOGGER.log(Level.INFO, "Waiting for mypod template to be created"); templates = cloud.getAllTemplates();
@Test public void runInPodFromYaml() throws Exception { deletePods(cloud.connect(), getLabels(cloud, this), false); WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runInPodFromYaml.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); List<PodTemplate> templates = cloud.getTemplates(); while (templates.isEmpty()) { LOGGER.log(Level.INFO, "Waiting for template to be created"); templates = cloud.getTemplates(); Thread.sleep(1000); } assertFalse(templates.isEmpty()); PodTemplate template = templates.get(0); assertEquals(Integer.MAX_VALUE, template.getInstanceCap()); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains("script file contents: ", b); assertFalse("There are pods leftover after test execution, see previous logs", deletePods(cloud.connect(), getLabels(cloud, this), true)); }
public void runInPodWithDifferentShell() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runInPodWithDifferentShell.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatus(Result.FAILURE,r.waitForCompletion(b)); r.assertLogContains("/bin/bash: no such file or directory", b); }
@Test public void runWithEnvVariables() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "runWithEnvVariables"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runWithEnvVars.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); assertEnvVars(r, b); r.assertLogContains("OUTSIDE_CONTAINER_BUILD_NUMBER = 1\n", b); r.assertLogContains("INSIDE_CONTAINER_BUILD_NUMBER = 1\n", b); r.assertLogContains("OUTSIDE_CONTAINER_JOB_NAME = runWithEnvVariables\n", b); r.assertLogContains("INSIDE_CONTAINER_JOB_NAME = runWithEnvVariables\n", b); // check that we are getting the correct java home r.assertLogContains("INSIDE_JAVA_HOME =\n", b); r.assertLogContains("JNLP_JAVA_HOME = /usr/lib/jvm/java-1.8-openjdk\n", b); r.assertLogContains("JAVA7_HOME = /usr/lib/jvm/java-1.7-openjdk/jre\n", b); r.assertLogContains("JAVA8_HOME = /usr/lib/jvm/java-1.8-openjdk/jre\n", b); // check that we are not filtering too much r.assertLogContains("INSIDE_JAVA_HOME_X = java-home-x\n", b); r.assertLogContains("OUTSIDE_JAVA_HOME_X = java-home-x\n", b); r.assertLogContains("JNLP_JAVA_HOME_X = java-home-x\n", b); r.assertLogContains("JAVA7_HOME_X = java-home-x\n", b); r.assertLogContains("JAVA8_HOME_X = java-home-x\n", b); }
@Test public void runInPodWithLivenessProbe() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "pod with liveness probe"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runInPodWithLivenessProbe.groovy") , true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains("Still alive", b); }
@Test public void runJobWithSpaces() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p with spaces"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runJobWithSpaces.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains("pwd is -/home/jenkins/workspace/p with spaces-", b); }
@Test public void runInPodWithExistingTemplate() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runInPodWithExistingTemplate.groovy") , true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains("outside container", b); r.assertLogContains("inside container", b); }
@Test public void supportComputerEnvVars() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("buildPropertyVars.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains("OPENJDK_BUILD_NUMBER: 1\n", b); r.assertLogContains("JNLP_BUILD_NUMBER: 1\n", b); r.assertLogContains("DEFAULT_BUILD_NUMBER: 1\n", b); }
@Test public void runDirContext() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "job with dir"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runDirContext.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); String workspace = "/home/jenkins/workspace/job with dir"; r.assertLogContains("initpwd is -" + workspace + "-", b); r.assertLogContains("dirpwd is -" + workspace + "/hz-", b); r.assertLogContains("postpwd is -" + workspace + "-", b); }
@Test public void runWithOverriddenEnvVariables() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runWithOverriddenEnvVars.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains("OUTSIDE_CONTAINER_HOME_ENV_VAR = /home/jenkins\n", b); r.assertLogContains("INSIDE_CONTAINER_HOME_ENV_VAR = /root\n",b); r.assertLogContains("OUTSIDE_CONTAINER_POD_ENV_VAR = " + POD_ENV_VAR_VALUE + "\n", b); r.assertLogContains("INSIDE_CONTAINER_POD_ENV_VAR = " + CONTAINER_ENV_VAR_VALUE + "\n",b); }
@Test public void runInPodNested() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runInPodNested.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains("[maven] maven:3.3.9-jdk-8-alpine", b); r.assertLogContains("[golang] golang:1.6.3-alpine", b); r.assertLogContains("Apache Maven 3.3.9", b); r.assertLogContains("go version go1.6.3", b); }
@Test public void runInPodWithMultipleContainers() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runInPodWithMultipleContainers.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains("[jnlp] jenkins/jnlp-slave:3.10-1-alpine", b); r.assertLogContains("[maven] maven:3.3.9-jdk-8-alpine", b); r.assertLogContains("[golang] golang:1.6.3-alpine", b); r.assertLogContains("My Kubernetes Pipeline", b); r.assertLogContains("my-mount", b); r.assertLogContains("Apache Maven 3.3.9", b); }
@Test /** * Step namespace should have priority over anything else. */ public void runWithStepOverriddenNamespace() throws Exception { String overriddenNamespace = testingNamespace + "-overridden-namespace"; String stepNamespace = testingNamespace + "-overridden-namespace2"; KubernetesClient client = cloud.connect(); // Run in our own testing namespace if (client.namespaces().withName(stepNamespace).get() == null) { client.namespaces().createOrReplace( new NamespaceBuilder().withNewMetadata().withName(stepNamespace).endMetadata().build()); } WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "stepOverriddenNamespace"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runWithStepOverriddenNamespace.groovy") .replace("OVERRIDDEN_NAMESPACE", stepNamespace), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); NamespaceAction.push(b, overriddenNamespace); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains(stepNamespace, b); }
@Test public void runWithOverriddenNamespace() throws Exception { String overriddenNamespace = testingNamespace + "-overridden-namespace"; KubernetesClient client = cloud.connect(); // Run in our own testing namespace if (client.namespaces().withName(overriddenNamespace).get() == null) { client.namespaces().createOrReplace( new NamespaceBuilder().withNewMetadata().withName(overriddenNamespace).endMetadata().build()); } WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "overriddenNamespace"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runWithOverriddenNamespace.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); NamespaceAction.push(b, overriddenNamespace); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains(overriddenNamespace, b); }
@Test public void runWithEnvVariablesInContext() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("runWithEnvVarsFromContext.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatusSuccess(r.waitForCompletion(b)); r.assertLogContains("The initial value of POD_ENV_VAR is pod-env-var-value", b); r.assertLogContains("The value of POD_ENV_VAR outside container is /bin/mvn:pod-env-var-value", b); r.assertLogContains("The value of FROM_ENV_DEFINITION is ABC", b); r.assertLogContains("The value of FROM_WITHENV_DEFINITION is DEF", b); r.assertLogContains("The value of WITH_QUOTE is \"WITH_QUOTE", b); r.assertLogContains("The value of AFTER_QUOTE is AFTER_QUOTE\"", b); r.assertLogContains("The value of ESCAPED_QUOTE is \\\"ESCAPED_QUOTE", b); r.assertLogContains("The value of AFTER_ESCAPED_QUOTE is AFTER_ESCAPED_QUOTE\\\"", b); r.assertLogContains("The value of SINGLE_QUOTE is BEFORE'AFTER", b); r.assertLogContains("The value of WITH_NEWLINE is before newline\nafter newline", b); r.assertLogContains("The value of POD_ENV_VAR is /bin/mvn:pod-env-var-value", b); r.assertLogContains("The value of WILL.NOT is ", b); }