Skip to content

Commit 97eff9b

Browse files
gregturnmp911de
authored andcommitted
Externalize build properties.
By reading a properties file from an external location, it is possible to inject a consistent set of properties from Spring Data Build. This also supports repeatable builds. Closes #3949.
1 parent 10ca58c commit 97eff9b

File tree

6 files changed

+78
-48
lines changed

6 files changed

+78
-48
lines changed

Jenkinsfile

+27-37
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
def p = [:]
2+
node {
3+
checkout scm
4+
p = readProperties interpolate: true, file: 'ci/pipeline.properties'
5+
}
6+
17
pipeline {
28
agent none
39

@@ -14,32 +20,38 @@ pipeline {
1420
stages {
1521
stage("Docker images") {
1622
parallel {
17-
stage('Publish JDK 8 + MongoDB 4.0') {
23+
stage('Publish JDK (main) + MongoDB 4.0') {
1824
when {
19-
changeset "ci/openjdk8-mongodb-4.0/**"
25+
anyOf {
26+
changeset "ci/openjdk8-mongodb-4.0/**"
27+
changeset "ci/pipeline.properties"
28+
}
2029
}
2130
agent { label 'data' }
2231
options { timeout(time: 30, unit: 'MINUTES') }
2332

2433
steps {
2534
script {
26-
def image = docker.build("springci/spring-data-openjdk8-with-mongodb-4.0.23", "ci/openjdk8-mongodb-4.0/")
35+
def image = docker.build("springci/spring-data-with-mongodb-4.0:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.4.0.version']} ci/openjdk8-mongodb-4.0/")
2736
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
2837
image.push()
2938
}
3039
}
3140
}
3241
}
33-
stage('Publish JDK 8 + MongoDB 4.4') {
42+
stage('Publish JDK (main) + MongoDB 4.4') {
3443
when {
35-
changeset "ci/openjdk8-mongodb-4.4/**"
44+
anyOf {
45+
changeset "ci/openjdk8-mongodb-4.4/**"
46+
changeset "ci/pipeline.properties"
47+
}
3648
}
3749
agent { label 'data' }
3850
options { timeout(time: 30, unit: 'MINUTES') }
3951

4052
steps {
4153
script {
42-
def image = docker.build("springci/spring-data-openjdk8-with-mongodb-4.4.4", "ci/openjdk8-mongodb-4.4/")
54+
def image = docker.build("springci/spring-data-with-mongodb-4.4:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.4.4.version']} ci/openjdk8-mongodb-4.4/")
4355
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
4456
image.push()
4557
}
@@ -49,13 +61,14 @@ pipeline {
4961
stage('Publish JDK 15 + MongoDB 4.4') {
5062
when {
5163
changeset "ci/openjdk15-mongodb-4.4/**"
64+
changeset "ci/pipeline.properties"
5265
}
5366
agent { label 'data' }
5467
options { timeout(time: 30, unit: 'MINUTES') }
5568

5669
steps {
5770
script {
58-
def image = docker.build("springci/spring-data-openjdk15-with-mongodb-4.4.4", "ci/openjdk15-mongodb-4.4/")
71+
def image = docker.build("springci/spring-data-with-mongodb-4.4:${p['java.15.tag']}", "--build-arg BASE=${p['docker.java.15.image']} --build-arg MONGODB=${p['docker.mongodb.4.4.version']} ci/openjdk15-mongodb-4.4/")
5972
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
6073
image.push()
6174
}
@@ -65,7 +78,7 @@ pipeline {
6578
}
6679
}
6780

68-
stage("test: baseline (jdk8)") {
81+
stage("test: baseline (main)") {
6982
when {
7083
anyOf {
7184
branch '3.2.x'
@@ -82,7 +95,7 @@ pipeline {
8295
steps {
8396
script {
8497
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
85-
docker.image('springci/spring-data-openjdk8-with-mongodb-4.0.23:latest').inside('-v $HOME:/tmp/jenkins-home') {
98+
docker.image("springci/spring-data-with-mongodb-4.0:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
8699
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
87100
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
88101
sh 'sleep 10'
@@ -103,7 +116,7 @@ pipeline {
103116
}
104117
}
105118
parallel {
106-
stage("test: mongodb 4.0 (jdk8)") {
119+
stage("test: mongodb 4.4 (main)") {
107120
agent {
108121
label 'data'
109122
}
@@ -114,31 +127,7 @@ pipeline {
114127
steps {
115128
script {
116129
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
117-
docker.image('springci/spring-data-openjdk8-with-mongodb-4.0.23:latest').inside('-v $HOME:/tmp/jenkins-home') {
118-
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
119-
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
120-
sh 'sleep 10'
121-
sh 'mongo --eval "rs.initiate({_id: \'rs0\', members:[{_id: 0, host: \'127.0.0.1:27017\'}]});"'
122-
sh 'sleep 15'
123-
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml clean dependency:list test -Duser.name=jenkins -Dsort -U -B'
124-
}
125-
}
126-
}
127-
}
128-
}
129-
130-
stage("test: mongodb 4.4 (jdk8)") {
131-
agent {
132-
label 'data'
133-
}
134-
options { timeout(time: 30, unit: 'MINUTES') }
135-
environment {
136-
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
137-
}
138-
steps {
139-
script {
140-
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
141-
docker.image('springci/spring-data-openjdk8-with-mongodb-4.4.4:latest').inside('-v $HOME:/tmp/jenkins-home') {
130+
docker.image("springci/spring-data-with-mongodb-4.4:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
142131
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
143132
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
144133
sh 'sleep 10'
@@ -162,7 +151,8 @@ pipeline {
162151
steps {
163152
script {
164153
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
165-
docker.image('springci/spring-data-openjdk15-with-mongodb-4.4.4:latest').inside('-v $HOME:/tmp/jenkins-home') {
154+
docker.image("springci/spring-data-with-mongodb-4.4:${p['java.15.tag']}").inside(p['docker.java.inside.basic']) {
155+
alwaysPull true
166156
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
167157
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
168158
sh 'sleep 10'
@@ -196,7 +186,7 @@ pipeline {
196186
steps {
197187
script {
198188
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
199-
docker.image('adoptopenjdk/openjdk8:latest').inside('-v $HOME:/tmp/jenkins-home') {
189+
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
200190
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' +
201191
'-Dartifactory.server=https://repo.spring.io ' +
202192
"-Dartifactory.username=${ARTIFACTORY_USR} " +

ci/openjdk11-mongodb-4.4/Dockerfile

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
FROM adoptopenjdk/openjdk11:latest
1+
ARG BASE
2+
FROM ${BASE}
3+
# Any ARG statements before FROM are cleared.
4+
ARG MONGODB
25

36
ENV TZ=Etc/UTC
47
ENV DEBIAN_FRONTEND=noninteractive
@@ -10,6 +13,6 @@ RUN set -eux; \
1013
echo ${TZ} > /etc/timezone;
1114

1215
RUN apt-get update ; \
13-
apt-get install -y mongodb-org=4.4.4 mongodb-org-server=4.4.4 mongodb-org-shell=4.4.4 mongodb-org-mongos=4.4.4 mongodb-org-tools=4.4.4 ; \
16+
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
1417
apt-get clean; \
1518
rm -rf /var/lib/apt/lists/*;

ci/openjdk15-mongodb-4.4/Dockerfile

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
FROM adoptopenjdk/openjdk15:latest
1+
ARG BASE
2+
FROM ${BASE}
3+
# Any ARG statements before FROM are cleared.
4+
ARG MONGODB
25

36
ENV TZ=Etc/UTC
47
ENV DEBIAN_FRONTEND=noninteractive
@@ -10,6 +13,6 @@ RUN set -eux; \
1013
echo ${TZ} > /etc/timezone;
1114

1215
RUN apt-get update ; \
13-
apt-get install -y mongodb-org=4.4.4 mongodb-org-server=4.4.4 mongodb-org-shell=4.4.4 mongodb-org-mongos=4.4.4 mongodb-org-tools=4.4.4 ; \
16+
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
1417
apt-get clean; \
1518
rm -rf /var/lib/apt/lists/*;

ci/openjdk8-mongodb-4.0/Dockerfile

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
FROM adoptopenjdk/openjdk8:latest
1+
ARG BASE
2+
FROM ${BASE}
3+
# Any ARG statements before FROM are cleared.
4+
ARG MONGODB
25

36
ENV TZ=Etc/UTC
47
ENV DEBIAN_FRONTEND=noninteractive
@@ -10,6 +13,6 @@ RUN RUN set -eux; \
1013
echo ${TZ} > /etc/timezone;
1114

1215
RUN apt-get update ; \
13-
apt-get install -y mongodb-org=4.0.23 mongodb-org-server=4.0.23 mongodb-org-shell=4.0.23 mongodb-org-mongos=4.0.23 mongodb-org-tools=4.0.23 ; \
16+
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
1417
apt-get clean; \
1518
rm -rf /var/lib/apt/lists/*;

ci/openjdk8-mongodb-4.4/Dockerfile

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
FROM adoptopenjdk/openjdk8:latest
1+
ARG BASE
2+
FROM ${BASE}
3+
# Any ARG statements before FROM are cleared.
4+
ARG MONGODB
25

36
ENV TZ=Etc/UTC
47
ENV DEBIAN_FRONTEND=noninteractive
@@ -11,7 +14,7 @@ RUN set -eux; \
1114

1215
RUN apt-get update ; \
1316
ln -T /bin/true /usr/bin/systemctl ; \
14-
apt-get install -y mongodb-org=4.4.4 mongodb-org-server=4.4.4 mongodb-org-shell=4.4.4 mongodb-org-mongos=4.4.4 mongodb-org-tools=4.4.4 ; \
15-
rm /usr/bin/systemctl ; \
16-
apt-get clean; \
17-
rm -rf /var/lib/apt/lists/*;
17+
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
18+
rm /usr/bin/systemctl ; \
19+
apt-get clean ; \
20+
rm -rf /var/lib/apt/lists/* ;

ci/pipeline.properties

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Java versions
2+
java.main.tag=8u312-b07-jdk
3+
java.11.tag=11.0.13_8-jdk
4+
java.15.tag=15.0.2_7-jdk-hotspot
5+
6+
# Docker container images - standard
7+
docker.java.main.image=eclipse-temurin:${java.main.tag}
8+
docker.java.11.image=eclipse-temurin:${java.11.tag}
9+
docker.java.15.image=adoptopenjdk:${java.15.tag}
10+
11+
# Supported versions of MongoDB
12+
docker.mongodb.4.0.version=4.0.23
13+
docker.mongodb.4.4.version=4.4.4
14+
docker.mongodb.5.0.version=5.0.3
15+
16+
# Supported versions of Redis
17+
docker.redis.6.version=6.2.4
18+
19+
# Supported versions of Cassandra
20+
docker.cassandra.3.version=3.11.10
21+
22+
# Docker environment settings
23+
docker.java.inside.basic=-v $HOME:/tmp/jenkins-home
24+
docker.java.inside.docker=-u root -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v $HOME:/tmp/jenkins-home
25+
26+
# Credentials
27+
docker.registry=
28+
docker.credentials=hub.docker.com-springbuildmaster

0 commit comments

Comments
 (0)