Skip to content

Instantly share code, notes, and snippets.

@dirk-thomas
Last active August 29, 2015 14:13
Show Gist options
  • Save dirk-thomas/37febb42abeb8631f946 to your computer and use it in GitHub Desktop.
Save dirk-thomas/37febb42abeb8631f946 to your computer and use it in GitHub Desktop.
Create "leaf" job with a single upstream dependency "before_leaf" where "before_leaf" has several (in this case 5: "a15" - "e15") upstream dependencies, each upstream dependency "xN" has "xN-1" as its upstream dependency.
job_prefix = 'jenkins21605_caseB_'
println 'Deleting jobs from previous tests...'
for (p in Jenkins.instance.allItems) {
if (!p.name.startsWith(job_prefix)) continue
println '- ' + p.name
p.delete()
}
println ''
def createProject(job_name, upstream_names) {
job_config_template = '''
<project>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<assignedNode>master</assignedNode>
<canRoam>false</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>true</blockBuildWhenUpstreamBuilding>
<triggers>
<jenkins.triggers.ReverseBuildTrigger>
<spec></spec>
<upstreamProjects>%1$s</upstreamProjects>
<threshold>
<name>UNSTABLE</name>
<ordinal>1</ordinal>
<color>YELLOW</color>
<completeBuild>true</completeBuild>
</threshold>
</jenkins.triggers.ReverseBuildTrigger>
</triggers>
<concurrentBuild>false</concurrentBuild>
<builders>
<hudson.plugins.groovy.SystemGroovy plugin="[email protected]">
<scriptSource class="hudson.plugins.groovy.StringScriptSource">
<command>println &apos;dummy build step&apos;</command>
</scriptSource>
<bindings></bindings>
<classpath></classpath>
</hudson.plugins.groovy.SystemGroovy>
</builders>
<publishers/>
<buildWrappers/>
</project>
'''
upstream_projects = ''
for (upstream_name in upstream_names) {
upstream_projects += job_prefix + upstream_name + ','
}
job_config = sprintf(job_config_template, upstream_projects)
stream = new StringBufferInputStream(job_config)
println '- ' + job_prefix + job_name
Jenkins.instance.createProjectFromXML(job_prefix + job_name, stream)
}
def createProjects(parent_name, count) {
range = 1..count
for (i in range) {
createProject(parent_name + String.format("%0" + 2 + "d", i), [parent_name])
}
}
// this example demonstrates that all upstream causes are listed
// and that they are not limited in any way
println 'Creating new job hierarchy...'
createProject('', [])
all_parents = []
range = 1..15
for (j in ['a', 'b', 'c', 'd', 'e']) {
parent = ''
for (i in range) {
name = j + String.format("%0" + 2 + "d", i)
createProject(name, [parent])
parent = name
}
all_parents += [parent]
println all_parents
}
createProject('before_leaf', all_parents)
createProject('leaf', ['before_leaf'])
println ''
println 'You can create a view to show all test jobs using the regular expression: ' + job_prefix
println ''
println 'Please trigger the root job: ' + job_prefix
println 'And then look at the leaf job: ' + job_prefix + '1'
println 'It lists all upstream causes - BUG'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment