From 75244b418703da1ee7367c61108d70863878f6c2 Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Tue, 25 Jan 2022 16:06:57 -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 #1214. --- Jenkinsfile | 15 ++++++++++++--- ci/openjdk17-8-cassandra-3.11/Dockerfile | 7 +++++-- ci/pipeline.properties | 23 +++++++++++++++++++++++ 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 ci/pipeline.properties diff --git a/Jenkinsfile b/Jenkinsfile index dd5ccd2cd..1bb66d18e 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 @@ -16,14 +22,17 @@ pipeline { parallel { stage('Publish JDK 17 + 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() } @@ -81,7 +90,7 @@ pipeline { steps { script { docker.withRegistry('', 'hub.docker.com-springbuildmaster') { - docker.image('openjdk:17-bullseye').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/openjdk17-8-cassandra-3.11/Dockerfile b/ci/openjdk17-8-cassandra-3.11/Dockerfile index d33f3627e..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.11/apache-cassandra-3.11.11-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..59c20600e --- /dev/null +++ b/ci/pipeline.properties @@ -0,0 +1,23 @@ +# Java versions +java.main.tag=17.0.2_8-jdk + +# Docker container images - standard +docker.java.main.image=eclipse-temurin:${java.main.tag} + +# Supported versions of MongoDB +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.11 + +# 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 + +# Credentials +docker.registry= +docker.credentials=hub.docker.com-springbuildmaster