Skip to content

Commit f05b15e

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 #1214.
1 parent 03674d4 commit f05b15e

File tree

5 files changed

+70
-22
lines changed

5 files changed

+70
-22
lines changed

Jenkinsfile

Lines changed: 31 additions & 16 deletions
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,48 +20,57 @@ pipeline {
1420
stages {
1521
stage("Docker images") {
1622
parallel {
17-
stage('Publish JDK 8 + Cassandra 3.11') {
23+
stage('Publish JDK (main) + Cassandra 3.11') {
1824
when {
19-
changeset "ci/openjdk8-cassandra-3.11/**"
25+
anyOf {
26+
changeset "ci/openjdk8-cassandra-3.11/**"
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-cassandra-3.11", "ci/openjdk8-cassandra-3.11/")
35+
def image = docker.build("springci/spring-data-with-cassandra-3.11:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg CASSANDRA=${p['docker.cassandra.3.version']} ci/openjdk8-cassandra-3.11/")
2736
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
2837
image.push()
2938
}
3039
}
3140
}
3241
}
33-
stage('Publish JDK 11 + Cassandra 3.11') {
42+
stage('Publish JDK (next) + Cassandra 3.11') {
3443
when {
35-
changeset "ci/openjdk11-8-cassandra-3.11/**"
44+
anyOf {
45+
changeset "ci/openjdk11-8-cassandra-3.11/**"
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-openjdk11-8-cassandra-3.11", "ci/openjdk11-8-cassandra-3.11/")
54+
def image = docker.build("springci/spring-data-with-cassandra-3.11:${p['java.next.tag']}", "--build-arg BASE=${p['docker.java.next.image']} --build-arg CASSANDRA=${p['docker.cassandra.3.version']} ci/openjdk11-8-cassandra-3.11/")
4355
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
4456
image.push()
4557
}
4658
}
4759
}
4860
}
49-
stage('Publish JDK 17 + Cassandra 3.11') {
61+
stage('Publish JDK (LTS) + Cassandra 3.11') {
5062
when {
51-
changeset "ci/openjdk17-8-cassandra-3.11/**"
63+
anyOf {
64+
changeset "ci/openjdk17-8-cassandra-3.11/**"
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-openjdk17-8-cassandra-3.11", "ci/openjdk17-8-cassandra-3.11/")
73+
def image = docker.build("springci/spring-data-with-cassandra-3.11:${p['java.lts.tag']}", "--build-arg BASE=${p['docker.java.lts.image']} --build-arg CASSANDRA=${p['docker.cassandra.3.version']} ci/openjdk17-8-cassandra-3.11/")
5974
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
6075
image.push()
6176
}
@@ -65,7 +80,7 @@ pipeline {
6580
}
6681
}
6782

68-
stage("test: baseline (jdk8)") {
83+
stage("test: baseline (main)") {
6984
when {
7085
beforeAgent(true)
7186
anyOf {
@@ -83,7 +98,7 @@ pipeline {
8398
steps {
8499
script {
85100
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
86-
docker.image('springci/spring-data-openjdk8-cassandra-3.11:latest').inside('-v $HOME:/tmp/jenkins-home') {
101+
docker.image("springci/spring-data-with-cassandra-3.11:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
87102
sh 'mkdir -p /tmp/jenkins-home'
88103
sh 'JAVA_HOME=/opt/java/openjdk /opt/cassandra/bin/cassandra -R &'
89104
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,external-cassandra clean dependency:list verify -Dsort -U -B'
@@ -102,7 +117,7 @@ pipeline {
102117
}
103118
}
104119
parallel {
105-
stage("test: baseline (jdk11)") {
120+
stage("test: baseline (next)") {
106121
agent {
107122
label 'data'
108123
}
@@ -113,7 +128,7 @@ pipeline {
113128
steps {
114129
script {
115130
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
116-
docker.image('springci/spring-data-openjdk11-8-cassandra-3.11:latest').inside('-v $HOME:/tmp/jenkins-home') {
131+
docker.image("springci/spring-data-with-cassandra-3.11:${p['java.next.tag']}").inside(p['docker.java.inside.basic']) {
117132
sh 'mkdir -p /tmp/jenkins-home'
118133
sh 'JAVA_HOME=/opt/java/openjdk8 /opt/cassandra/bin/cassandra -R &'
119134
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,external-cassandra,java11 clean dependency:list verify -Dsort -U -B'
@@ -122,7 +137,7 @@ pipeline {
122137
}
123138
}
124139
}
125-
stage("test: baseline (jdk17)") {
140+
stage("test: baseline (LTS)") {
126141
agent {
127142
label 'data'
128143
}
@@ -133,7 +148,7 @@ pipeline {
133148
steps {
134149
script {
135150
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
136-
docker.image('springci/spring-data-openjdk17-8-cassandra-3.11:latest').inside('-v $HOME:/tmp/jenkins-home') {
151+
docker.image("springci/spring-data-with-cassandra-3.11:${p['java.lts.tag']}").inside(p['docker.java.inside.basic']) {
137152
sh 'mkdir -p /tmp/jenkins-home'
138153
sh 'JAVA_HOME=/opt/java/openjdk8 /opt/cassandra/bin/cassandra -R &'
139154
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,external-cassandra,java11 clean dependency:list verify -Dsort -U -B'
@@ -164,7 +179,7 @@ pipeline {
164179
steps {
165180
script {
166181
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
167-
docker.image('adoptopenjdk/openjdk8:latest').inside('-v $HOME:/tmp/jenkins-home') {
182+
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
168183
sh 'mkdir -p /tmp/jenkins-home'
169184
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' +
170185
'-Dartifactory.server=https://repo.spring.io ' +

ci/openjdk11-8-cassandra-3.11/Dockerfile

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

36
RUN set -eux; \
4-
CASSANDRA_URL='https://archive.apache.org/dist/cassandra/3.11.10/apache-cassandra-3.11.10-bin.tar.gz'; \
7+
CASSANDRA_URL="https://archive.apache.org/dist/cassandra/${CASSANDRA}/apache-cassandra-${CASSANDRA}-bin.tar.gz"; \
58
sed -i -e 's/http/https/g' /etc/apt/sources.list ; \
69
curl -LfsSo /tmp/cassandra.tar.gz ${CASSANDRA_URL}; \
710
mkdir -p /opt/cassandra /opt/cassandra/data /opt/cassandra/logs; \

ci/openjdk17-8-cassandra-3.11/Dockerfile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
FROM openjdk:17-bullseye
1+
ARG BASE
2+
FROM ${BASE}
3+
# Any ARG statements before FROM are cleared.
4+
ARG CASSANDRA
25

36
RUN set -eux; \
4-
CASSANDRA_URL='https://archive.apache.org/dist/cassandra/3.11.10/apache-cassandra-3.11.10-bin.tar.gz'; \
7+
CASSANDRA_URL="https://archive.apache.org/dist/cassandra/${CASSANDRA}/apache-cassandra-${CASSANDRA}-bin.tar.gz"; \
58
sed -i -e 's/http/https/g' /etc/apt/sources.list ; \
69
curl -LfsSo /tmp/cassandra.tar.gz ${CASSANDRA_URL}; \
710
mkdir -p /opt/cassandra /opt/cassandra/data /opt/cassandra/logs; \

ci/openjdk8-cassandra-3.11/Dockerfile

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

36
RUN set -eux; \
4-
CASSANDRA_URL='https://archive.apache.org/dist/cassandra/3.11.10/apache-cassandra-3.11.10-bin.tar.gz'; \
7+
CASSANDRA_URL="https://archive.apache.org/dist/cassandra/${CASSANDRA}/apache-cassandra-${CASSANDRA}-bin.tar.gz"; \
58
sed -i -e 's/http/https/g' /etc/apt/sources.list ; \
69
curl -LfsSo /tmp/cassandra.tar.gz ${CASSANDRA_URL}; \
710
mkdir -p /opt/cassandra /opt/cassandra/data /opt/cassandra/logs; \

ci/pipeline.properties

Lines changed: 24 additions & 0 deletions
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)