267
Jenkinsfile
vendored
267
Jenkinsfile
vendored
@@ -1,3 +1,9 @@
|
||||
def p = [:]
|
||||
node {
|
||||
checkout scm
|
||||
p = readProperties interpolate: true, file: 'ci/pipeline.properties'
|
||||
}
|
||||
|
||||
pipeline {
|
||||
agent none
|
||||
|
||||
@@ -11,135 +17,135 @@ pipeline {
|
||||
}
|
||||
|
||||
stages {
|
||||
stage("Test: baseline (jdk8)") {
|
||||
agent {
|
||||
docker {
|
||||
image 'adoptopenjdk/openjdk8:latest'
|
||||
args '-v $HOME/.m2:/root/.m2'
|
||||
}
|
||||
}
|
||||
stage("Test: baseline (main)") {
|
||||
agent any
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
}
|
||||
steps {
|
||||
sh "PROFILE=distribute,convergence,testing ci/test.sh"
|
||||
script {
|
||||
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
|
||||
sh "PROFILE=distribute,convergence,testing ci/test.sh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage("Test other configurations") {
|
||||
when {
|
||||
beforeAgent(true)
|
||||
branch(pattern: "issue/backport|main|(\\d\\.\\d\\.x)", comparator: "REGEXP") // TODO: Drop backport
|
||||
}
|
||||
|
||||
parallel {
|
||||
stage("Test: Axiom 1.3)") {
|
||||
agent {
|
||||
docker {
|
||||
image 'adoptopenjdk/openjdk8:latest'
|
||||
args '-v $HOME/.m2:/root/.m2'
|
||||
}
|
||||
}
|
||||
stage("Test: Axiom 1.3 (main)") {
|
||||
agent any
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
}
|
||||
steps {
|
||||
sh "PROFILE=axiom-1.3,convergence,testing ci/test.sh"
|
||||
script {
|
||||
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
|
||||
sh "PROFILE=axiom-1.3,convergence,testing ci/test.sh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Test: spring-buildsnapshot (jdk8)") {
|
||||
agent {
|
||||
docker {
|
||||
image 'adoptopenjdk/openjdk8:latest'
|
||||
args '-v $HOME/.m2:/root/.m2'
|
||||
}
|
||||
}
|
||||
|
||||
stage("Test: spring-buildsnapshot (main)") {
|
||||
agent any
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
}
|
||||
steps {
|
||||
sh "PROFILE=spring-buildsnapshot,convergence,testing ci/test.sh"
|
||||
script {
|
||||
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
|
||||
sh "PROFILE=spring-buildsnapshot,convergence,testing ci/test.sh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Test: spring-security-5.6 (jdk8)") {
|
||||
agent {
|
||||
docker {
|
||||
image 'adoptopenjdk/openjdk8:latest'
|
||||
args '-v $HOME/.m2:/root/.m2'
|
||||
}
|
||||
}
|
||||
stage("Test: spring-security-5.6 (main)") {
|
||||
agent any
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
}
|
||||
steps {
|
||||
sh "PROFILE=spring-security-5.6,convergence,testing ci/test.sh"
|
||||
script {
|
||||
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
|
||||
sh "PROFILE=spring-security-5.6,convergence,testing ci/test.sh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Test: spring-security-5.7 (jdk8)") {
|
||||
agent {
|
||||
docker {
|
||||
image 'adoptopenjdk/openjdk8:latest'
|
||||
args '-v $HOME/.m2:/root/.m2'
|
||||
}
|
||||
}
|
||||
stage("Test: spring-security-5.7 (main)") {
|
||||
agent any
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
}
|
||||
steps {
|
||||
sh "PROFILE=spring-security-5.7,convergence,testing ci/test.sh"
|
||||
script {
|
||||
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
|
||||
sh "PROFILE=spring-security-5.7,convergence,testing ci/test.sh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Test: baseline (jdk11)") {
|
||||
agent {
|
||||
docker {
|
||||
image 'adoptopenjdk/openjdk11:latest'
|
||||
args '-v $HOME/.m2:/root/.m2'
|
||||
}
|
||||
}
|
||||
stage("Test: baseline (next)") {
|
||||
agent any
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
}
|
||||
steps {
|
||||
sh "PROFILE=distribute,java11,convergence,testing ci/test.sh"
|
||||
script {
|
||||
docker.image(p['docker.java.next.image']).inside(p['docker.java.inside.basic']) {
|
||||
sh "PROFILE=distribute,java11,convergence,testing ci/test.sh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Test: spring-buildsnapshot (jdk11)") {
|
||||
agent {
|
||||
docker {
|
||||
image 'adoptopenjdk/openjdk11:latest'
|
||||
args '-v $HOME/.m2:/root/.m2'
|
||||
}
|
||||
}
|
||||
stage("Test: spring-buildsnapshot (next)") {
|
||||
agent any
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
}
|
||||
steps {
|
||||
sh "PROFILE=spring-buildsnapshot,java11,convergence,testing ci/test.sh"
|
||||
script {
|
||||
docker.image(p['docker.java.next.image']).inside(p['docker.java.inside.basic']) {
|
||||
sh "PROFILE=spring-buildsnapshot,java11,convergence,testing ci/test.sh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Test: spring-buildsnapshot (jdk16)") {
|
||||
agent {
|
||||
docker {
|
||||
image 'adoptopenjdk/openjdk16:latest'
|
||||
args '-v $HOME/.m2:/root/.m2'
|
||||
}
|
||||
}
|
||||
stage("Test: spring-buildsnapshot (LTS)") {
|
||||
agent any
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
}
|
||||
steps {
|
||||
sh "PROFILE=spring-buildsnapshot,java11,convergence,testing ci/test.sh"
|
||||
script {
|
||||
docker.image(p['docker.java.lts.image']).inside(p['docker.java.inside.basic']) {
|
||||
sh "PROFILE=spring-buildsnapshot,java11,convergence,testing ci/test.sh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Deploy') {
|
||||
agent {
|
||||
docker {
|
||||
image 'springci/spring-ws-openjdk8-with-jq:latest'
|
||||
args '-v $HOME/.m2:/tmp/jenkins-home/.m2'
|
||||
}
|
||||
}
|
||||
agent any
|
||||
options { timeout(time: 20, unit: 'MINUTES') }
|
||||
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
SONATYPE = credentials('oss-login')
|
||||
KEYRING = credentials('spring-signing-secring.gpg')
|
||||
PASSPHRASE = credentials('spring-gpg-passphrase')
|
||||
@@ -148,52 +154,54 @@ pipeline {
|
||||
|
||||
steps {
|
||||
script {
|
||||
PROJECT_VERSION = sh(
|
||||
script: "ci/version.sh",
|
||||
returnStdout: true
|
||||
).trim()
|
||||
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
|
||||
PROJECT_VERSION = sh(
|
||||
script: "ci/version.sh",
|
||||
returnStdout: true
|
||||
).trim()
|
||||
|
||||
if (PROJECT_VERSION.matches(/.*-RC[0-9]+$/) || PROJECT_VERSION.matches(/.*-M[0-9]+$/)) {
|
||||
RELEASE_TYPE = "milestone"
|
||||
} else if (PROJECT_VERSION.endsWith('SNAPSHOT')) {
|
||||
RELEASE_TYPE = 'snapshot'
|
||||
} else if (PROJECT_VERSION.matches(/.*\.[0-9]+$/)) {
|
||||
RELEASE_TYPE = 'release'
|
||||
} else {
|
||||
RELEASE_TYPE = 'snapshot'
|
||||
}
|
||||
if (PROJECT_VERSION.matches(/.*-RC[0-9]+$/) || PROJECT_VERSION.matches(/.*-M[0-9]+$/)) {
|
||||
RELEASE_TYPE = "milestone"
|
||||
} else if (PROJECT_VERSION.endsWith('SNAPSHOT')) {
|
||||
RELEASE_TYPE = 'snapshot'
|
||||
} else if (PROJECT_VERSION.matches(/.*\.[0-9]+$/)) {
|
||||
RELEASE_TYPE = 'release'
|
||||
} else {
|
||||
RELEASE_TYPE = 'snapshot'
|
||||
}
|
||||
|
||||
if (RELEASE_TYPE == 'release') {
|
||||
if (RELEASE_TYPE == 'release') {
|
||||
|
||||
STAGING_REPOSITORY_ID = sh(
|
||||
script: "ci/rc-open.sh",
|
||||
returnStdout: true
|
||||
).readLines()
|
||||
.findAll{ line -> line.contains("<repository>") && !line.contains("%s") }
|
||||
.collect{ s -> s.substring(s.indexOf("<repository>") + "<repository>".length(), s.indexOf("</repository>")) }
|
||||
.inject(0){ first, second -> second } // find the last entry, a.k.a. the most recent staging repository id
|
||||
STAGING_REPOSITORY_ID = sh(
|
||||
script: "ci/rc-open.sh",
|
||||
returnStdout: true
|
||||
).readLines()
|
||||
.findAll{ line -> line.contains("<repository>") && !line.contains("%s") }
|
||||
.collect{ s -> s.substring(s.indexOf("<repository>") + "<repository>".length(), s.indexOf("</repository>")) }
|
||||
.inject(0){ first, second -> second } // find the last entry, a.k.a. the most recent staging repository id
|
||||
|
||||
sh "ci/build-and-deploy-to-maven-central.sh ${PROJECT_VERSION} ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/rc-close.sh ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/smoke-test-against-maven-central.sh ${PROJECT_VERSION} ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/rc-release.sh ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/build-and-deploy-to-maven-central.sh ${PROJECT_VERSION} ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/rc-close.sh ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/smoke-test-against-maven-central.sh ${PROJECT_VERSION} ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/rc-release.sh ${STAGING_REPOSITORY_ID}"
|
||||
|
||||
slackSend(
|
||||
color: (currentBuild.currentResult == 'SUCCESS') ? 'good' : 'danger',
|
||||
channel: '#spring-ws',
|
||||
message: "Spring WS ${PROJECT_VERSION} is released to Maven Central!")
|
||||
} else {
|
||||
|
||||
sh "ci/build-and-deploy-to-artifactory.sh ${RELEASE_TYPE}"
|
||||
|
||||
// TODO: Resolve smoke testing against Artifactory
|
||||
// sh "ci/smoke-test-against-artifactory.sh ${PROJECT_VERSION}"
|
||||
|
||||
if (RELEASE_TYPE == 'milestone') {
|
||||
slackSend(
|
||||
color: (currentBuild.currentResult == 'SUCCESS') ? 'good' : 'danger',
|
||||
channel: '#spring-ws',
|
||||
message: "Spring WS ${PROJECT_VERSION} is released to Artifactory!")
|
||||
message: "Spring WS ${PROJECT_VERSION} is released to Maven Central!")
|
||||
} else {
|
||||
|
||||
sh "ci/build-and-deploy-to-artifactory.sh ${RELEASE_TYPE}"
|
||||
|
||||
// TODO: Resolve smoke testing against Artifactory
|
||||
// sh "ci/smoke-test-against-artifactory.sh ${PROJECT_VERSION}"
|
||||
|
||||
if (RELEASE_TYPE == 'milestone') {
|
||||
slackSend(
|
||||
color: (currentBuild.currentResult == 'SUCCESS') ? 'good' : 'danger',
|
||||
channel: '#spring-ws',
|
||||
message: "Spring WS ${PROJECT_VERSION} is released to Artifactory!")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -207,26 +215,23 @@ pipeline {
|
||||
branch 'release-3.1.x'
|
||||
}
|
||||
}
|
||||
agent {
|
||||
docker {
|
||||
image 'adoptopenjdk/openjdk8:latest'
|
||||
args '-v $HOME/.m2:/tmp/jenkins-home/.m2'
|
||||
}
|
||||
}
|
||||
agent any
|
||||
options { timeout(time: 20, unit: 'MINUTES') }
|
||||
|
||||
environment {
|
||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pdistribute,docs ' +
|
||||
'-Dartifactory.server=https://repo.spring.io ' +
|
||||
"-Dartifactory.username=${ARTIFACTORY_USR} " +
|
||||
"-Dartifactory.password=${ARTIFACTORY_PSW} " +
|
||||
"-Dartifactory.distribution-repository=temp-private-local " +
|
||||
'-Dmaven.test.skip=true -Dmaven.deploy.skip=true deploy -B'
|
||||
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 -Pjakarta-ee-10,distribute,docs ' +
|
||||
'-Dartifactory.server=https://repo.spring.io ' +
|
||||
"-Dartifactory.username=${ARTIFACTORY_USR} " +
|
||||
"-Dartifactory.password=${ARTIFACTORY_PSW} " +
|
||||
"-Dartifactory.distribution-repository=temp-private-local " +
|
||||
'-Dmaven.test.skip=true -Dmaven.deploy.skip=true deploy -B'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
FROM adoptopenjdk/openjdk8:latest
|
||||
|
||||
RUN apt-get update && apt-get install -y jq gpg
|
||||
|
||||
RUN apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
15
ci/pipeline.properties
Normal file
15
ci/pipeline.properties
Normal file
@@ -0,0 +1,15 @@
|
||||
# Java versions
|
||||
java.main.tag=8u362-b09-jdk-focal
|
||||
java.next.tag=11.0.18_10-jdk-focal
|
||||
java.lts.tag=17.0.6_10-jdk-focal
|
||||
|
||||
# Docker container images - standard
|
||||
docker.java.main.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.main.tag}
|
||||
docker.java.next.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.next.tag}
|
||||
docker.java.lts.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.lts.tag}
|
||||
|
||||
# Docker environment settings
|
||||
docker.java.inside.basic=-v $HOME:/tmp/jenkins-home
|
||||
|
||||
# Credentials
|
||||
artifactory.credentials=02bd1690-b54f-4c9f-819d-a77cb7a9822c
|
||||
@@ -2,5 +2,9 @@
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
mkdir -p /tmp/jenkins-home/.m2/spring-ws
|
||||
chown -R 1001:1001 .
|
||||
|
||||
MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" \
|
||||
./mvnw -s settings.xml -P${PROFILE} clean dependency:list test -Dsort -B
|
||||
./mvnw -s settings.xml \
|
||||
-P${PROFILE} clean dependency:list test -Dsort -B -Dmaven.repo.local=/tmp/jenkins-home/.m2/spring-ws
|
||||
|
||||
Reference in New Issue
Block a user