private List<PluggableTask> pluggableTask(PipelineConfig config) { List<PluggableTask> tasks = new ArrayList<>(); for (StageConfig stageConfig : config.getStages()) { for (JobConfig jobConfig : stageConfig.getJobs()) { for (Task task : jobConfig.getTasks()) { if (task instanceof PluggableTask) { tasks.add((PluggableTask) task); } } } } return tasks; }
private void cachePublishAndFetchExternalConfig() { externalArtifactConfigs = new ArrayList<>(); fetchExternalArtifactTasks = new ArrayList<>(); for (StageConfig stageConfig : getStages()) { for (JobConfig jobConfig : stageConfig.getJobs()) { externalArtifactConfigs.addAll(jobConfig.artifactConfigs().getPluggableArtifactConfigs()); for (Task task : jobConfig.getTasks()) { if (task instanceof FetchPluggableArtifactTask) { fetchExternalArtifactTasks.add((FetchPluggableArtifactTask) task); } } } } }
public static void toJSONArray(OutputListWriter stagesWriter, PipelineConfig pipelineConfig) { pipelineConfig.getStages().forEach(stage -> { stagesWriter.addChild(stageWriter -> toJSON(stageWriter, stage)); }); }
public static void toJSONArray(OutputListWriter stagesWriter, PipelineConfig pipelineConfig) { pipelineConfig.getStages().forEach(stage -> { stagesWriter.addChild(stageWriter -> toJSON(stageWriter, stage)); }); }
private static void writeStages(OutputWriter jsonWriter, PipelineConfig pipelineConfig) { if (pipelineConfig.getStages().isEmpty()) { jsonWriter.renderNull("stages"); } else { jsonWriter.addChildList("stages", stagesWriter -> StageRepresenter.toJSONArray(stagesWriter, pipelineConfig)); } }
private static void setStages(JsonReader jsonReader, PipelineConfig pipelineConfig) { pipelineConfig.getStages().clear(); jsonReader.readArrayIfPresent("stages", stages -> { stages.forEach(stage -> { pipelineConfig.addStageWithoutValidityAssertion(StageRepresenter.fromJSON(new JsonReader(stage.getAsJsonObject()))); }); }); } }
public Map<String, Map> artifactIdToPluginIdForFetchPluggableArtifact(String stagePatent, String currentPipelineName, String currentStageName) { final List<PipelineConfig> pipelineConfigs = stagePatent.equals("templates") ? getAllPipelineConfigs() : pipelinesForFetchArtifacts(currentPipelineName); Map<String, Map> allArtifacts = new HashMap<>(); pipelineConfigs.forEach(pipelineConfig -> { final String pipelineName = pipelineConfig.getName().toString(); final HashMap<String, Map> artifactsInPipeline = new HashMap<>(); allArtifacts.put(pipelineName, artifactsInPipeline); final boolean isCurrentPipeline = pipelineName.equalsIgnoreCase(currentPipelineName); final List<StageConfig> stageConfigs = isCurrentPipeline ? pipelineConfig.allStagesBefore(new CaseInsensitiveString(currentStageName)) : pipelineConfig.getStages(); stageConfigs.forEach(stageConfig -> { final String stageName = stageConfig.name().toString(); artifactsInPipeline.put(stageName, new HashMap<String, Map>()); stageConfig.getJobs().forEach(jobConfig -> { artifactsInPipeline.get(stageName).put(jobConfig.name().toString(), jobConfig.artifactConfigs().getPluggableArtifactConfigs().stream().collect(toMap(PluggableArtifactConfig::getId, c -> { final ArtifactStore artifactStore = artifactStores().find(c.getStoreId()); return artifactStore == null ? null : artifactStore.getPluginId(); }))); }); }); }); return allArtifacts; }
public void encryptSecureProperties(CruiseConfig preprocessedConfig, PipelineConfig preprocessedPipelineConfig) { if (hasTemplate() || doesNotHavePublishAndFetchExternalConfig()) { return; } for (StageConfig stageConfig : getStages()) { stageConfig.encryptSecureProperties(preprocessedConfig, preprocessedPipelineConfig, preprocessedPipelineConfig.getStage(stageConfig.name())); } }
private void validatePartsOfPipelineConfig(PipelineConfig pipelineConfig, PipelineConfigSaveValidationContext contextForStages) { for (StageConfig stageConfig : pipelineConfig.getStages()) { PipelineConfigSaveValidationContext contextForChildren = contextForStages.withParent(stageConfig); validateStageApprovalAuthorization(stageConfig, contextForChildren); for (JobConfig jobConfig : stageConfig.getJobs()) { PipelineConfigSaveValidationContext contextForJobChildren = contextForChildren.withParent(jobConfig); validateFetchTasks(jobConfig, contextForJobChildren); validateElasticProfileId(jobConfig, contextForJobChildren); validatePluggableArtifactConfig(jobConfig, contextForJobChildren); } } }
final PipelineConfig stages = pipelineConfig.getStages();
private void validateFetchTasksForOtherPipelines(PipelineConfigSaveValidationContext validationContext, PipelineConfig downstreamPipeline) { for (StageConfig stageConfig : downstreamPipeline.getStages()) { for (JobConfig jobConfig : stageConfig.getJobs()) { for (Task task : jobConfig.getTasks()) { if (task instanceof FetchTask) { FetchTask fetchTask = (FetchTask) task; if (fetchTask.getPipelineNamePathFromAncestor() != null && !StringUtils.isBlank(CaseInsensitiveString.str(fetchTask.getPipelineNamePathFromAncestor().getPath())) && fetchTask.getPipelineNamePathFromAncestor().pathIncludingAncestor().contains(pipelineConfig.name())) { fetchTask = new Cloner().deepClone(fetchTask); fetchTask.validateTask(validationContext.withParent(downstreamPipeline).withParent(stageConfig).withParent(jobConfig)); List<String> allErrors = fetchTask.errors().getAll(); for (String error : allErrors) { pipelineConfig.errors().add("base", error); } } } } } } }
@Test public void shouldValidateTreeForAllTasks() { AntTask antTask = antTask("build.xml", "compile", "/abc"); ExecTask execTask = new ExecTask("foo", new Arguments(new Argument("arg"))); Tasks tasks = new Tasks(antTask, execTask); String pipelineName = "p1"; PipelineConfig pipelineConfig = GoConfigMother.configWithPipelines(pipelineName).pipelineConfigByName(new CaseInsensitiveString(pipelineName)); StageConfig stageConfig = pipelineConfig.getStages().get(0); JobConfig jobConfig = stageConfig.getJobs().get(0); jobConfig.setTasks(tasks); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, "group", pipelineConfig, stageConfig, jobConfig); assertFalse(tasks.validateTree(context)); assertThat(tasks.errors().isEmpty(), is(true)); assertThat(antTask.errors().isEmpty(), is(false)); assertThat(antTask.errors().get(AntTask.WORKING_DIRECTORY).size(), is(1)); assertThat(antTask.errors().get(AntTask.WORKING_DIRECTORY).contains("Task of job 'job' in stage 'stage' of pipeline 'p1' has path '/abc' which is outside the working directory."), is(true)); assertThat(execTask.errors().get(ExecTask.ARG_LIST_STRING).size(), is(1)); assertThat(execTask.errors().get(ExecTask.ARG_LIST_STRING).contains("Can not use both 'args' attribute and 'arg' sub element in 'exec' element!"), is(true)); assertThat(execTask.errors().get(ExecTask.ARGS).size(), is(1)); assertThat(execTask.errors().get(ExecTask.ARGS).contains("Can not use both 'args' attribute and 'arg' sub element in 'exec' element!"), is(true)); }
@Test public void shouldValidateTree(){ String pipelineName = "p1"; PipelineConfig pipelineConfig = GoConfigMother.configWithPipelines(pipelineName).pipelineConfigByName(new CaseInsensitiveString(pipelineName)); StageConfig stageConfig = pipelineConfig.getStages().get(0); JobConfig jobConfig = stageConfig.getJobs().get(0); AbstractTask execTask = new ExecTask("ls", "-la", "42"); AntTask antTask = new AntTask(); antTask.setWorkingDirectory("/abc"); execTask.setCancelTask(antTask); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, "group", pipelineConfig, stageConfig, jobConfig); assertThat(execTask.validateTree(context), is(false)); assertThat(antTask.errors().isEmpty(), is(false)); assertThat(antTask.errors().get(AntTask.WORKING_DIRECTORY).size(), is(1)); assertThat(antTask.errors().get(AntTask.WORKING_DIRECTORY).contains("Task of job 'job' in stage 'stage' of pipeline 'p1' has path '/abc' which is outside the working directory."), is(true)); }
@Test public void shouldValidateAndUpdatePipelineConfig() { PipelineConfig pipeline = new PipelineConfig(); pipeline.setName("validPipeline"); pipeline.setMaterialConfigs(new MaterialConfigs(MaterialConfigsMother.gitMaterialConfig(), MaterialConfigsMother.svnMaterialConfig())); StageConfig stage1 = getStageConfig("stage1", "s1j1"); StageConfig stage2 = getStageConfig("stage2", "s2j1"); pipeline.getStages().add(stage1); pipeline.getStages().add(stage2); BasicCruiseConfig cruiseConfig = new BasicCruiseConfig(new BasicPipelineConfigs("group", new Authorization(), pipeline)); boolean isValid = pipeline.validateTree(PipelineConfigSaveValidationContext.forChain(true, cruiseConfig.getGroups().first().getGroup(), cruiseConfig, pipeline)); assertThat(isValid, is(true)); assertThat(pipeline.materialConfigs().errors().isEmpty(), is(true)); assertThat(pipeline.materialConfigs().get(0).errors().isEmpty(), is(true)); assertThat(pipeline.materialConfigs().get(1).errors().isEmpty(), is(true)); assertThat(pipeline.errors().getAll().isEmpty(), is(true)); }
PipelineConfigSaveValidationContext contextForChildren = validationContext.withParent(pipelineConfig); for (StageConfig stageConfig : pipelineConfig.getStages()) { isValid = stageConfig.validateTree(contextForChildren) && isValid; if (pipelineConfig.hasTemplateApplied()) {
@Test public void shouldValidateTree() { PipelineConfig pipeline = new PipelineConfig(); pipeline.setName("pipeline"); pipeline.addEnvironmentVariable("", ""); pipeline.addParam(new ParamConfig("", "")); pipeline.setMaterialConfigs(new MaterialConfigs(MaterialConfigsMother.gitMaterialConfig(), MaterialConfigsMother.svnMaterialConfig())); StageConfig stage1 = getStageConfig("stage1", "s1j1"); StageConfig stage2 = getStageConfig("stage2", "s2j1"); pipeline.getStages().add(stage1); pipeline.getStages().add(stage2); BasicCruiseConfig cruiseConfig = new BasicCruiseConfig(new BasicPipelineConfigs("group", new Authorization(), pipeline)); boolean isValid = pipeline.validateTree(PipelineConfigSaveValidationContext.forChain(true, cruiseConfig.getGroups().first().getGroup(), cruiseConfig, pipeline)); assertThat(isValid, is(false)); assertThat(pipeline.getVariables().get(0).errors().firstError(), is("Environment Variable cannot have an empty name for pipeline 'pipeline'.")); assertThat(pipeline.getParams().get(0).errors().firstError(), is("Parameter cannot have an empty name for pipeline 'pipeline'.")); assertThat(pipeline.materialConfigs().errors().isEmpty(), is(true)); assertThat(pipeline.materialConfigs().get(0).errors().isEmpty(), is(true)); assertThat(pipeline.materialConfigs().get(1).errors().isEmpty(), is(true)); assertThat(pipeline.errors().getAll().isEmpty(), is(true)); }
copy(from.getTrackingTool(), to.getTrackingTool()); copy(from.getTimer(), to.getTimer()); for (StageConfig toStage : to.getStages()) { StageConfig fromStage = from.findBy(toStage.name()); copy(fromStage, toStage);
CRPipeline pipelineConfigToCRPipeline(PipelineConfig pipelineConfig, String groupName) { CRPipeline crPipeline = new CRPipeline(); crPipeline.setGroupName(groupName); crPipeline.setName(pipelineConfig.name().toString()); for(StageConfig stage: pipelineConfig.getStages()) { crPipeline.addStage(stageToCRStage(stage)); } for (ParamConfig param: pipelineConfig.getParams()) { crPipeline.addParameter(paramToCRParam(param)); } for (MaterialConfig material: pipelineConfig.materialConfigs()) { crPipeline.addMaterial(materialToCRMaterial(material)); } for (EnvironmentVariableConfig envVar: pipelineConfig.getVariables()) { crPipeline.addEnvironmentVariable(environmentVariableConfigToCREnvironmentVariable(envVar)); } if (pipelineConfig.getTemplateName() != null) crPipeline.setTemplate(pipelineConfig.getTemplateName().toString()); crPipeline.setTrackingTool(trackingToolToCRTrackingTool(pipelineConfig.getTrackingTool())); crPipeline.setTimer(timerConfigToCRTimer(pipelineConfig.getTimer())); crPipeline.setLock_behavior(pipelineConfig.getLockBehavior()); if (pipelineConfig.getMingleConfig().isDefined()) { crPipeline.setMingle(mingleToCRMingle(pipelineConfig.getMingleConfig())); } crPipeline.setLabelTemplate(pipelineConfig.getLabelTemplate()); return crPipeline; }