Skip to content

Commit 742cc9e

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 c9657c3 commit 742cc9e

File tree

7 files changed

+101
-67
lines changed

7 files changed

+101
-67
lines changed

Jenkinsfile

+49-54
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,64 +20,76 @@ pipeline {
1420
stages {
1521
stage("Docker images") {
1622
parallel {
17-
stage('Publish JDK 8 + MongoDB 5.0') {
23+
stage('Publish JDK (main) + MongoDB 4.0') {
1824
when {
19-
changeset "ci/openjdk8-mongodb-5.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-5.0.0", "ci/openjdk8-mongodb-5.0/")
27-
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
28-
image.push()
29-
}
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/")
36+
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
37+
image.push()
3038
}
3139
}
3240
}
33-
stage('Publish JDK 8 + MongoDB 4.0') {
41+
}
42+
stage('Publish JDK (main) + MongoDB 4.4') {
3443
when {
35-
changeset "ci/openjdk8-mongodb-4.0/**"
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.0.23", "ci/openjdk8-mongodb-4.0/")
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
}
4658
}
4759
}
4860
}
49-
stage('Publish JDK 8 + MongoDB 4.4') {
61+
stage('Publish JDK (main) + MongoDB 5.0') {
5062
when {
51-
changeset "ci/openjdk8-mongodb-4.4/**"
63+
anyOf {
64+
changeset "ci/openjdk8-mongodb-5.0/**"
65+
changeset "ci/pipeline.properties"
66+
}
5267
}
5368
agent { label 'data' }
5469
options { timeout(time: 30, unit: 'MINUTES') }
5570

5671
steps {
5772
script {
58-
def image = docker.build("springci/spring-data-openjdk8-with-mongodb-4.4.4", "ci/openjdk8-mongodb-4.4/")
59-
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
60-
image.push()
61-
}
62-
}
63-
}
64-
}
65-
stage('Publish JDK 16 + MongoDB 4.4') {
73+
def image = docker.build("springci/spring-data-with-mongodb-5.0:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.5.0.version']} ci/openjdk8-mongodb-5.0/")
74+
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
75+
image.push()
76+
}
77+
}
78+
}
79+
}
80+
stage('Publish JDK (LTS) + MongoDB 4.4') {
6681
when {
67-
changeset "ci/openjdk16-mongodb-4.4/**"
82+
anyOf {
83+
changeset "ci/openjdk17-mongodb-4.4/**"
84+
changeset "ci/pipeline.properties"
85+
}
6886
}
6987
agent { label 'data' }
7088
options { timeout(time: 30, unit: 'MINUTES') }
7189

7290
steps {
7391
script {
74-
def image = docker.build("springci/spring-data-openjdk16-with-mongodb-4.4.4", "ci/openjdk16-mongodb-4.4/")
92+
def image = docker.build("springci/spring-data-with-mongodb-4.4:${p['java.lts.tag']}", "--build-arg BASE=${p['docker.java.lts.image']} --build-arg MONGODB=${p['docker.mongodb.4.4.version']} ci/openjdk16-mongodb-4.4/")
7593
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
7694
image.push()
7795
}
@@ -81,7 +99,7 @@ pipeline {
8199
}
82100
}
83101

84-
stage("test: baseline (jdk8)") {
102+
stage("test: baseline (main)") {
85103
when {
86104
beforeAgent(true)
87105
anyOf {
@@ -99,7 +117,7 @@ pipeline {
99117
steps {
100118
script {
101119
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
102-
docker.image('springci/spring-data-openjdk8-with-mongodb-4.0.23:latest').inside('-v $HOME:/tmp/jenkins-home') {
120+
docker.image("springci/spring-data-with-mongodb-4.0:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
103121
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
104122
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
105123
sh 'sleep 10'
@@ -121,31 +139,7 @@ pipeline {
121139
}
122140
}
123141
parallel {
124-
stage("test: mongodb 4.0 (jdk8)") {
125-
agent {
126-
label 'data'
127-
}
128-
options { timeout(time: 30, unit: 'MINUTES') }
129-
environment {
130-
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
131-
}
132-
steps {
133-
script {
134-
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
135-
docker.image('springci/spring-data-openjdk8-with-mongodb-4.0.23:latest').inside('-v $HOME:/tmp/jenkins-home') {
136-
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
137-
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
138-
sh 'sleep 10'
139-
sh 'mongo --eval "rs.initiate({_id: \'rs0\', members:[{_id: 0, host: \'127.0.0.1:27017\'}]});"'
140-
sh 'sleep 15'
141-
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'
142-
}
143-
}
144-
}
145-
}
146-
}
147-
148-
stage("test: mongodb 4.4 (jdk8)") {
142+
stage("test: mongodb 4.4 (main)") {
149143
agent {
150144
label 'data'
151145
}
@@ -156,7 +150,7 @@ pipeline {
156150
steps {
157151
script {
158152
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
159-
docker.image('springci/spring-data-openjdk8-with-mongodb-4.4.4:latest').inside('-v $HOME:/tmp/jenkins-home') {
153+
docker.image("springci/spring-data-with-mongodb-4.4:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
160154
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
161155
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
162156
sh 'sleep 10'
@@ -169,7 +163,7 @@ pipeline {
169163
}
170164
}
171165

172-
stage("test: mongodb 5.0 (jdk8)") {
166+
stage("test: mongodb 5.0 (main)") {
173167
agent {
174168
label 'data'
175169
}
@@ -180,7 +174,7 @@ pipeline {
180174
steps {
181175
script {
182176
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
183-
docker.image('springci/spring-data-openjdk8-with-mongodb-5.0.0:latest').inside('-v $HOME:/tmp/jenkins-home') {
177+
docker.image("springci/spring-data-with-mongodb-5.0:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
184178
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
185179
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
186180
sh 'sleep 10'
@@ -193,7 +187,7 @@ pipeline {
193187
}
194188
}
195189

196-
stage("test: baseline (jdk16)") {
190+
stage("test: baseline (LTS)") {
197191
agent {
198192
label 'data'
199193
}
@@ -204,7 +198,8 @@ pipeline {
204198
steps {
205199
script {
206200
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
207-
docker.image('springci/spring-data-openjdk16-with-mongodb-4.4.4:latest').inside('-v $HOME:/tmp/jenkins-home') {
201+
docker.image("springci/spring-data-with-mongodb-4.4:${p['java.lts.tag']}").inside(p['docker.java.inside.basic']) {
202+
alwaysPull true
208203
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
209204
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
210205
sh 'sleep 10'
@@ -239,7 +234,7 @@ pipeline {
239234
steps {
240235
script {
241236
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
242-
docker.image('adoptopenjdk/openjdk8:latest').inside('-v $HOME:/tmp/jenkins-home') {
237+
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
243238
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' +
244239
'-Dartifactory.server=https://repo.spring.io ' +
245240
"-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
@@ -13,6 +16,6 @@ RUN set -eux; \
1316
echo ${TZ} > /etc/timezone;
1417

1518
RUN apt-get update ; \
16-
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 ; \
19+
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
1720
apt-get clean; \
1821
rm -rf /var/lib/apt/lists/*;

ci/openjdk16-mongodb-4.4/Dockerfile renamed to ci/openjdk17-mongodb-4.4/Dockerfile

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
FROM adoptopenjdk/openjdk16: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
@@ -13,6 +16,6 @@ RUN set -eux; \
1316
echo ${TZ} > /etc/timezone;
1417

1518
RUN apt-get update ; \
16-
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 ; \
19+
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
1720
apt-get clean; \
1821
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
@@ -13,6 +16,6 @@ RUN RUN set -eux; \
1316
echo ${TZ} > /etc/timezone;
1417

1518
RUN apt-get update ; \
16-
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 ; \
19+
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
1720
apt-get clean; \
1821
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
@@ -14,7 +17,7 @@ RUN set -eux; \
1417

1518
RUN apt-get update ; \
1619
ln -T /bin/true /usr/bin/systemctl ; \
17-
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 ; \
18-
rm /usr/bin/systemctl ; \
19-
apt-get clean; \
20-
rm -rf /var/lib/apt/lists/*;
20+
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
21+
rm /usr/bin/systemctl ; \
22+
apt-get clean ; \
23+
rm -rf /var/lib/apt/lists/* ;

ci/openjdk8-mongodb-5.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
@@ -15,6 +18,6 @@ RUN set -eux; \
1518
echo ${TZ} > /etc/timezone;
1619

1720
RUN apt-get update; \
18-
apt-get install -y mongodb-org=5.0.3 mongodb-org-server=5.0.3 mongodb-org-shell=5.0.3 mongodb-org-mongos=5.0.3 mongodb-org-tools=5.0.3; \
21+
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
1922
apt-get clean; \
2023
rm -rf /var/lib/apt/lists/*;

ci/pipeline.properties

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Java versions
2+
java.main.tag=8u312-b07-jdk
3+
java.next.tag=11.0.13_8-jdk
4+
java.lts.tag=17.0.1_12-jdk
5+
6+
# Docker container images - standard
7+
docker.java.main.image=eclipse-temurin:${java.main.tag}
8+
docker.java.next.image=eclipse-temurin:${java.next.tag}
9+
docker.java.lts.image=eclipse-temurin:${java.lts.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

0 commit comments

Comments
 (0)