Skip to content

Commit

Permalink
JENKINS-20588 find downstream projects on "Trigger/call builds on oth…
Browse files Browse the repository at this point in the history
…er projects"
  • Loading branch information
patbos committed Nov 15, 2013
1 parent 2c1ae65 commit 4124b40
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 6 deletions.
6 changes: 6 additions & 0 deletions pom.xml
Expand Up @@ -186,6 +186,12 @@
<artifactId>jquery</artifactId>
<version>1.7.2-1</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>parameterized-trigger</artifactId>
<version>2.17</version>
</dependency>

</dependencies>

</project>
27 changes: 21 additions & 6 deletions src/main/java/se/diabol/jenkins/pipeline/util/ProjectUtil.java
Expand Up @@ -17,16 +17,16 @@
*/
package se.diabol.jenkins.pipeline.util;

import hudson.Util;
import hudson.model.AbstractProject;
import hudson.model.ItemGroup;
import hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig;
import hudson.plugins.parameterizedtrigger.SubProjectsAction;
import hudson.util.ListBoxModel;
import jenkins.model.Jenkins;
import se.diabol.jenkins.pipeline.PipelineProperty;

import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;

import static com.google.common.collect.Maps.newLinkedHashMap;

Expand Down Expand Up @@ -62,8 +62,23 @@ public static Set<String> getStageNames() {
return projects;
}

public static List<AbstractProject> getDownstreamProjects(AbstractProject<?,?> project) {
return project.getDownstreamProjects();
public static List<AbstractProject> getDownstreamProjects(AbstractProject<?, ?> project) {
List<AbstractProject> result = new ArrayList<AbstractProject>();
result.addAll(getSubProjects(project));
result.addAll(project.getDownstreamProjects());
return result;
}

protected static List<AbstractProject> getSubProjects(AbstractProject project) {
List<AbstractProject> result = new ArrayList<AbstractProject>();
for (SubProjectsAction action : Util.filter(project.getActions(), SubProjectsAction.class)) {
for (BlockableBuildTriggerConfig config : action.getConfigs()) {
for (AbstractProject subProject : config.getProjectList(project.getParent(), null)) {
result.add(subProject);
}
}
}
return result;
}

public static AbstractProject<?, ?> getProject(String name) {
Expand Down
23 changes: 23 additions & 0 deletions src/test/java/se/diabol/jenkins/pipeline/PipelineFactoryTest.java
Expand Up @@ -22,6 +22,9 @@
import au.com.centrumsystems.hudson.plugin.buildpipeline.trigger.BuildPipelineTrigger;
import hudson.Launcher;
import hudson.model.*;
import hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig;
import hudson.plugins.parameterizedtrigger.BlockingBehaviour;
import hudson.plugins.parameterizedtrigger.TriggerBuilder;
import hudson.tasks.BuildTrigger;
import hudson.tasks.test.AggregatedTestResultAction;
import hudson.util.OneShotEvent;
Expand Down Expand Up @@ -105,8 +108,28 @@ public void testExtractSimpleForkJoinPipeline() throws Exception {
assertEquals(3, pipeline.getStages().size());
assertEquals(1, pipeline.getStages().get(2).getTasks().size());
assertEquals("deploy3", pipeline.getStages().get(2).getTasks().get(0).getName());
}

@Test
public void testExtractPipelineWithSubProjects() throws Exception {
FreeStyleProject build = jenkins.createFreeStyleProject("build");
build.addProperty(new PipelineProperty("Build", "Build"));
FreeStyleProject sonar = jenkins.createFreeStyleProject("sonar");
sonar.addProperty(new PipelineProperty("Sonar", "Build"));

FreeStyleProject deploy = jenkins.createFreeStyleProject("deploy");
deploy.addProperty(new PipelineProperty("Deploy", "QA"));


build.getBuildersList().add(new TriggerBuilder(new BlockableBuildTriggerConfig("sonar", new BlockingBehaviour("never", "never", "never"), null)));
build.getPublishersList().add(new BuildTrigger("deploy", false));

jenkins.getInstance().rebuildDependencyGraph();

Pipeline pipeline = PipelineFactory.extractPipeline("Pipeline", build);
assertEquals(2, pipeline.getStages().size());
assertEquals(2, pipeline.getStages().get(0).getTasks().size());
assertEquals(1, pipeline.getStages().get(1).getTasks().size());

}

Expand Down

0 comments on commit 4124b40

Please sign in to comment.