diff --git a/Jenkinsfile b/Jenkinsfile index cc0ffa98a..09c4710e6 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,48 +20,57 @@ pipeline { stages { stage("Docker images") { parallel { - stage('Publish JDK 8 + Cassandra 3.11') { + stage('Publish JDK (main) + Cassandra 3.11') { when { - changeset "ci/openjdk8-cassandra-3.11/**" + anyOf { + changeset "ci/openjdk8-cassandra-3.11/**" + changeset "ci/pipeline.properties" + } } agent { label 'data' } options { timeout(time: 30, unit: 'MINUTES') } steps { script { - def image = docker.build("springci/spring-data-openjdk8-cassandra-3.11", "ci/openjdk8-cassandra-3.11/") + 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/") docker.withRegistry('', 'hub.docker.com-springbuildmaster') { image.push() } } } } - stage('Publish JDK 11 + Cassandra 3.11') { + stage('Publish JDK (next) + Cassandra 3.11') { when { - changeset "ci/openjdk11-8-cassandra-3.11/**" + anyOf { + changeset "ci/openjdk11-8-cassandra-3.11/**" + changeset "ci/pipeline.properties" + } } agent { label 'data' } options { timeout(time: 30, unit: 'MINUTES') } steps { script { - def image = docker.build("springci/spring-data-openjdk11-8-cassandra-3.11", "ci/openjdk11-8-cassandra-3.11/") + 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/") docker.withRegistry('', 'hub.docker.com-springbuildmaster') { image.push() } } } } - stage('Publish JDK 17 + Cassandra 3.11') { + stage('Publish JDK (LTS) + Cassandra 3.11') { when { - changeset "ci/openjdk17-8-cassandra-3.11/**" + anyOf { + changeset "ci/openjdk17-8-cassandra-3.11/**" + changeset "ci/pipeline.properties" + } } agent { label 'data' } options { timeout(time: 30, unit: 'MINUTES') } steps { script { - def image = docker.build("springci/spring-data-openjdk17-8-cassandra-3.11", "ci/openjdk17-8-cassandra-3.11/") + 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/") docker.withRegistry('', 'hub.docker.com-springbuildmaster') { image.push() } @@ -65,7 +80,7 @@ pipeline { } } - stage("test: baseline (jdk8)") { + stage("test: baseline (main)") { when { beforeAgent(true) anyOf { @@ -83,7 +98,7 @@ pipeline { steps { script { docker.withRegistry('', 'hub.docker.com-springbuildmaster') { - docker.image('springci/spring-data-openjdk8-cassandra-3.11:latest').inside('-v $HOME:/tmp/jenkins-home') { + docker.image("springci/spring-data-with-cassandra-3.11:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) { sh 'mkdir -p /tmp/jenkins-home' sh 'JAVA_HOME=/opt/java/openjdk /opt/cassandra/bin/cassandra -R &' 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 { } } parallel { - stage("test: baseline (jdk11)") { + stage("test: baseline (next)") { agent { label 'data' } @@ -113,7 +128,7 @@ pipeline { steps { script { docker.withRegistry('', 'hub.docker.com-springbuildmaster') { - docker.image('springci/spring-data-openjdk11-8-cassandra-3.11:latest').inside('-v $HOME:/tmp/jenkins-home') { + docker.image("springci/spring-data-with-cassandra-3.11:${p['java.next.tag']}").inside(p['docker.java.inside.basic']) { sh 'mkdir -p /tmp/jenkins-home' sh 'JAVA_HOME=/opt/java/openjdk8 /opt/cassandra/bin/cassandra -R &' 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 { } } } - stage("test: baseline (jdk17)") { + stage("test: baseline (LTS)") { agent { label 'data' } @@ -133,7 +148,7 @@ pipeline { steps { script { docker.withRegistry('', 'hub.docker.com-springbuildmaster') { - docker.image('springci/spring-data-openjdk17-8-cassandra-3.11:latest').inside('-v $HOME:/tmp/jenkins-home') { + docker.image("springci/spring-data-with-cassandra-3.11:${p['java.lts.tag']}").inside(p['docker.java.inside.basic']) { sh 'mkdir -p /tmp/jenkins-home' sh 'JAVA_HOME=/opt/java/openjdk8 /opt/cassandra/bin/cassandra -R &' 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 { 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 'mkdir -p /tmp/jenkins-home' sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' + '-Dartifactory.server=https://repo.spring.io ' + diff --git a/ci/openjdk11-8-cassandra-3.11/Dockerfile b/ci/openjdk11-8-cassandra-3.11/Dockerfile index 64354f436..2ddde2c3e 100644 --- a/ci/openjdk11-8-cassandra-3.11/Dockerfile +++ b/ci/openjdk11-8-cassandra-3.11/Dockerfile @@ -1,7 +1,10 @@ -FROM adoptopenjdk/openjdk11:latest +ARG BASE +FROM ${BASE} +# Any ARG statements before FROM are cleared. +ARG CASSANDRA RUN set -eux; \ - CASSANDRA_URL='https://archive.apache.org/dist/cassandra/3.11.10/apache-cassandra-3.11.10-bin.tar.gz'; \ + CASSANDRA_URL="https://archive.apache.org/dist/cassandra/${CASSANDRA}/apache-cassandra-${CASSANDRA}-bin.tar.gz"; \ sed -i -e 's/http/https/g' /etc/apt/sources.list ; \ curl -LfsSo /tmp/cassandra.tar.gz ${CASSANDRA_URL}; \ mkdir -p /opt/cassandra /opt/cassandra/data /opt/cassandra/logs; \ diff --git a/ci/openjdk17-8-cassandra-3.11/Dockerfile b/ci/openjdk17-8-cassandra-3.11/Dockerfile index 0a09eebe8..3f266a81b 100644 --- a/ci/openjdk17-8-cassandra-3.11/Dockerfile +++ b/ci/openjdk17-8-cassandra-3.11/Dockerfile @@ -1,7 +1,10 @@ -FROM openjdk:17-bullseye +ARG BASE +FROM ${BASE} +# Any ARG statements before FROM are cleared. +ARG CASSANDRA RUN set -eux; \ - CASSANDRA_URL='https://archive.apache.org/dist/cassandra/3.11.10/apache-cassandra-3.11.10-bin.tar.gz'; \ + CASSANDRA_URL="https://archive.apache.org/dist/cassandra/${CASSANDRA}/apache-cassandra-${CASSANDRA}-bin.tar.gz"; \ sed -i -e 's/http/https/g' /etc/apt/sources.list ; \ curl -LfsSo /tmp/cassandra.tar.gz ${CASSANDRA_URL}; \ mkdir -p /opt/cassandra /opt/cassandra/data /opt/cassandra/logs; \ diff --git a/ci/openjdk8-cassandra-3.11/Dockerfile b/ci/openjdk8-cassandra-3.11/Dockerfile index 6519226c7..c4f7167d5 100644 --- a/ci/openjdk8-cassandra-3.11/Dockerfile +++ b/ci/openjdk8-cassandra-3.11/Dockerfile @@ -1,7 +1,10 @@ -FROM adoptopenjdk/openjdk8:latest +ARG BASE +FROM ${BASE} +# Any ARG statements before FROM are cleared. +ARG CASSANDRA RUN set -eux; \ - CASSANDRA_URL='https://archive.apache.org/dist/cassandra/3.11.10/apache-cassandra-3.11.10-bin.tar.gz'; \ + CASSANDRA_URL="https://archive.apache.org/dist/cassandra/${CASSANDRA}/apache-cassandra-${CASSANDRA}-bin.tar.gz"; \ sed -i -e 's/http/https/g' /etc/apt/sources.list ; \ curl -LfsSo /tmp/cassandra.tar.gz ${CASSANDRA_URL}; \ mkdir -p /opt/cassandra /opt/cassandra/data /opt/cassandra/logs; \ 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