From c0d5fd7f5925e0f405c573e5b5b426e88eb891f2 Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Tue, 25 Jan 2022 14:19:07 -0600 Subject: [PATCH] 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. --- Jenkinsfile | 30 +++++++++++++++++++----------- ci/openjdk17-redis-6.2/Dockerfile | 9 ++++++--- ci/openjdk8-redis-6.2/Dockerfile | 7 +++++-- ci/pipeline.properties | 24 ++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 ci/pipeline.properties diff --git a/Jenkinsfile b/Jenkinsfile index 924608a74..17c184235 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,3 +1,9 @@ +def p = [:] +node { + checkout scm + p = readProperties interpolate: true, file: 'ci/pipeline.properties' +} + pipeline { agent none @@ -14,11 +20,12 @@ pipeline { stages { stage("Docker images") { parallel { - stage('Publish OpenJDK 8 + Redis 6.2 docker image') { + stage('Publish OpenJDK (main) + Redis 6.2 docker image') { when { anyOf { - changeset "ci/openjdk8-redis-6.2/**" + changeset "ci/openjdk8-redis-6.2/Dockerfile" changeset "Makefile" + changeset "ci/pipeline.properties" } } agent { label 'data' } @@ -26,18 +33,19 @@ pipeline { steps { script { - def image = docker.build("springci/spring-data-openjdk8-with-redis-6.2", "-f ci/openjdk8-redis-6.2/Dockerfile .") + 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 .") docker.withRegistry('', 'hub.docker.com-springbuildmaster') { image.push() } } } } - stage('Publish OpenJDK 17 + Redis 6.2 docker image') { + stage('Publish OpenJDK (LTS) + Redis 6.2 docker image') { when { anyOf { - changeset "ci/openjdk16-redis-6.2/**" + changeset "ci/openjdk17-redis-6.2/Dockerfile" changeset "Makefile" + changeset "ci/pipeline.properties" } } agent { label 'data' } @@ -45,7 +53,7 @@ pipeline { steps { script { - def image = docker.build("springci/spring-data-openjdk17-with-redis-6.2", "-f ci/openjdk17-redis-6.2/Dockerfile .") + def image = docker.build("springci/spring-data-with-redis-6.2:${p['java.lts.tag']}", "--build-arg BASE=${p['docker.java.lts.image']} --build-arg REDIS=${p['docker.redis.6.version']} -f ci/openjdk17-redis-6.2/Dockerfile .") docker.withRegistry('', 'hub.docker.com-springbuildmaster') { image.push() } @@ -55,7 +63,7 @@ pipeline { } } - stage("test: baseline (jdk8)") { + stage("test: baseline (main)") { when { beforeAgent(true) anyOf { @@ -73,7 +81,7 @@ pipeline { steps { script { docker.withRegistry('', 'hub.docker.com-springbuildmaster') { - docker.image('springci/spring-data-openjdk8-with-redis-6.2:latest').inside('-v $HOME:/tmp/jenkins-home') { + docker.image("springci/spring-data-with-redis-6.2:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) { sh 'PROFILE=none LONG_TESTS=true ci/test.sh' } } @@ -90,7 +98,7 @@ pipeline { } } parallel { - stage("test: baseline (jdk17)") { + stage("test: baseline (LTS)") { agent { label 'data' } @@ -101,7 +109,7 @@ pipeline { steps { script { docker.withRegistry('', 'hub.docker.com-springbuildmaster') { - docker.image('springci/spring-data-openjdk17-with-redis-6.2:latest').inside('-v $HOME:/tmp/jenkins-home') { + docker.image("springci/spring-data-with-redis-6.2:${p['java.lts.tag']}").inside(p['docker.java.inside.basic']) { sh 'PROFILE=java11 ci/test.sh' } } @@ -131,7 +139,7 @@ pipeline { steps { script { docker.withRegistry('', 'hub.docker.com-springbuildmaster') { - docker.image('adoptopenjdk/openjdk8:latest').inside('-v $HOME:/tmp/jenkins-home') { + docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) { sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' + '-Dartifactory.server=https://repo.spring.io ' + "-Dartifactory.username=${ARTIFACTORY_USR} " + diff --git a/ci/openjdk17-redis-6.2/Dockerfile b/ci/openjdk17-redis-6.2/Dockerfile index ded1bd1a1..b983e39fb 100644 --- a/ci/openjdk17-redis-6.2/Dockerfile +++ b/ci/openjdk17-redis-6.2/Dockerfile @@ -1,13 +1,16 @@ -FROM openjdk:17-bullseye +ARG BASE +FROM ${BASE} +# Any ARG statements before FROM are cleared. +ARG REDIS # Copy Spring Data Redis's Makefile into the container COPY ./Makefile / RUN set -eux; \ - sed -i -e 's/http/https/g' /etc/apt/sources.list ; \ +# sed -i -e 's/http/https/g' /etc/apt/sources.list ; \ apt-get update ; \ apt-get install -y build-essential ; \ - make work/redis/bin/redis-cli work/redis/bin/redis-server REDIS_VERSION=6.2.4; \ + make work/redis/bin/redis-cli work/redis/bin/redis-server REDIS_VERSION=${REDIS}; \ chmod -R o+rw work; \ apt-get clean; \ rm -rf /var/lib/apt/lists/*; diff --git a/ci/openjdk8-redis-6.2/Dockerfile b/ci/openjdk8-redis-6.2/Dockerfile index 5ef72c515..93a4cd295 100644 --- a/ci/openjdk8-redis-6.2/Dockerfile +++ b/ci/openjdk8-redis-6.2/Dockerfile @@ -1,4 +1,7 @@ -FROM adoptopenjdk/openjdk8:latest +ARG BASE +FROM ${BASE} +# Any ARG statements before FROM are cleared. +ARG REDIS # Copy Spring Data Redis's Makefile into the container COPY ./Makefile / @@ -6,7 +9,7 @@ COPY ./Makefile / RUN set -eux; \ apt-get update ; \ apt-get install -y build-essential ; \ - make work/redis/bin/redis-cli work/redis/bin/redis-server REDIS_VERSION=6.2.4; \ + make work/redis/bin/redis-cli work/redis/bin/redis-server REDIS_VERSION=${REDIS}; \ chmod -R o+rw work; \ apt-get clean; \ rm -rf /var/lib/apt/lists/*; diff --git a/ci/pipeline.properties b/ci/pipeline.properties new file mode 100644 index 000000000..5d91102d2 --- /dev/null +++ b/ci/pipeline.properties @@ -0,0 +1,24 @@ +# Java versions +java.main.tag=8u312-b07-jdk +java.next.tag=11.0.13_8-jdk +java.lts.tag=17.0.1_12-jdk + +# Docker container images - standard +docker.java.main.image=eclipse-temurin:${java.main.tag} +docker.java.next.image=eclipse-temurin:${java.next.tag} +docker.java.lts.image=eclipse-temurin:${java.lts.tag} + +# Supported versions of MongoDB +docker.mongodb.4.0.version=4.0.23 +docker.mongodb.4.4.version=4.4.4 +docker.mongodb.5.0.version=5.0.3 + +# Supported versions of Redis +docker.redis.6.version=6.2.4 + +# Supported versions of Cassandra +docker.cassandra.3.version=3.11.10 + +# Docker environment settings +docker.java.inside.basic=-v $HOME:/tmp/jenkins-home +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