1
- import java.util.List
1
+ import java.io.StringReader
2
2
import java.util.ArrayList
3
3
import java.util.UUID
4
+ import java.util.Properties
4
5
import org.kohsuke.github.GitHub
5
6
import org.kohsuke.github.GHCommitState
6
7
import org.kohsuke.github.GHRepository
@@ -124,10 +125,10 @@ public class CommitStatus implements Serializable {
124
125
}
125
126
126
127
class Images implements Serializable {
127
- def cassandra = 'cassandra:3.11.3'
128
- def elasticSearch = 'docker.elastic.co/elasticsearch/elasticsearch:6.3.2'
129
- def rabbitmq = "rabbitmq:3.7.7-management"
130
- def swift = "linagora/openstack-keystone-swift:pike"
128
+ def cassandra
129
+ def elasticSearch
130
+ def rabbitmq
131
+ def swift
131
132
def jamesCompile
132
133
def jamesCassandra
133
134
def jamesCassandraRabbitMQ
@@ -157,6 +158,32 @@ class Images implements Serializable {
157
158
jamesJPA, jamesJpaSample, jamesJpaSampleForTesting, jamesSpring, gitPublish ]
158
159
}
159
160
161
+ def customDependenciesOrDefault(def node) {
162
+ Properties properties = fromFile(node, 'dockerfiles/run/dependencies.properties')
163
+
164
+ cassandra = properties."cassandra" ?: 'cassandra:3.11.3'
165
+ elasticSearch = properties."elasticSearch" ?: 'docker.elastic.co/elasticsearch/elasticsearch:6.3.2'
166
+ rabbitmq = properties."rabbitmq" ?: 'rabbitmq:3.7.7-management'
167
+ swift = properties."swift" ?: 'linagora/openstack-keystone-swift:pike'
168
+ }
169
+
170
+ def fromFile(def node, def file) {
171
+ if (!node.fileExists('dockerfiles/run/dependencies.properties')) {
172
+ node.echo "Using default dependencies"
173
+ return new Properties()
174
+ }
175
+
176
+ try {
177
+ Properties properties = new Properties()
178
+ properties.load(new StringReader(node.readFile(file)))
179
+ return properties
180
+ } catch (Exception e) {
181
+ node.echo "Exception occured while getting dependencies, using default values"
182
+ node.echo "${e}"
183
+ return new Properties()
184
+ }
185
+ }
186
+
160
187
def deleteAll = { node ->
161
188
new Command("docker rmi --force=true ${images.join(' ')} || true").execute(node)
162
189
}
@@ -369,7 +396,6 @@ def containerIp(dockerContainer) {
369
396
// Define main variables
370
397
buildId = "${workingBranch.toLowerCase()}-${UUID.randomUUID()}"
371
398
mergeBranch = "MERGE-${buildId}"
372
- images = new Images(buildId)
373
399
containers = new Containers(buildId)
374
400
jamesLinks = "--link ${containers.cassandra}:cassandra --link ${containers.elasticSearch}:elasticsearch"
375
401
rabbitmqSwiftLinks = "--link ${containers.rabbitmq}:rabbitmq --link ${containers.swift}:swift"
@@ -435,16 +461,17 @@ if (packageOnGitlab()) {
435
461
statuses.addPendingStatus(packagingTrigger)
436
462
}
437
463
rabbitMQProductExists = false
464
+ images = null
438
465
flows["${sha1}"] = {
439
466
440
467
stage "Build"
441
468
node('remote') {
442
469
ws("/home/jenkins/build/workspace/${env.BUILD_NUMBER}") {
443
470
try {
444
471
if (isTag()) {
445
- buildVolumeFromTag()
472
+ buildVolumeFromTag(this )
446
473
} else {
447
- merge()
474
+ merge(this )
448
475
}
449
476
merging.success()
450
477
rabbitMQProductExists = fileExists 'dockerfiles/run/guice/cassandra-rabbitmq-ldap'
@@ -476,7 +503,7 @@ flows["${sha1}"] = {
476
503
}
477
504
} finally {
478
505
containers.deleteAll(this)
479
- images.deleteAll(this)
506
+ images? .deleteAll(this)
480
507
}
481
508
}
482
509
}
@@ -486,20 +513,26 @@ flows["${sha1}"] = {
486
513
parallel flows
487
514
488
515
jamesVersion = ""
489
- def merge() {
516
+ def merge(def node ) {
490
517
git url: authorParentURL, branch: branch
491
518
sh "git fetch origin"
492
519
sh "git checkout ${branch}"
493
520
jamesVersion = version()
521
+ images = new Images(buildId)
522
+ images.customDependenciesOrDefault(node)
523
+
494
524
sh "docker build --tag ${images.gitPublish} -f dockerfiles/merge/Dockerfile ."
495
525
sh "docker run ${verbose} -t --name ${containers.gitPublish} -v /origin ${images.gitPublish} ${sha1ToBuild} ${mergeBranch} ${originalBranch}"
496
526
}
497
527
498
- def buildVolumeFromTag() {
528
+ def buildVolumeFromTag(def node ) {
499
529
git url: authorParentURL, branch: "master"
500
530
sh "git fetch --tags origin"
501
531
sh "git checkout ${tagName} -b ${mergeBranch}"
502
532
jamesVersion = version()
533
+ images = new Images(buildId)
534
+ images.customDependenciesOrDefault(node)
535
+
503
536
def dockerfile = """\
504
537
FROM debian:8.11
505
538
0 commit comments