Skip to content

Commit b669d2f

Browse files
committed
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 c7563ab commit b669d2f

File tree

7 files changed

+94
-66
lines changed

7 files changed

+94
-66
lines changed

Jenkinsfile

+36-53
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,55 +20,55 @@ 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+
changeset "ci/openjdk8-mongodb-4.0/**"
2026
}
2127
agent { label 'data' }
2228
options { timeout(time: 30, unit: 'MINUTES') }
2329

2430
steps {
2531
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-
}
32+
def image = docker.build("springci/spring-data-with-mongodb-4.0:jdk8", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.4.0.version']} ci/openjdk8-mongodb-4.0/")
33+
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
34+
image.push()
3035
}
3136
}
3237
}
33-
stage('Publish JDK 8 + MongoDB 4.0') {
38+
}
39+
stage('Publish JDK (main) + MongoDB 4.4') {
3440
when {
35-
changeset "ci/openjdk8-mongodb-4.0/**"
41+
changeset "ci/openjdk8-mongodb-4.4/**"
3642
}
3743
agent { label 'data' }
3844
options { timeout(time: 30, unit: 'MINUTES') }
3945

4046
steps {
4147
script {
42-
def image = docker.build("springci/spring-data-openjdk8-with-mongodb-4.0.23", "ci/openjdk8-mongodb-4.0/")
48+
def image = docker.build("springci/spring-data-with-mongodb-4.4:jdk8", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.4.4.version']} ci/openjdk8-mongodb-4.4/")
4349
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
4450
image.push()
4551
}
4652
}
4753
}
4854
}
49-
stage('Publish JDK 8 + MongoDB 4.4') {
55+
stage('Publish JDK (main) + MongoDB 5.0') {
5056
when {
51-
changeset "ci/openjdk8-mongodb-4.4/**"
57+
changeset "ci/openjdk8-mongodb-5.0/**"
5258
}
5359
agent { label 'data' }
5460
options { timeout(time: 30, unit: 'MINUTES') }
5561

5662
steps {
5763
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') {
64+
def image = docker.build("springci/spring-data-with-mongodb-5.0:jdk8", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.5.0.version']} ci/openjdk8-mongodb-5.0/")
65+
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
66+
image.push()
67+
}
68+
}
69+
}
70+
}
71+
stage('Publish JDK (LTS) + MongoDB 4.4') {
6672
when {
6773
changeset "ci/openjdk16-mongodb-4.4/**"
6874
}
@@ -71,7 +77,7 @@ pipeline {
7177

7278
steps {
7379
script {
74-
def image = docker.build("springci/spring-data-openjdk16-with-mongodb-4.4.4", "ci/openjdk16-mongodb-4.4/")
80+
def image = docker.build("springci/spring-data-with-mongodb-4.4:jdk17", "--build-arg BASE=${p['docker.java.lts.image']} --build-arg MONGODB=${p['docker.mongodb.4.4.version']} ci/openjdk16-mongodb-4.4/")
7581
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
7682
image.push()
7783
}
@@ -81,7 +87,7 @@ pipeline {
8187
}
8288
}
8389

84-
stage("test: baseline (jdk8)") {
90+
stage("test: baseline (main)") {
8591
when {
8692
beforeAgent(true)
8793
anyOf {
@@ -99,7 +105,7 @@ pipeline {
99105
steps {
100106
script {
101107
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') {
108+
docker.image("springci/spring-data-with-mongodb-4.0:jdk8").inside(p['docker.java.inside.basic']) {
103109
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
104110
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
105111
sh 'sleep 10'
@@ -121,31 +127,7 @@ pipeline {
121127
}
122128
}
123129
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)") {
130+
stage("test: mongodb 4.4 (main)") {
149131
agent {
150132
label 'data'
151133
}
@@ -156,7 +138,7 @@ pipeline {
156138
steps {
157139
script {
158140
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') {
141+
docker.image("springci/spring-data-with-mongodb-4.4:jdk8").inside(p['docker.java.inside.basic']) {
160142
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
161143
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
162144
sh 'sleep 10'
@@ -169,7 +151,7 @@ pipeline {
169151
}
170152
}
171153

172-
stage("test: mongodb 5.0 (jdk8)") {
154+
stage("test: mongodb 5.0 (main)") {
173155
agent {
174156
label 'data'
175157
}
@@ -180,7 +162,7 @@ pipeline {
180162
steps {
181163
script {
182164
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') {
165+
docker.image("springci/spring-data-with-mongodb-5.0:jdk8").inside(p['docker.java.inside.basic']) {
184166
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
185167
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
186168
sh 'sleep 10'
@@ -193,7 +175,7 @@ pipeline {
193175
}
194176
}
195177

196-
stage("test: baseline (jdk16)") {
178+
stage("test: baseline (LTS)") {
197179
agent {
198180
label 'data'
199181
}
@@ -204,7 +186,8 @@ pipeline {
204186
steps {
205187
script {
206188
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') {
189+
docker.image("springci/spring-data-with-mongodb-4.4:jdk17").inside(p['docker.java.inside.basic']) {
190+
alwaysPull true
208191
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
209192
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
210193
sh 'sleep 10'
@@ -239,7 +222,7 @@ pipeline {
239222
steps {
240223
script {
241224
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
242-
docker.image('adoptopenjdk/openjdk8:latest').inside('-v $HOME:/tmp/jenkins-home') {
225+
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
243226
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -v'
244227
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' +
245228
'-Dartifactory.server=https://repo.spring.io ' +

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

+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

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Docker container images - standard
2+
docker.java.main.image=adoptopenjdk/openjdk8:latest
3+
docker.java.next.image=adoptopenjdk/openjdk11:latest
4+
docker.java.lts.image=openjdk:17-bullseye
5+
6+
# Suported versions of MongoDB
7+
docker.mongodb.4.0.version=4.0.23
8+
docker.mongodb.4.4.version=4.4.4
9+
docker.mongodb.5.0.version=5.0.3
10+
11+
# Docker container images - Redis
12+
docker.java.main.redis.6.name=springci/spring-data-openjdk8-with-redis-6.2
13+
docker.java.lts.redis.6.name=springci/spring-data-openjdk17-with-redis-6.2
14+
15+
docker.java.main.redis.6.image=${docker.java.main.redis.6.name}:latest
16+
docker.java.lts.redis.6.image=${docker.java.lts.redis.6.name}:latest
17+
18+
# Docker container images - Cassandra
19+
docker.java.main.cassandra.3.name=springci/spring-data-openjdk8-cassandra-3.11
20+
docker.java.next.cassandra.3.name=springci/spring-data-openjdk11-8-cassandra-3.11
21+
docker.java.lts.cassandra.3.name=springci/spring-data-openjdk17-8-cassandra-3.11
22+
23+
docker.java.main.cassandra.3.image=${docker.java.main.cassandra.3.name}:latest
24+
docker.java.next.cassandra.3.image=${docker.java.next.cassandra.3.name}:latest
25+
docker.java.lts.cassandra.3.image=${docker.java.lts.cassandra.3.name}:latest
26+
27+
28+
# Docker environment settings
29+
docker.java.inside.basic=-v $HOME:/tmp/jenkins-home
30+
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)