-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.gradle
94 lines (84 loc) · 3.71 KB
/
build.gradle
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
plugins {
id "groovy"
}
group = "com.eddgrant"
version = "1.0-SNAPSHOT"
project.ext {
jobDslVersion = "1.82"
jenkinsVersion = "2.384"
jenkinsTestHarnessVersion = "2002.v0b_78b_a_d69e5d"
}
repositories {
maven { url "https://repo.jenkins-ci.org/releases/" }
maven { url "https://repo.jenkins-ci.org/public/" }
jcenter()
mavenCentral()
}
dependencies {
/**
* The packaging element in job-dsl's pom.xml is set to "hpi", which is of no use to us
* when running unit tests as it doesn't contain various classes we need to have on our classpath.
*
* We do however need the .hpi files when running AbstractJobSpec tests as we need to provide them to the
* in-memory Jenkins instance so that it can load and verify them, then make them available when we apply
* the DSL files in the "jobs" folder.
*
* We tried specifying '@jar' on each Jenkins plugin dependency, however this stopped Gradle from including any of
* the dependency's transitive dependencies, which caused various class loading issues e.g NoClassDefFound exceptions
* which didn't occur until certain bits of DSL were processed.
*
* We then discovered that we can tell Gradle to add the .jar and .hpi artefacts for Jenkins plugins when it does the dependency resolution.
* This gives us access to both of the artefacts that we need and yet doesn't stop Gradle
* from pulling in the transitive dependencies of the dependency itself.
*
* This approach, however, requires some careful curation: Both in identifying the groupIds of all Jenkins plugins
* and maintaining a list of plugins which, for some reason, don't publish a .hpi artefact.
*
* Further reading here: https://discuss.gradle.org/t/how-can-i-specify-a-dependency-file-extension-and-still-have-gradle-resolve-transitive-dependencies/45956/2
*/
components {
all { ComponentMetadataDetails cmd ->
final Set<String> jenkinsPluginGroups = [
"io.jenkins.plugins",
"org.jenkins-ci.plugins",
"org.jenkinsci.plugins",
"com.cloudbees.jenkins.plugins"
]
final Set<String> pluginsThatDoNotPublishAnHpiArtefact = [
"job-dsl-core",
"lib-durable-task"
]
if(jenkinsPluginGroups.contains(cmd.id.id.group)) {
allVariants {
withFiles {
addFile("${id.name}-${id.version}.jar")
if(!pluginsThatDoNotPublishAnHpiArtefact.contains(id.name)) {
addFile("${id.name}-${id.version}.hpi")
}
}
}
}
}
}
/**
* Jenkins currently relies on Groovy 2.5, as detailed in https://issues.jenkins.io/browse/JENKINS-51823.
* So we target the same version despite it being rather old.
*/
implementation "org.codehaus.groovy:groovy-all:2.5.+"
testImplementation platform("org.junit:junit-bom:5.9.1")
testImplementation "org.junit.jupiter:junit-jupiter"
testImplementation "org.spockframework:spock-core:2.3-groovy-2.5"
testImplementation "ru.vyarus:spock-junit5:1.2.0"
testImplementation 'org.slf4j:slf4j-simple:2.0.7'
// Jenkins dependencies:
testImplementation "org.jenkins-ci.main:jenkins-test-harness:2002.v0b_78b_a_d69e5d"
// jenkins-test-harness doesn't declare a dependency on Jenkins itself so we do that here.
testImplementation "org.jenkins-ci.main:jenkins-core:${jenkinsVersion}"
testImplementation "org.jenkins-ci.plugins:job-dsl:${jobDslVersion}"
}
test {
useJUnitPlatform()
testLogging {
showStandardStreams true
}
}