diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 00000000..80444a1d
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,116 @@
+def p = [:]
+node {
+ checkout scm
+ p = readProperties interpolate: true, file: 'ci/pipeline.properties'
+}
+
+pipeline {
+ agent none
+
+ triggers {
+ pollSCM 'H/10 * * * *'
+ }
+
+ options {
+ disableConcurrentBuilds()
+ buildDiscarder(logRotator(numToKeepStr: '14'))
+ }
+
+ stages {
+ stage("Docker images") {
+ parallel {
+ stage('Publish JDK 17 + Vault Docker image') {
+ when {
+ anyOf {
+ changeset "ci/openjdk17-vault/Dockerfile"
+ changeset "src/test/bash/install_vault.sh"
+ changeset "ci/pipeline.properties"
+ }
+ }
+ agent { label 'data' }
+ options { timeout(time: 20, unit: 'MINUTES') }
+
+ steps {
+ script {
+ def image = docker.build("springci/spring-vault-openjdk17-vault:${p['java.main.tag']}-${p['docker.vault.version']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg VAULT=${p['docker.vault.version']} -f ci/openjdk17-vault/Dockerfile .")
+ docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
+ image.push()
+ }
+ }
+ }
+ }
+ }
+ }
+
+ stage("test: baseline (Java 17)") {
+ when {
+ beforeAgent(true)
+ anyOf {
+ branch(pattern: "main|(\\d\\.\\d\\.x)", comparator: "REGEXP")
+ not { triggeredBy 'UpstreamCause' }
+ }
+ }
+ agent {
+ label 'data'
+ }
+ options { timeout(time: 30, unit: 'MINUTES') }
+ environment {
+ ARTIFACTORY = credentials("${p['artifactory.credentials']}")
+ }
+ steps {
+ script {
+ docker.image("harbor-repo.vmware.com/dockerhub-proxy-cache/springci/spring-vault-openjdk17-vault:${p['java.main.tag']}-${p['docker.vault.version']}").inside(p['docker.java.inside.basic']) {
+ sh 'src/test/bash/create_certificates.sh'
+ sh '/opt/vault/vault server -config=$(pwd)/src/test/bash/vault.conf &'
+ sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml clean dependency:list verify -Dsort -U -B'
+ }
+ }
+ }
+ }
+
+ stage('Release to artifactory') {
+ when {
+ beforeAgent(true)
+ anyOf {
+ branch(pattern: "main|(\\d\\.\\d\\.x)", comparator: "REGEXP")
+ not { triggeredBy 'UpstreamCause' }
+ }
+ }
+ agent {
+ label 'data'
+ }
+ options { timeout(time: 20, unit: 'MINUTES') }
+
+ environment {
+ ARTIFACTORY = credentials("${p['artifactory.credentials']}")
+ }
+
+ steps {
+ script {
+ docker.image("harbor-repo.vmware.com/dockerhub-proxy-cache/springci/spring-vault-openjdk17-vault:${p['java.main.tag']}-${p['docker.vault.version']}").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} " +
+ "-Dartifactory.password=${ARTIFACTORY_PSW} " +
+ "-Dartifactory.staging-repository=libs-snapshot-local " +
+ "-Dartifactory.build-name=spring-vault " +
+ "-Dartifactory.build-number=${BUILD_NUMBER} " +
+ '-Dmaven.test.skip=true clean deploy -U -B'
+ }
+ }
+ }
+ }
+ }
+
+ post {
+ changed {
+ script {
+ emailext(
+ subject: "[${currentBuild.fullDisplayName}] ${currentBuild.currentResult}",
+ mimeType: 'text/html',
+ recipientProviders: [[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']],
+ body: "${currentBuild.fullDisplayName} is reported as ${currentBuild.currentResult}")
+ }
+ }
+ }
+}
diff --git a/ci/openjdk17-vault/Dockerfile b/ci/openjdk17-vault/Dockerfile
new file mode 100644
index 00000000..9b6cfaa8
--- /dev/null
+++ b/ci/openjdk17-vault/Dockerfile
@@ -0,0 +1,24 @@
+ARG BASE
+FROM ${BASE}
+# Any ARG statements before FROM are cleared.
+
+ENV TZ=Etc/UTC
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Copy Vault's install file into the container
+
+COPY ./src/test/bash/install_vault.sh /opt
+
+ARG VAULT
+
+RUN set -eux && \
+ sed -i -e 's/archive.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list && \
+ sed -i -e 's/security.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list && \
+ sed -i -e 's/http/https/g' /etc/apt/sources.list && \
+ apt-get update && apt-get install -y apt-transport-https apt-utils gnupg2 wget unzip && \
+ echo ${TZ} > /etc/timezone && \
+ rm -rf /var/lib/apt/lists/*
+
+RUN set -eux && \
+ cd /opt && \
+ /opt/install_vault.sh -v ${VAULT}
diff --git a/ci/pipeline.properties b/ci/pipeline.properties
new file mode 100644
index 00000000..3dda7465
--- /dev/null
+++ b/ci/pipeline.properties
@@ -0,0 +1,17 @@
+# Java versions
+java.main.tag=17.0.3_7-jdk
+
+# Docker container images - standard
+docker.java.main.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.main.tag}
+
+# Supported versions of MongoDB
+docker.vault.version=1.11.1
+
+# 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
+artifactory.credentials=02bd1690-b54f-4c9f-819d-a77cb7a9822c
diff --git a/pom.xml b/pom.xml
index eab27a06..5c099cba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -599,7 +599,7 @@
- repo.spring.io
+ spring-libs-milestone
Spring Milestone Repository
https://repo.spring.io/libs-milestone-local
@@ -784,6 +784,71 @@
+
+
+
+ artifactory
+
+
+
+ spring-libs-snapshot
+ Spring Snapshot Repository
+ https://repo.spring.io/libs-snapshot-local
+
+
+
+
+
+
+
+
+
+
+
+ org.jfrog.buildinfo
+ artifactory-maven-plugin
+ 3.4.0
+
+
+ build-info
+
+ publish
+
+
+
+ false
+
+
+ {{artifactory.server}}
+ {{artifactory.username}}
+ {{artifactory.password}}
+ {{artifactory.staging-repository}}
+ {{artifactory.staging-repository}}
+
+
+ {{artifactory.build-name}}
+ {{artifactory.build-number}}
+ {{BUILD_URL}}
+
+
+
+
+
+
+
+
+
+
+
+
+ org.jfrog.buildinfo
+ artifactory-maven-plugin
+
+
+
+
+
+
diff --git a/settings.xml b/settings.xml
new file mode 100644
index 00000000..b3227cc1
--- /dev/null
+++ b/settings.xml
@@ -0,0 +1,29 @@
+
+
+
+
+ spring-plugins-release
+ ${env.ARTIFACTORY_USR}
+ ${env.ARTIFACTORY_PSW}
+
+
+ spring-libs-snapshot
+ ${env.ARTIFACTORY_USR}
+ ${env.ARTIFACTORY_PSW}
+
+
+ spring-libs-milestone
+ ${env.ARTIFACTORY_USR}
+ ${env.ARTIFACTORY_PSW}
+
+
+ spring-libs-release
+ ${env.ARTIFACTORY_USR}
+ ${env.ARTIFACTORY_PSW}
+
+
+
+
\ No newline at end of file
diff --git a/spring-vault-dependencies/pom.xml b/spring-vault-dependencies/pom.xml
index e9e6fc99..5c58d415 100644
--- a/spring-vault-dependencies/pom.xml
+++ b/spring-vault-dependencies/pom.xml
@@ -227,7 +227,7 @@
- repo.spring.io
+ spring-libs-milestone
Spring Milestone Repository
https://repo.spring.io/libs-milestone-local
@@ -283,6 +283,71 @@
+
+
+
+ artifactory
+
+
+
+ spring-libs-snapshot
+ Spring Snapshot Repository
+ https://repo.spring.io/libs-snapshot-local
+
+
+
+
+
+
+
+
+
+
+
+ org.jfrog.buildinfo
+ artifactory-maven-plugin
+ 3.4.0
+
+
+ build-info
+
+ publish
+
+
+
+ false
+
+
+ {{artifactory.server}}
+ {{artifactory.username}}
+ {{artifactory.password}}
+ {{artifactory.staging-repository}}
+ {{artifactory.staging-repository}}
+
+
+ {{artifactory.build-name}}
+ {{artifactory.build-number}}
+ {{BUILD_URL}}
+
+
+
+
+
+
+
+
+
+
+
+
+ org.jfrog.buildinfo
+ artifactory-maven-plugin
+
+
+
+
+
+