diff --git a/pom.xml b/pom.xml index ba5a496b3..e185411f6 100644 --- a/pom.xml +++ b/pom.xml @@ -137,11 +137,6 @@ - @@ -179,7 +174,7 @@ org.jenkins-ci.plugins token-macro - 1.8.1 + 1.9 org.jenkins-ci.plugins @@ -189,7 +184,7 @@ org.jenkins-ci.plugins parameterized-trigger - 2.17 + 2.21 diff --git a/src/main/java/se/diabol/jenkins/pipeline/DeliveryPipelineView.java b/src/main/java/se/diabol/jenkins/pipeline/DeliveryPipelineView.java index 7626a1c3a..19eb84840 100644 --- a/src/main/java/se/diabol/jenkins/pipeline/DeliveryPipelineView.java +++ b/src/main/java/se/diabol/jenkins/pipeline/DeliveryPipelineView.java @@ -192,12 +192,12 @@ public List getPipelines() { LOG.fine("Getting pipelines!"); List components = new ArrayList(); for (ComponentSpec componentSpec : componentSpecs) { - AbstractProject firstJob = ProjectUtil.getProject(componentSpec.getFirstJob()); + AbstractProject firstJob = ProjectUtil.getProject(componentSpec.getFirstJob(), getOwnerItemGroup()); Pipeline prototype = PipelineFactory.extractPipeline(componentSpec.getName(), firstJob); List pipelines = new ArrayList(); if (showAggregatedPipeline) - pipelines.add(PipelineFactory.createPipelineAggregated(prototype)); - pipelines.addAll(PipelineFactory.createPipelineLatest(prototype, noOfPipelines)); + pipelines.add(PipelineFactory.createPipelineAggregated(prototype, getOwnerItemGroup())); + pipelines.addAll(PipelineFactory.createPipelineLatest(prototype, noOfPipelines, getOwnerItemGroup())); components.add(new Component(componentSpec.getName(), pipelines)); } if (getSorting() != null && !getSorting().equals(NONE_SORTER)) { @@ -215,7 +215,7 @@ public Collection getItems() { List result = new ArrayList(); for (ComponentSpec componentSpec : componentSpecs) { - AbstractProject project = ProjectUtil.getProject(componentSpec.getFirstJob()); + AbstractProject project = ProjectUtil.getProject(componentSpec.getFirstJob(), getOwnerItemGroup()); Collection> projects = ProjectUtil.getAllDownstreamProjects(project).values(); for (AbstractProject abstractProject : projects) { result.add(getItem(abstractProject.getName())); diff --git a/src/main/java/se/diabol/jenkins/pipeline/PipelineFactory.java b/src/main/java/se/diabol/jenkins/pipeline/PipelineFactory.java index 750c61181..4a7ede0da 100644 --- a/src/main/java/se/diabol/jenkins/pipeline/PipelineFactory.java +++ b/src/main/java/se/diabol/jenkins/pipeline/PipelineFactory.java @@ -79,31 +79,31 @@ private static Task getPrototypeTask(AbstractProject project) { /** * Helper method * - * @see PipelineFactory#createPipelineLatest(se.diabol.jenkins.pipeline.model.Pipeline, int) + * @see PipelineFactory#createPipelineLatest(se.diabol.jenkins.pipeline.model.Pipeline, int, ItemGroup) */ - public static Pipeline createPipelineLatest(Pipeline pipeline) { - List pipelines = createPipelineLatest(pipeline, 1); + public static Pipeline createPipelineLatest(Pipeline pipeline, ItemGroup context) { + List pipelines = createPipelineLatest(pipeline, 1, context); return pipelines.size() > 0 ? pipelines.get(0) : null; } - public static Pipeline createPipelineAggregated(Pipeline pipeline) { + public static Pipeline createPipelineAggregated(Pipeline pipeline, ItemGroup context) { - AbstractProject firstProject = getProject(pipeline.getStages().get(0).getTasks().get(0)); + AbstractProject firstProject = getProject(pipeline.getStages().get(0).getTasks().get(0), context); List stages = new ArrayList(); for (Stage stage : pipeline.getStages()) { List tasks = new ArrayList(); //The version build for this stage is the highest first task build - AbstractBuild versionBuild = getHighestBuild(stage.getTasks(), firstProject); + AbstractBuild versionBuild = getHighestBuild(stage.getTasks(), firstProject, context); String version = null; if (versionBuild != null) { version = versionBuild.getDisplayName(); } for (Task task : stage.getTasks()) { - AbstractProject taskProject = getProject(task); + AbstractProject taskProject = getProject(task, context); AbstractBuild currentBuild = match(taskProject.getBuilds(), versionBuild); if (currentBuild != null) { @@ -120,10 +120,10 @@ public static Pipeline createPipelineAggregated(Pipeline pipeline) { return new Pipeline(pipeline.getName(), null, null, null, null, stages, true); } - private static AbstractBuild getHighestBuild(List tasks, AbstractProject firstProject) { + private static AbstractBuild getHighestBuild(List tasks, AbstractProject firstProject, ItemGroup context) { int highest = -1; for (Task task : tasks) { - AbstractProject project = getProject(task); + AbstractProject project = getProject(task, context); AbstractBuild firstBuild = getFirstUpstreamBuild(project, firstProject); if (firstBuild != null && firstBuild.getNumber() > highest) { highest = firstBuild.getNumber(); @@ -144,9 +144,9 @@ private static AbstractBuild getHighestBuild(List tasks, AbstractProject f * @param pipeline the pipeline prototype * @param noOfPipelines number of pipeline instances */ - public static List createPipelineLatest(Pipeline pipeline, int noOfPipelines) { + public static List createPipelineLatest(Pipeline pipeline, int noOfPipelines, ItemGroup context) { Task firstTask = pipeline.getStages().get(0).getTasks().get(0); - AbstractProject firstProject = getProject(firstTask); + AbstractProject firstProject = getProject(firstTask, context); List result = new ArrayList(); @@ -159,9 +159,9 @@ public static List createPipelineLatest(Pipeline pipeline, int noOfPip for (Stage stage : pipeline.getStages()) { List tasks = new ArrayList(); for (Task task : stage.getTasks()) { - AbstractProject taskProject = getProject(task); + AbstractProject taskProject = getProject(task, context); AbstractBuild currentBuild = match(taskProject.getBuilds(), firstBuild); - tasks.add(getTask(task, currentBuild)); + tasks.add(getTask(task, currentBuild, context)); } stages.add(new Stage(stage.getName(), tasks)); } @@ -194,8 +194,8 @@ protected static List getChanges(AbstractBuild build) { } - private static Task getTask(Task task, AbstractBuild build) { - AbstractProject project = getProject(task); + private static Task getTask(Task task, AbstractBuild build, ItemGroup context) { + AbstractProject project = getProject(task, context); Status status = resolveStatus(project, build); String link = build == null || status.isIdle() || status.isQueued() ? task.getLink() : build.getUrl(); String buildId = build == null || status.isIdle() || status.isQueued() ? null : String.valueOf(build.getNumber()); @@ -259,8 +259,8 @@ private static AbstractBuild match(RunList runList, Abs return null; } - private static AbstractProject getProject(Task task) { - return Jenkins.getInstance().getItem(task.getId(), Jenkins.getInstance().getItemGroup(), AbstractProject.class); + private static AbstractProject getProject(Task task, ItemGroup context) { + return ProjectUtil.getProject(task.getId(), context); } protected static Status resolveStatus(AbstractProject project, AbstractBuild build) { diff --git a/src/main/java/se/diabol/jenkins/pipeline/util/ProjectUtil.java b/src/main/java/se/diabol/jenkins/pipeline/util/ProjectUtil.java index 9fd1eec88..d0182da83 100644 --- a/src/main/java/se/diabol/jenkins/pipeline/util/ProjectUtil.java +++ b/src/main/java/se/diabol/jenkins/pipeline/util/ProjectUtil.java @@ -81,8 +81,8 @@ protected static List getSubProjects(AbstractProject project) { return result; } - public static AbstractProject getProject(String name) { - return Jenkins.getInstance().getItem(name, Jenkins.getInstance(), AbstractProject.class); + public static AbstractProject getProject(String name, ItemGroup context) { + return Jenkins.getInstance().getItem(name, context, AbstractProject.class); } diff --git a/src/test/java/se/diabol/jenkins/pipeline/DeliveryPipelineViewTest.java b/src/test/java/se/diabol/jenkins/pipeline/DeliveryPipelineViewTest.java index 1280c4f0b..2a47af183 100644 --- a/src/test/java/se/diabol/jenkins/pipeline/DeliveryPipelineViewTest.java +++ b/src/test/java/se/diabol/jenkins/pipeline/DeliveryPipelineViewTest.java @@ -25,6 +25,7 @@ import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.MockFolder; import org.jvnet.hudson.test.WithoutJenkins; import se.diabol.jenkins.pipeline.model.Component; import se.diabol.jenkins.pipeline.model.Pipeline; @@ -123,6 +124,37 @@ public void testGetItemsAndContains() throws Exception { } + @Test + public void testGetItemsAndContainsWithFolders() throws Exception { + MockFolder folder = jenkins.createFolder("folder"); + FreeStyleProject build = folder.createProject(FreeStyleProject.class, "build"); + FreeStyleProject sonar = folder.createProject(FreeStyleProject.class, "sonar"); + FreeStyleProject packaging = folder.createProject(FreeStyleProject.class,"packaging"); + + + //FreeStyleProject build = jenkins.createFreeStyleProject("build"); + //FreeStyleProject sonar = jenkins.createFreeStyleProject("sonar"); + build.getPublishersList().add(new BuildTrigger("sonar", false)); + build.getPublishersList().add(new BuildTrigger("packaging", false)); + + jenkins.getInstance().rebuildDependencyGraph(); + + + List specs = new ArrayList(); + specs.add(new DeliveryPipelineView.ComponentSpec("Comp", "build")); + DeliveryPipelineView view = new DeliveryPipelineView("name", specs); + folder.addView(view); + + assertTrue(view.contains(build)); + assertTrue(view.contains(sonar)); + assertTrue(view.contains(packaging)); + + Collection items = view.getItems(); + assertEquals(3, items.size()); + + } + + @Test public void testGetPipelines() throws Exception { FreeStyleProject build = jenkins.createFreeStyleProject("build"); diff --git a/src/test/java/se/diabol/jenkins/pipeline/PipelineFactoryTest.java b/src/test/java/se/diabol/jenkins/pipeline/PipelineFactoryTest.java index fe33110f5..3cb8f04ee 100644 --- a/src/test/java/se/diabol/jenkins/pipeline/PipelineFactoryTest.java +++ b/src/test/java/se/diabol/jenkins/pipeline/PipelineFactoryTest.java @@ -150,8 +150,8 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception { final Pipeline pipe1 = PipelineFactory.extractPipeline("pipe1", build1); final Pipeline pipe2 = PipelineFactory.extractPipeline("pipe2", build2); - Pipeline aggregated1 = PipelineFactory.createPipelineAggregated(pipe1); - Pipeline aggregated2 = PipelineFactory.createPipelineAggregated(pipe2); + Pipeline aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance()); + Pipeline aggregated2 = PipelineFactory.createPipelineAggregated(pipe2, jenkins.getInstance()); assertNull(aggregated1.getStages().get(0).getVersion()); assertNull(aggregated2.getStages().get(0).getVersion()); @@ -171,8 +171,8 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception { assertEquals(2, pipe2.getStages().size()); assertNotNull(sonar.getBuild("1")); - aggregated1 = PipelineFactory.createPipelineAggregated(pipe1); - aggregated2 = PipelineFactory.createPipelineAggregated(pipe2); + aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance()); + aggregated2 = PipelineFactory.createPipelineAggregated(pipe2, jenkins.getInstance()); assertEquals("#1", aggregated1.getStages().get(1).getVersion()); assertEquals("job/sonar1/1/", aggregated1.getStages().get(1).getTasks().get(0).getLink()); @@ -190,8 +190,8 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception { jenkins.buildAndAssertSuccess(build2); jenkins.waitUntilNoActivity(); - aggregated1 = PipelineFactory.createPipelineAggregated(pipe1); - aggregated2 = PipelineFactory.createPipelineAggregated(pipe2); + aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance()); + aggregated2 = PipelineFactory.createPipelineAggregated(pipe2, jenkins.getInstance()); assertEquals("#1", aggregated1.getStages().get(1).getVersion()); assertEquals("#1", aggregated2.getStages().get(1).getVersion()); @@ -203,8 +203,8 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception { jenkins.buildAndAssertSuccess(build1); jenkins.waitUntilNoActivity(); - aggregated1 = PipelineFactory.createPipelineAggregated(pipe1); - aggregated2 = PipelineFactory.createPipelineAggregated(pipe2); + aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance()); + aggregated2 = PipelineFactory.createPipelineAggregated(pipe2, jenkins.getInstance()); assertEquals("#2", aggregated1.getStages().get(1).getVersion()); @@ -229,7 +229,7 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception { BuildPipelineView view = new BuildPipelineView("", "", new DownstreamProjectGridBuilder("build1"), "1", false, null); view.triggerManualBuild(1, "prod", "test"); jenkins.waitUntilNoActivity(); - aggregated1 = PipelineFactory.createPipelineAggregated(pipe1); + aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance()); assertTrue(aggregated1.getStages().get(3).getTasks().get(0).getStatus().isSuccess()); assertEquals("#1", aggregated1.getStages().get(3).getVersion()); @@ -261,7 +261,7 @@ public void testAggregatedStageWithTwoManualTasks() throws Exception { assertNull(ci2.getLastBuild()); Pipeline pipeline = PipelineFactory.extractPipeline("test", build); - Pipeline aggregated = PipelineFactory.createPipelineAggregated(pipeline); + Pipeline aggregated = PipelineFactory.createPipelineAggregated(pipeline, jenkins.getInstance()); assertNotNull(aggregated); assertEquals("ci1", aggregated.getStages().get(1).getTasks().get(0).getName()); assertEquals("ci2", aggregated.getStages().get(1).getTasks().get(1).getName()); @@ -272,7 +272,7 @@ public void testAggregatedStageWithTwoManualTasks() throws Exception { jenkins.buildAndAssertSuccess(build); jenkins.waitUntilNoActivity(); - aggregated = PipelineFactory.createPipelineAggregated(pipeline); + aggregated = PipelineFactory.createPipelineAggregated(pipeline, jenkins.getInstance()); assertNotNull(aggregated); assertEquals("#2", build.getLastBuild().getDisplayName()); assertEquals("SUCCESS", aggregated.getStages().get(1).getTasks().get(0).getStatus().toString()); @@ -281,7 +281,7 @@ public void testAggregatedStageWithTwoManualTasks() throws Exception { view.triggerManualBuild(2, "ci2", "build"); jenkins.waitUntilNoActivity(); - aggregated = PipelineFactory.createPipelineAggregated(pipeline); + aggregated = PipelineFactory.createPipelineAggregated(pipeline, jenkins.getInstance()); assertNotNull(aggregated); assertEquals("IDLE", aggregated.getStages().get(1).getTasks().get(0).getStatus().toString()); assertEquals("SUCCESS", aggregated.getStages().get(1).getTasks().get(1).getStatus().toString()); @@ -318,7 +318,7 @@ public void testCreatePipelineLatest() throws Exception { jenkins.buildAndAssertSuccess(build); jenkins.waitUntilNoActivity(); - Pipeline latest = PipelineFactory.createPipelineLatest(pipeline); + Pipeline latest = PipelineFactory.createPipelineLatest(pipeline, jenkins.getInstance()); assertNotNull(latest); @@ -339,7 +339,7 @@ public void testPipelineLatestDownstreamIsDisabled() throws Exception { jenkins.buildAndAssertSuccess(build); jenkins.waitUntilNoActivity(); Pipeline pipeline = PipelineFactory.extractPipeline("Pipeline", build); - Pipeline latest = PipelineFactory.createPipelineLatest(pipeline); + Pipeline latest = PipelineFactory.createPipelineLatest(pipeline, jenkins.getInstance()); assertNotNull(latest); assertEquals(2, latest.getStages().size()); assertEquals("SUCCESS", latest.getStages().get(0).getTasks().get(0).getStatus().toString()); diff --git a/src/test/java/se/diabol/jenkins/pipeline/util/ProjectUtilTest.java b/src/test/java/se/diabol/jenkins/pipeline/util/ProjectUtilTest.java index 180ba9780..8696e033f 100644 --- a/src/test/java/se/diabol/jenkins/pipeline/util/ProjectUtilTest.java +++ b/src/test/java/se/diabol/jenkins/pipeline/util/ProjectUtilTest.java @@ -22,6 +22,8 @@ import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.MockFolder; +import org.mortbay.jetty.security.UserRealm; import se.diabol.jenkins.pipeline.PipelineProperty; import java.util.Set; @@ -36,8 +38,9 @@ public class ProjectUtilTest { @Test public void testGetStageNames() throws Exception { - FreeStyleProject build1 = jenkins.createFreeStyleProject("build1"); - FreeStyleProject build2 = jenkins.createFreeStyleProject("build2"); + MockFolder folder = jenkins.createFolder("folder"); + FreeStyleProject build1 = folder.createProject(FreeStyleProject.class, "build1"); + FreeStyleProject build2 = folder.createProject(FreeStyleProject.class, "build2"); Set stageNames = ProjectUtil.getStageNames(); assertNotNull(stageNames);