throw new IllegalStateException(BUILD_SCHEDULING_REFUSED); Run<?,?> b = f.waitForStart(); // wait for the start stdout.println("Started "+b.getFullDisplayName()); stdout.flush();
/** * Gets the build going and waits for the workflow to be fully running */ public QueueTaskFuture<WorkflowRun> startBuilding() throws Exception { QueueTaskFuture<WorkflowRun> f = p.scheduleBuild2(0); b = f.waitForStart(); e = (CpsFlowExecution) b.getExecutionPromise().get(); return f; }
public static void waitFor(Queue.Item item) throws InterruptedException, ExecutionException { while (item != null && item.getFuture() == null) { Thread.sleep(200); } assertNotNull(item); item.getFuture().waitForStart(); }
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition("def x = new " + BadThing.class.getCanonicalName() + "(); semaphore 'wait'", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("wait/1", b); } });
protected WorkflowRun getAndStartNonRepoBuild(Folder folder, String pipelineScriptFile) throws Exception { WorkflowJob p = createWorkflowJob(folder); p.setDefinition(new CpsFlowDefinition(pipelineSourceFromResources(pipelineScriptFile), true)); return p.scheduleBuild2(0).waitForStart(); }
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.createProject(WorkflowJob.class, "stashWithLoadCount"); p.setDefinition(new CpsFlowDefinition(pipelineSourceFromResources("properties/stashWithLoadCount"), true)); // Build 10 times to make sure get 10 total builds. for (int i = 0; i < 10; i++) { story.j.waitForCompletion(p.scheduleBuild2(0).waitForStart()); } } });
@Override public void evaluate() throws Throwable { WorkflowJob p = rr.j.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition("pipeline {agent any; stages {stage('x') {steps {script {semaphore 'wait'}}}}}", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("wait/1", b); } });
@Override public void evaluate() throws Throwable { WorkflowJob p = rr.j.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition( "def map = [one: 1, two: 2]\n" + "@NonCPS def entrySet(m) {m.collect {k, v -> [key: k, value: v]}}; for (def e in entrySet(map)) {echo \"running flattened loop on ${e.key} -> ${e.value}\"; semaphore \"C-${e.key}\"}\n" + "for (def e : map.entrySet()) {echo \"running new-style loop on ${e.key} -> ${e.value}\"; semaphore \"new-${e.key}\"}" , true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("C-one/1", b); rr.j.waitForMessage("running flattened loop on one -> 1", b); } });
@Override public void evaluate() throws Throwable { WorkflowJob p = rr.j.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition( "def arr = []; arr += 'one'; arr += 'two'\n" + "for (int i = 0; i < arr.size(); i++) {def elt = arr[i]; echo \"running C-style loop on ${elt}\"; semaphore \"C-${elt}\"}\n" + "for (def elt : arr) {echo \"running new-style loop on ${elt}\"; semaphore \"new-${elt}\"}" , true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("C-one/1", b); rr.j.waitForMessage("running C-style loop on one", b); } });
@Override public void evaluate() throws Throwable { logger.record(CpsFlowExecution.TIMING_LOGGER, Level.FINE).capture(100); WorkflowJob p = story.j.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition("semaphore 'wait'", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("wait/1", b); } });
protected WorkflowRun getAndStartBuild(Folder folder) throws Exception { WorkflowJob p = createWorkflowJob(folder); p.setDefinition(new CpsScmFlowDefinition(new GitStep(sampleRepo.toString()).createSCM(), "Jenkinsfile")); return p.scheduleBuild2(0).waitForStart(); }
@Test public void load() throws Exception { j.jenkins.getWorkspaceFor(p).child("lib.groovy").write("def m() {semaphore 'here'}; this", null); p.setDefinition(new CpsFlowDefinition("def lib; node {lib = load 'lib.groovy'}; lib.m()", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("here/1", b); CpsThreadDump td = b.getAction(CpsThreadDumpAction.class).threadDumpSynchronous(); td.print(System.out); assertStackTrace(td.getThreads().get(0), "DSL.semaphore(waiting on here/1)", "Script1.m(Script1.groovy:1)", "WorkflowScript.run(WorkflowScript:1)"); }
@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); }
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition("semaphore 'wait'; echo 'I am done'", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("wait/1", b); story.j.jenkins.doQuietDown(true, 0); SemaphoreStep.success("wait/1", null); ((CpsFlowExecution) b.getExecution()).waitForSuspension(); assertTrue(b.isBuilding()); } });
@Test public void testBadNameDetection() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "bad_container_name"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("badcontainername.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatus(Result.FAILURE, r.waitForCompletion(b)); r.assertLogContains(Messages.RFC1123_error("badcontainerName_!"), b); }
@Test public void testBadNameYamlDetection() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "bad_container_name_yaml"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("badcontainernameyaml.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatus(Result.FAILURE, r.waitForCompletion(b)); r.assertLogContains(Messages.RFC1123_error("badcontainername_!, badcontainername2_!"), 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 testBadLabel() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "bad_label"); p.setDefinition(new CpsFlowDefinition(loadPipelineScript("badlabel.groovy"), true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertNotNull(b); r.assertBuildStatus(Result.FAILURE, r.waitForCompletion(b)); r.assertLogContains(Messages.label_error("mypod!123"), 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 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); }