private static Pipeline createPipelineInstance(PipelineConfig pipelineConfig, BuildCause cause, String approvedBy) { return new InstanceFactory().createPipelineInstance(pipelineConfig, cause, new DefaultSchedulingContext(approvedBy), "md5-test", new TimeProvider()); }
public Pipeline createPipeline(final BuildCause buildCause, final PipelineConfig pipelineConfig, final SchedulingContext context, final String md5, final Clock clock) { return (Pipeline) transactionTemplate.execute((TransactionCallback) status -> { Pipeline pipeline = null; if (shouldCancel(buildCause, pipelineConfig.name())) { LOGGER.debug("[Pipeline Schedule] Cancelling scheduling as build cause {} is the same as the most recent schedule", buildCause); cancelSchedule(pipelineConfig.name()); } else { try { Pipeline newPipeline = instanceFactory.createPipelineInstance(pipelineConfig, buildCause, context, md5, clock); pipeline = pipelineService.save(newPipeline); finishSchedule(pipelineConfig.name(), buildCause, pipeline.getBuildCause()); LOGGER.debug("[Pipeline Schedule] Successfully scheduled pipeline {}, buildCause:{}, configOrigin: {}", pipelineConfig.name(), buildCause, pipelineConfig.getOrigin()); } catch (BuildCauseOutOfDateException e) { cancelSchedule(pipelineConfig.name()); LOGGER.info("[Pipeline Schedule] Build cause {} is out of date. Scheduling is cancelled. Go will reschedule this pipeline. configOrigin: {}", buildCause, pipelineConfig.getOrigin()); } } return pipeline; }); }
@Test public void shouldSchedulePipelineWithFirstStage() { StageConfig stageOneConfig = StageConfigMother.stageConfig("dev", BuildPlanMother.withBuildPlans("functional", "unit")); StageConfig stageTwoConfig = StageConfigMother.stageConfig("qa", BuildPlanMother.withBuildPlans("suiteOne", "suiteTwo")); MaterialConfigs materialConfigs = MaterialConfigsMother.defaultMaterialConfigs(); PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("mingle"), materialConfigs, stageOneConfig, stageTwoConfig); BuildCause buildCause = BuildCause.createManualForced(modifyOneFile(pipelineConfig), Username.ANONYMOUS); Pipeline pipeline = instanceFactory.createPipelineInstance(pipelineConfig, buildCause, new DefaultSchedulingContext("test"), "some-md5", new TimeProvider()); assertThat(pipeline.getName(), is("mingle")); assertThat(pipeline.getStages().size(), is(1)); assertThat(pipeline.getStages().get(0).getName(), is("dev")); assertThat(pipeline.getStages().get(0).getJobInstances().get(0).getName(), is("functional")); }
@Test public void shouldCreatePipelineInstanceWithEnvironmentVariablesOverriddenAccordingToScope() { StageConfig stageConfig = StageConfigMother.custom("stage", "foo", "bar"); JobConfig fooConfig = stageConfig.jobConfigByConfigName(new CaseInsensitiveString("foo")); fooConfig.addVariable("foo", "foo"); JobConfig barConfig = stageConfig.jobConfigByConfigName(new CaseInsensitiveString("bar")); barConfig.addVariable("foo", "bar"); MaterialConfigs materialConfigs = MaterialConfigsMother.defaultMaterialConfigs(); PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("pipeline"), materialConfigs, stageConfig); DefaultSchedulingContext context = new DefaultSchedulingContext("anonymous"); Pipeline instance = instanceFactory.createPipelineInstance(pipelineConfig, ModificationsMother.forceBuild(pipelineConfig), context, "some-md5", new TimeProvider()); assertThat(instance.findStage("stage").findJob("foo").getPlan().getVariables(), is(new EnvironmentVariables(Arrays.asList(new EnvironmentVariable("foo", "foo"))))); assertThat(instance.findStage("stage").findJob("bar").getPlan().getVariables(), is(new EnvironmentVariables(Arrays.asList(new EnvironmentVariable("foo", "bar"))))); }
@Test public void shouldOverridePipelineEnvironmentVariablesFromBuildCauseForLabel() { StageConfig stageConfig = StageConfigMother.custom("stage", "foo", "bar"); MaterialConfigs materialConfigs = MaterialConfigsMother.defaultMaterialConfigs(); DefaultSchedulingContext context = new DefaultSchedulingContext("anonymous"); PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("pipeline"), materialConfigs, stageConfig); pipelineConfig.addEnvironmentVariable("VAR", "value"); pipelineConfig.setLabelTemplate("${ENV:VAR}"); BuildCause buildCause = ModificationsMother.forceBuild(pipelineConfig); EnvironmentVariables overriddenVars = buildCause.getVariables(); overriddenVars.add("VAR", "overriddenValue"); buildCause.setVariables(overriddenVars); Pipeline instance = instanceFactory.createPipelineInstance(pipelineConfig, buildCause, context, "some-md5", new TimeProvider()); instance.updateCounter(1); assertThat(instance.getLabel(), is("overriddenValue")); }