Skip to content

Commit

Permalink
[JENKINS-29894] Fix incompatibility and update demo
Browse files Browse the repository at this point in the history
  • Loading branch information
Vlatombe committed Aug 17, 2015
1 parent 60b7ee4 commit fce5c45
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 7 deletions.
7 changes: 4 additions & 3 deletions demo/JENKINS_HOME/jobs/flow/config.xml
Expand Up @@ -9,15 +9,16 @@
git url: 'https://github.com/jenkinsci/parallel-test-executor-plugin-sample'
archive 'pom.xml, src/'
}
def splits = splitTests([$class: 'CountDrivenParallelism', size: 5])
def splits = splitTests(parallelism: [$class: 'CountDrivenParallelism', size: 5], generateInclusions: true)
def branches = [:]
for (int i = 0; i < splits.size(); i++) {
def exclusions = splits.get(i);
def split = splits.get(i);
branches["split${i}"] = {
node('standard') {
sh 'rm -rf *'
unarchive mapping: ['pom.xml' : '.', 'src/' : '.']
writeFile file: 'exclusions.txt', text: exclusions.join("\n")
writeFile file: (split.includes ? 'inclusions.txt' : 'exclusions.txt'), text: split.list.join("\n")
writeFile file: (split.includes ? 'exclusions.txt' : 'inclusions.txt'), text: ''
sh 'mvn -B clean test -Dmaven.test.failure.ignore'
step([$class: 'JUnitResultArchiver', testResults: 'target/surefire-reports/*.xml'])
}
Expand Down
1 change: 1 addition & 0 deletions demo/JENKINS_HOME/jobs/main/config.xml
Expand Up @@ -17,6 +17,7 @@
<size>5</size>
</parallelism>
<testJob>sub</testJob>
<includesPatternFile>inclusions.txt</includesPatternFile>
<patternFile>exclusions.txt</patternFile>
<testReportFiles>**/target/surefire-reports/</testReportFiles>
<doNotArchiveTestResults>false</doNotArchiveTestResults>
Expand Down
6 changes: 6 additions & 0 deletions pom.xml
Expand Up @@ -37,6 +37,12 @@
<artifactId>workflow-step-api</artifactId>
<version>${workflow.version}</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>script-security</artifactId>
<version>1.13</version>
<optional>true</optional>
</dependency>
<dependency> <!-- For ease of demonstrating parallel-test-executor-plugin-sample -->
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>git</artifactId>
Expand Down
@@ -1,16 +1,21 @@
package org.jenkinsci.plugins.parallel_test_executor;

import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
* A list of file name patterns to include or exclude
*/
public class InclusionExclusionPattern {
public class InclusionExclusionPattern implements Serializable {
@Whitelisted
public boolean isIncludes() {
return includes;
}

@Whitelisted
public List<String> getList() {
return Collections.unmodifiableList(list);
}
Expand All @@ -22,4 +27,12 @@ public InclusionExclusionPattern(List<String> list, boolean includes) {
this.list = list;
this.includes = includes;
}

@Override
public String toString() {
return "InclusionExclusionPattern{" +
"includes=" + includes +
", list=" + list +
'}';
}
}
Expand Up @@ -4,12 +4,18 @@
import hudson.Extension;
import hudson.model.Run;
import hudson.model.TaskListener;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.jenkinsci.plugins.workflow.steps.AbstractStepDescriptorImpl;
import org.jenkinsci.plugins.workflow.steps.AbstractStepImpl;
import org.jenkinsci.plugins.workflow.steps.AbstractSynchronousStepExecution;
import org.jenkinsci.plugins.workflow.steps.Step;
import org.jenkinsci.plugins.workflow.steps.StepContextParameter;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;

/**
* Allows the splitting logic to be accessed from a workflow.
Expand All @@ -18,6 +24,8 @@ public final class SplitStep extends AbstractStepImpl {

private final Parallelism parallelism;

private boolean generateInclusions;

@DataBoundConstructor public SplitStep(Parallelism parallelism) {
this.parallelism = parallelism;
}
Expand All @@ -26,6 +34,13 @@ public Parallelism getParallelism() {
return parallelism;
}

public boolean isGenerateInclusions() { return generateInclusions; }

@DataBoundSetter
public void setGenerateInclusions(boolean generateInclusions) {
this.generateInclusions = generateInclusions;
}

@Extension public static final class DescriptorImpl extends AbstractStepDescriptorImpl {

public DescriptorImpl() {
Expand All @@ -42,14 +57,22 @@ public DescriptorImpl() {

}

public static final class Execution extends AbstractSynchronousStepExecution<List<InclusionExclusionPattern>> {
public static final class Execution extends AbstractSynchronousStepExecution<List<?>> {

@Inject private SplitStep step;
@StepContextParameter private Run<?,?> build;
@StepContextParameter private TaskListener listener;

@Override protected List<InclusionExclusionPattern> run() throws Exception {
return ParallelTestExecutor.findTestSplits(step.parallelism, build, listener, false);
@Override protected List<?> run() throws Exception {
if (step.generateInclusions) {
return ParallelTestExecutor.findTestSplits(step.parallelism, build, listener, step.generateInclusions);
} else {
List<List<String>> result = new ArrayList<List<String>>();
for (InclusionExclusionPattern pattern : ParallelTestExecutor.findTestSplits(step.parallelism, build, listener, step.generateInclusions)) {
result.add(pattern.getList());
}
return result;
}
}

}
Expand Down
Expand Up @@ -4,4 +4,7 @@
<f:entry field="parallelism">
<f:dropdownDescriptorSelector field="parallelism" title="Degree of parallelism"/>
</f:entry>
<f:entry field="generateInclusions">
<f:checkbox title="Generate inclusion patterns"/>
</f:entry>
</j:jelly>
@@ -0,0 +1,9 @@
<p>If disabled, the splitStep call will return a <i>List&lt;List&lt;String&gt;&gt;</i> containing the exclusion patterns for the different buckets.</p>

<p>If enabled, the splitStep call won't return a <i>List&lt;List&lt;String&gt;&gt;</i>.<br/>
Instead it will return a <i>List</i> of a structure with :
<ul>
<li><i>boolean includes</i> whether the following list is an inclusion or an exclusion list</li>
<li><i>List&lt;String&gt; list</i> the list of patterns</li>
</ul>
</p>

0 comments on commit fce5c45

Please sign in to comment.