private List<Pipeline> resolvePipelines(WorkflowJob job) throws PipelineException { List<Pipeline> pipelines = new ArrayList<>(); if (job.getBuilds() == null) { return pipelines; } Iterator<WorkflowRun> it = job.getBuilds().iterator(); for (int i = 0; i < noOfPipelines && it.hasNext(); i++) { WorkflowRun build = it.next(); Pipeline pipeline = resolvePipeline(job, build); pipelines.add(pipeline); } return pipelines; }
public List<Run> getRunsFor(WorkflowJob job) { List<Run> runs = new ArrayList<>(); for (WorkflowRun run : job.getBuilds()) { runs.add(new Run(RunExt.create(run))); } return runs; }
@Override public void triggerManual(String projectName, String upstreamName, String buildId) throws AuthenticationException { LOG.fine("Manual/Input step called for project: " + projectName + " and build id: " + buildId); WorkflowJob workflowJob; try { workflowJob = ProjectUtil.getWorkflowJob(projectName, getOwnerItemGroup()); RunList<WorkflowRun> builds = workflowJob.getBuilds(); for (WorkflowRun run : builds) { if (Integer.toString(run.getNumber()).equals(buildId)) { InputAction inputAction = run.getAction(InputAction.class); if (inputAction != null && !inputAction.getExecutions().isEmpty()) { inputAction.getExecutions().get(0).doProceedEmpty(); } } } } catch (IOException | PipelineException e) { LOG.warning("Failed to resolve project to trigger manual/input: " + e); } }
@Override public void abortBuild(String projectName, String buildId) throws TriggerException { try { WorkflowJob workflowJob = ProjectUtil.getWorkflowJob(projectName, getOwnerItemGroup()); if (!workflowJob.hasAbortPermission()) { throw new BadCredentialsException("Not authorized to abort build"); } RunList<WorkflowRun> builds = workflowJob.getBuilds(); Optional<WorkflowRun> run = builds.stream() .filter(r -> Integer.toString(r.getNumber()).equals(buildId)) .findFirst(); run.ifPresent(WorkflowRun::doStop); } catch (PipelineException e) { throw new TriggerException("Could not abort build"); } }
@Override public boolean shouldClearAll(@Nonnull Run<?,?> build) { if (build instanceof WorkflowRun) { WorkflowRun r = (WorkflowRun)build; WorkflowJob j = r.getParent(); PreserveStashesJobProperty prop = j.getProperty(PreserveStashesJobProperty.class); if (prop != null) { int bc = prop.getBuildCount(); if (bc > 0) { for (WorkflowRun recentRun : j.getBuilds().completedOnly().limit(bc)) { if (recentRun != null && recentRun.equals(r)) { return false; } } } } } return true; } }
@Override public void onCompleted(Run<?,?> r, TaskListener listener) { if (r instanceof WorkflowRun) { WorkflowJob j = ((WorkflowRun) r).getParent(); PreserveStashesJobProperty prop = j.getProperty(PreserveStashesJobProperty.class); if (prop != null && prop.getBuildCount() > 0) { // The "+1" is to ensure that we look at one more than the maximum possible number of builds with saved stashes. for (WorkflowRun build : j.getBuilds().completedOnly().limit(MAX_SAVED_STASHES + 1)) { try { StashManager.maybeClearAll(build); } catch (IOException x) { LOGGER.log(Level.WARNING, "failed to clean up stashes from " + build, x); } } } } } }
RunList<WorkflowRun> builds = r.getParent().getBuilds(); assertEquals(builds.getLastBuild().getNumber(), 2);
/** * Trigger test. * @throws Exception if there is one. */ @Test public void testTriggerWorkflow() throws Exception { jenkinsRule.jenkins.setCrumbIssuer(null); MockGerritServer gerritServer = MockGerritServer.get(jenkinsRule); gerritServer.start(); try { PatchsetCreated event = Setup.createPatchsetCreated(gerritServer.getName()); WorkflowJob job = createWorkflowJob(event); PluginImpl.getHandler_().post(event); // Now wait for the Gerrit server to trigger the workflow build in Jenkins... TestUtils.waitForBuilds(job, 1); WorkflowRun run = job.getBuilds().iterator().next(); jenkinsRule.assertLogContains("Gerrit trigger: patchset-created", run); // Workflow build was triggered successfully. Now lets check make sure the // gerrit plugin sent a verified notification back to the Gerrit Server... JSONObject verifiedMessage = gerritServer.waitForNextVerified(); // System.out.println(gerritServer.lastContent); String message = verifiedMessage.getString("message"); Assert.assertTrue(message.startsWith("Build Successful")); Assert.assertTrue(message.contains("job/WFJob/1/")); JSONObject labels = verifiedMessage.getJSONObject("labels"); assertEquals(1, labels.getInt("Verified")); } finally { gerritServer.stop(); } }
WorkflowRun run = job.getBuilds().iterator().next(); jenkinsRule.assertLogContains("setGerritReview", run);
WorkflowRun run = job.getBuilds().iterator().next(); jenkinsRule.assertLogContains("setGerritReview", run);
WorkflowRun run = job.getBuilds().iterator().next(); jenkinsRule.assertLogContains("setGerritReview", run);
@SuppressWarnings("deprecation") // RunList.size @Test public void useBuildDiscarder() throws Exception { sampleRepo.init(); sampleRepo.write("Jenkinsfile", "properties([buildDiscarder(logRotator(numToKeepStr: '1'))])"); sampleRepo.git("add", "Jenkinsfile"); sampleRepo.git("commit", "--all", "--message=flow"); WorkflowMultiBranchProject mp = r.jenkins.createProject(WorkflowMultiBranchProject.class, "p"); mp.getSourcesList().add(new BranchSource(new GitSCMSource(null, sampleRepo.toString(), "", "*", "", false))); WorkflowJob p = scheduleAndFindBranchProject(mp, "master"); assertEquals(1, mp.getItems().size()); r.waitUntilNoActivity(); // #1 built automatically assertEquals(1, p.getBuilds().size()); r.assertBuildStatusSuccess(p.scheduleBuild2(0)); // #2 assertEquals(1, p.getBuilds().size()); r.assertBuildStatusSuccess(p.scheduleBuild2(0)); // #3 assertEquals(1, p.getBuilds().size()); WorkflowRun b3 = p.getLastBuild(); assertEquals(3, b3.getNumber()); assertNull(b3.getPreviousBuild()); }