forked from sheehan/job-dsl-gradle-example
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJobScriptsSpec.groovy
96 lines (80 loc) · 2.73 KB
/
JobScriptsSpec.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.dslexample
import groovy.io.FileType
import hudson.model.Item
import hudson.model.View
import javaposse.jobdsl.dsl.DslScriptLoader
import javaposse.jobdsl.dsl.GeneratedItems
import javaposse.jobdsl.dsl.GeneratedJob
import javaposse.jobdsl.dsl.GeneratedView
import javaposse.jobdsl.dsl.JobManagement
import javaposse.jobdsl.plugin.JenkinsJobManagement
import jenkins.model.Jenkins
import org.junit.ClassRule
import org.jvnet.hudson.test.JenkinsRule
import spock.lang.Shared
import spock.lang.Specification
import spock.lang.Unroll
/**
* Tests that all dsl scripts in the jobs directory will compile. All config.xml's are written to build/debug-xml.
*/
class JobScriptsSpec extends Specification {
@Shared
@ClassRule
private JenkinsRule jenkinsRule = new JenkinsRule()
@Shared
private File outputDir = new File('./build/debug-xml')
def setupSpec() {
outputDir.deleteDir()
}
@Unroll
void 'test script #file.name'(File file) {
given:
JobManagement jm = new JenkinsJobManagement(System.out, [:], new File('.'))
when:
GeneratedItems items = new DslScriptLoader(jm).runScript(file.text)
writeItems items
then:
noExceptionThrown()
where:
file << jobFiles
}
/**
* Write the config.xml for each generated job and view to the build dir.
*/
void writeItems(GeneratedItems items) {
Jenkins jenkins = jenkinsRule.jenkins
items.jobs.each { GeneratedJob generatedJob ->
String jobName = generatedJob.jobName
Item item = jenkins.getItemByFullName(jobName)
String text = new URL(jenkins.rootUrl + item.url + 'config.xml').text
writeFile new File(outputDir, 'jobs'), jobName, text
}
items.views.each { GeneratedView generatedView ->
String viewName = generatedView.name
View view = jenkins.getView(viewName)
String text = new URL(jenkins.rootUrl + view.url + 'config.xml').text
writeFile new File(outputDir, 'views'), viewName, text
}
}
/**
* Write a single XML file, creating any nested dirs.
*/
void writeFile(File dir, String name, String xml) {
List tokens = name.split('/')
File folderDir = tokens[0..<-1].inject(dir) { File tokenDir, String token ->
new File(tokenDir, token)
}
folderDir.mkdirs()
File xmlFile = new File(folderDir, "${tokens[-1]}.xml")
xmlFile.text = xml
}
static List<File> getJobFiles() {
List<File> files = []
new File('jobs').eachFileRecurse(FileType.FILES) {
if (it.name.endsWith('.groovy')) {
files << it
}
}
files
}
}