Skip to content

Commit 50f8ae4

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 #2245.
1 parent 0320f3f commit 50f8ae4

File tree

4 files changed

+59
-14
lines changed

4 files changed

+59
-14
lines changed

Jenkinsfile

+19-10
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,19 +20,20 @@ pipeline {
1420
stages {
1521
stage("Docker images") {
1622
parallel {
17-
stage('Publish OpenJDK 8 + Redis 6.2 docker image') {
23+
stage('Publish OpenJDK (main) + Redis 6.2 docker image') {
1824
when {
1925
anyOf {
20-
changeset "ci/openjdk8-redis-6.2/**"
26+
changeset "ci/openjdk8-redis-6.2/Dockerfile"
2127
changeset "Makefile"
28+
changeset "ci/pipeline.properties"
2229
}
2330
}
2431
agent { label 'data' }
2532
options { timeout(time: 20, unit: 'MINUTES') }
2633

2734
steps {
2835
script {
29-
def image = docker.build("springci/spring-data-openjdk8-with-redis-6.2", "-f ci/openjdk8-redis-6.2/Dockerfile .")
36+
def image = docker.build("springci/spring-data-with-redis-6.2:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg REDIS=${p['docker.redis.6.version']} -f ci/openjdk8-redis-6.2/Dockerfile .")
3037
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
3138
image.push()
3239
}
@@ -38,14 +45,15 @@ pipeline {
3845
anyOf {
3946
changeset "ci/openjdk11-redis-6.2/**"
4047
changeset "Makefile"
48+
changeset "ci/pipeline.properties"
4149
}
4250
}
4351
agent { label 'data' }
4452
options { timeout(time: 20, unit: 'MINUTES') }
4553

4654
steps {
4755
script {
48-
def image = docker.build("springci/spring-data-openjdk11-with-redis-6.2", "-f ci/openjdk11-redis-6.2/Dockerfile .")
56+
def image = docker.build("springci/spring-data-openjdk11-with-redis-6.2:${p['java.11.tag']}", "--build-arg BASE=${p['docker.java.11.image']} --build-arg REDIS=${p['docker.redis.6.version']} -f ci/openjdk11-redis-6.2/Dockerfile .")
4957
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
5058
image.push()
5159
}
@@ -57,14 +65,15 @@ pipeline {
5765
anyOf {
5866
changeset "ci/openjdk15-redis-6.2/**"
5967
changeset "Makefile"
68+
changeset "ci/pipeline.properties"
6069
}
6170
}
6271
agent { label 'data' }
6372
options { timeout(time: 20, unit: 'MINUTES') }
6473

6574
steps {
6675
script {
67-
def image = docker.build("springci/spring-data-openjdk15-with-redis-6.2", "-f ci/openjdk15-redis-6.2/Dockerfile .")
76+
def image = docker.build("springci/spring-data-with-redis-6.2:${p['java.15.tag']}", "--build-arg BASE=${p['docker.java.15.image']} --build-arg REDIS=${p['docker.redis.6.version']} -f ci/openjdk17-redis-6.2/Dockerfile .")
6877
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
6978
image.push()
7079
}
@@ -74,7 +83,7 @@ pipeline {
7483
}
7584
}
7685

77-
stage("test: baseline (jdk8)") {
86+
stage("test: baseline (main)") {
7887
when {
7988
anyOf {
8089
branch '2.5.x'
@@ -91,7 +100,7 @@ pipeline {
91100
steps {
92101
script {
93102
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
94-
docker.image('springci/spring-data-openjdk8-with-redis-6.2:latest').inside('-v $HOME:/tmp/jenkins-home') {
103+
docker.image("springci/spring-data-with-redis-6.2:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
95104
sh 'PROFILE=none LONG_TESTS=true ci/test.sh'
96105
}
97106
}
@@ -118,7 +127,7 @@ pipeline {
118127
steps {
119128
script {
120129
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
121-
docker.image('springci/spring-data-openjdk11-with-redis-6.2:latest').inside('-v $HOME:/tmp/jenkins-home') {
130+
docker.image("springci/spring-data-with-redis-6.2:${p['java.11.tag']}").inside(p['docker.java.inside.basic']) {
122131
sh 'PROFILE=java11 ci/test.sh'
123132
}
124133
}
@@ -136,7 +145,7 @@ pipeline {
136145
steps {
137146
script {
138147
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
139-
docker.image('springci/spring-data-openjdk15-with-redis-6.2:latest').inside('-v $HOME:/tmp/jenkins-home') {
148+
docker.image("springci/spring-data-with-redis-6.2:${p['java.15.tag']}").inside(p['docker.java.inside.basic']) {
140149
sh 'PROFILE=java11 ci/test.sh'
141150
}
142151
}
@@ -165,7 +174,7 @@ pipeline {
165174
steps {
166175
script {
167176
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
168-
docker.image('adoptopenjdk/openjdk8:latest').inside('-v $HOME:/tmp/jenkins-home') {
177+
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
169178
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' +
170179
'-Dartifactory.server=https://repo.spring.io ' +
171180
"-Dartifactory.username=${ARTIFACTORY_USR} " +

ci/openjdk11-redis-6.2/Dockerfile

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

36
# Copy Spring Data Redis's Makefile into the container
47
COPY ./Makefile /
58

69
RUN set -eux; \
10+
# sed -i -e 's/http/https/g' /etc/apt/sources.list ; \
711
apt-get update ; \
812
apt-get install -y build-essential ; \
9-
make work/redis/bin/redis-cli work/redis/bin/redis-server REDIS_VERSION=6.2.1; \
13+
make work/redis/bin/redis-cli work/redis/bin/redis-server REDIS_VERSION=${REDIS}; \
1014
chmod -R o+rw work; \
1115
apt-get clean; \
1216
rm -rf /var/lib/apt/lists/*;

ci/openjdk8-redis-6.2/Dockerfile

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

36
# Copy Spring Data Redis's Makefile into the container
47
COPY ./Makefile /
58

69
RUN set -eux; \
710
apt-get update ; \
811
apt-get install -y build-essential ; \
9-
make work/redis/bin/redis-cli work/redis/bin/redis-server REDIS_VERSION=6.2.1; \
12+
make work/redis/bin/redis-cli work/redis/bin/redis-server REDIS_VERSION=${REDIS}; \
1013
chmod -R o+rw work; \
1114
apt-get clean; \
1215
rm -rf /var/lib/apt/lists/*;

ci/pipeline.properties

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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
29+
artifactory.credentials=02bd1690-b54f-4c9f-819d-a77cb7a9822c

0 commit comments

Comments
 (0)