private StageNotificationDTO.StageDTO createStageDTO() { ArrayList<StageNotificationDTO.JobDTO> jobs = new ArrayList<>(); for (JobInstance job : stage.getJobInstances()) { StageNotificationDTO.JobDTO jobDTO = new StageNotificationDTO.JobDTO(job.getName(), job.getScheduledDate(), job.getCompletedDate(), job.getState(), job.getResult(), job.getAgentUuid()); jobs.add(jobDTO); } return new StageNotificationDTO.StageDTO(stage.getName(), stage.getCounter(), stage.getApprovalType(), stage.getApprovedBy(), stage.getState(), stage.getResult(), stage.getCreatedTime(), stage.getLastTransitionedTime(), jobs); }
public static void toJSON(OutputWriter jsonWriter, Stage stage) { jsonWriter.add("id", stage.getId()); jsonWriter.add("name", stage.getName()); jsonWriter.add("counter", stage.getCounter()); jsonWriter.add("approval_type", stage.getApprovalType()); jsonWriter.add("approved_by", stage.getApprovedBy()); if (stage.getResult() != null) { jsonWriter.add("result", stage.getResult().toString()); if (stage.getResult() == StageResult.Cancelled) { jsonWriter.add("cancelled_by", stage.getCancelledBy() == null? "GoCD" : stage.getCancelledBy()); if (stage.getRerunOfCounter() == null) { jsonWriter.add("rerun_of_counter", (String) null); jsonWriter.add("rerun_of_counter", stage.getRerunOfCounter()); jsonWriter.add("fetch_materials", stage.shouldFetchMaterials()); jsonWriter.add("clean_working_directory", stage.shouldCleanWorkingDir()); jsonWriter.add("artifacts_deleted", stage.isArtifactsDeleted()); if (stage.getIdentifier() != null) { jsonWriter.add("pipeline_name", stage.getIdentifier().getPipelineName()); jsonWriter.add("pipeline_counter", stage.getIdentifier().getPipelineCounter()); jsonWriter.addChildList("jobs", jobsWriter -> stage.getJobInstances().forEach( jobInstance -> jobsWriter.addChild( jobInstanceWriter -> JobInstanceRepresenter.toJSON(jobInstanceWriter, jobInstance))));
public StageHistoryEntry(Stage firstStage, double naturalOrder, final Integer rerunOfCounter) { this(); this.id = firstStage.getId(); this.identifier = firstStage.getIdentifier(); this.state = firstStage.getState(); this.naturalOrder = naturalOrder; this.rerunOfCounter = rerunOfCounter; this.configVersion = firstStage.getConfigVersion(); }
private void persistJobs(Stage stage) { for (JobInstance job : stage.getJobInstances()) { jobInstanceService.save(stage.getIdentifier(), stage.getId(), job); } }
private boolean isStageStateScheduledOrCompleted(Stage stage) { return stage.isScheduled() || stage.isReRun() || stage.getState().completed(); } }
public static StageInstanceModel toStageInstanceModel(Stage stage) { StageInstanceModel stageInstanceModel = new StageInstanceModel(stage.getName(), String.valueOf(stage.getCounter()), stage.getResult(), stage.getIdentifier()); stageInstanceModel.setApprovalType(stage.getApprovalType()); stageInstanceModel.setApprovedBy(stage.getApprovedBy()); stageInstanceModel.setRerunOfCounter(stage.getRerunOfCounter()); JobHistory jobHistory = new JobHistory(); for (JobInstance jobInstance : stage.getJobInstances()) { jobHistory.addJob(jobInstance.getName(), jobInstance.getState(), jobInstance.getResult(), jobInstance.getScheduledDate()); } stageInstanceModel.setBuildHistory(jobHistory); return stageInstanceModel; }
public Document toXml(XmlWriterContext writerContext) { DOMElement root = new DOMElement("stage"); root.addAttribute("name", stage.getName()).addAttribute("counter", String.valueOf(stage.getCounter())); Document document = new DOMDocument(root); root.addElement("link").addAttribute("rel", "self").addAttribute("href", httpUrl(writerContext.getBaseUrl())); StageIdentifier stageId = stage.getIdentifier(); root.addElement("id").addCDATA(stageId.asURN()); String pipelineName = stageId.getPipelineName(); root.addElement("pipeline").addAttribute("name", pipelineName) .addAttribute("counter", String.valueOf(stageId.getPipelineCounter())) .addAttribute("label", stageId.getPipelineLabel()) .addAttribute("href", writerContext.getBaseUrl() + "/api/pipelines/" + pipelineName + "/" + stage.getPipelineId() + ".xml"); root.addElement("updated").addText(DateUtils.formatISO8601(stage.latestTransitionDate())); root.addElement("result").addText(stage.getResult().toString()); root.addElement("state").addText(stage.status()); root.addElement("approvedBy").addCDATA(stage.getApprovedBy()); Element jobs = root.addElement("jobs"); for (JobInstance jobInstance : stage.getJobInstances()) { jobs.addElement("job").addAttribute("href", writerContext.getBaseUrl() + "/api/jobs/" + jobInstance.getId() + ".xml"); } return document; }
private synchronized Stage persistStage(Pipeline pipeline, Stage stage) { long pipelineId = pipeline.getId(); stage.setOrderId(resolveStageOrder(pipelineId, stage.getName())); Stage savedStage = stageDao.save(pipeline, stage); savedStage.setIdentifier(new StageIdentifier(pipeline.getName(), pipeline.getCounter(), pipeline.getLabel(), stage.getName(), String.valueOf(stage.getCounter()))); for (JobInstance jobInstance : savedStage.getJobInstances()) { jobInstance.setIdentifier(new JobIdentifier(pipeline, savedStage, jobInstance)); } return savedStage; }
@Override public void afterCommit() { JobInstances jobInstances = stage.getJobInstances(); boolean noJobIsAssigned = jobInstances.stream().noneMatch(JobInstance::isAssignedToAgent); if (noJobIsAssigned) { stageStatusTopic.post(new StageStatusMessage(stage.getIdentifier(), stage.stageState(), stage.getResult(), SessionUtils.currentUsername())); } } });
private Pipeline createPipeline() throws Exception { Pipeline pipeline = PipelineMother.pipelineWithAllTypesOfMaterials("pipeline-name", "stage-name", "job-name", "1"); List<MaterialRevision> materialRevisions = pipeline.getMaterialRevisions().getRevisions(); PackageDefinition packageDefinition = ((PackageMaterial) materialRevisions.get(6).getMaterial()).getPackageDefinition(); packageDefinition.getRepository().getConfiguration().get(1).handleSecureValueConfiguration(true); packageDefinition.getConfiguration().addNewConfigurationWithValue("k4", "package-v2", false); packageDefinition.getConfiguration().get(1).handleSecureValueConfiguration(true); SCM scm = ((PluggableSCMMaterial) materialRevisions.get(7).getMaterial()).getScmConfig(); scm.getConfiguration().get(1).handleSecureValueConfiguration(true); Stage stage = pipeline.getFirstStage(); stage.setId(1L); stage.setPipelineId(1L); stage.setCreatedTime(new Timestamp(getFixedDate().getTime())); stage.setLastTransitionedTime(new Timestamp(getFixedDate().getTime())); JobInstance job = stage.getJobInstances().get(0); job.setScheduledDate(getFixedDate()); job.getTransition(JobState.Completed).setStateChangeTime(getFixedDate()); return pipeline; } }
@Test public void should_MaintainRerunOfReferences_InCaseOfMultipleCopyForRerunOperations() { Date old = new DateTime().minusDays(2).toDate(); JobInstance rails = jobInstance(old, "rails", 7, 10); JobInstance java = jobInstance(old, "java", 12, 22); Stage stage = stage(9, rails, java); stage.setCounter(2); Stage newStage = instanceFactory.createStageForRerunOfJobs(stage, a("rails"), new DefaultSchedulingContext("loser", new Agents()), StageConfigMother.custom("dev", "rails", "java"), new TimeProvider(), "md5"); newStage.setCounter(3); assertThat(newStage.getId(), is(-1l)); assertThat(newStage.getJobInstances().size(), is(2)); assertThat(newStage.isLatestRun(), is(true)); assertThat(newStage.getRerunOfCounter(), is(2)); JobInstance newJava = newStage.getJobInstances().getByName("java"); assertCopiedJob(newJava, 12l); //set id, to assert if original ends up pointing to copied job's id newJava.setId(18l); newStage = instanceFactory.createStageForRerunOfJobs(newStage, a("rails"), new DefaultSchedulingContext("loser", new Agents()), StageConfigMother.custom("dev", "rails", "java"), new TimeProvider(), "md5"); newStage.setCounter(4); assertThat(newStage.getId(), is(-1l)); assertThat(newStage.getJobInstances().size(), is(2)); assertThat(newStage.isLatestRun(), is(true)); assertThat(newStage.getRerunOfCounter(), is(2)); newJava = newStage.getJobInstances().getByName("java"); assertCopiedJob(newJava, 12l); }
@Deprecated // This is only used in test for legacy purpose. // Please call pipelineService.save(aPipeline) instead public Stage saveWithJobs(Pipeline pipeline, Stage stage) { if (stage.getState() == null) { stage.building(); } stage = save(pipeline, stage); clearCachedStage(new StageIdentifier(pipeline, stage));//This is bad because it should be done in after-commit, but this is test-ONLY-code, so ignore! JobInstances jobInstances = stage.getJobInstances(); for (JobInstance job : jobInstances) { buildInstanceDao.save(stage.getId(), job); } for (JobInstance jobInstance : jobInstances) { jobInstance.setIdentifier(new JobIdentifier(pipeline, stage, jobInstance)); } return stage; }
public void stageStatusChanged(Stage stage) { if (StageResult.Passed == stage.getResult()) { Material material = dependencyMaterials.get(stageIdentifier(stage.getIdentifier().getPipelineName(), stage.getName())); if (material != null) { updateMaterial(material); } } }
public void setCounter(int counter) { this.counter = counter; if (getIdentifier() != null) { getIdentifier().setStageCounter(String.valueOf(counter)); } }
public void stageStatusChanged(Stage stage) { String pipelineName = stage.getIdentifier().getPipelineName(); String stageName = stage.getName(); removeFromCache(cacheKeyForMostRecentId(pipelineName, stageName)); removeFromCache(cacheKeyForPipelineAndStage(pipelineName, stageName)); removeFromCache(cacheKeyForPipelineAndCounter(pipelineName, stage.getIdentifier().getPipelineCounter())); removeFromCache(cacheKeyForStageById(stage.getId())); removeFromCache(cacheKeyForLatestStageInstances()); }
public JobInstances getJobs() { return stage.getJobInstances(); }
public static Stage scheduledStage(String pipelineName, int pipelineCounter, String stageName, int stageCounter, String buildName) { StageConfig stageConfig = StageConfigMother.oneBuildPlanWithResourcesAndMaterials(stageName, buildName); Stage stage = scheduleInstance(stageConfig); stage.setCounter(stageCounter); stage.setIdentifier(new StageIdentifier(pipelineName, pipelineCounter, "LABEL-" + pipelineCounter, stageName, "" + stageCounter)); stage.setId(fakeId()); for (JobInstance jobInstance : stage.getJobInstances()) { jobInstance.setIdentifier(new JobIdentifier(pipelineName, pipelineCounter, "LABEL-" + pipelineCounter, stageName, "" + stageCounter, buildName, fakeId())); } return stage; }
public boolean hasStage(String stageName) { for (Stage stage : this) { if (stage.getName().equalsIgnoreCase(stageName)) { return true; } } return false; }
@Override public StageNotificationData notificationDataFor(Stage stage) { String pipelineName = stage.getIdentifier().getPipelineName(); String pipelineGroup = goConfigService.findGroupNameByPipeline(new CaseInsensitiveString(pipelineName)); BuildCause buildCause = pipelineSqlMapDao.findBuildCauseOfPipelineByNameAndCounter(pipelineName, stage.getIdentifier().getPipelineCounter()); if (goConfigService.hasPreviousStage(pipelineName, stage.getName())) { stage.setPreviousStage(previousStage(stage)); } return new StageNotificationData(stage, buildCause, pipelineGroup); } }
public static Stage stageWithNBuildsHavingEndState(JobState endState, JobResult result, String stageName, List<String> buildNames) { JobInstances builds = new JobInstances(); for (String buildName : buildNames) { builds.add(JobInstanceMother.buildEndingWithState(endState, result, buildName)); } Stage stage = new Stage(stageName, builds, DEFAULT_APPROVED_BY, null, null, new TimeProvider()); stage.calculateResult(); stage.setCompletedByTransitionId(stage.getJobInstances().last().getTransitions().latestTransitionId()); return stage; }