Files
spring-session-data-geode/Jenkinsfile
John Blum 9f545693eb Refactor and optimize the Jenkins CI pipeline build.
Include pipeline.properties to parameterize the Jenkins pipeline build.

Refactor all shell scripts to reflect Jenkins build changes and Spring Build Conventions Gradle Plugin changes.
2022-03-17 10:57:34 -07:00

140 lines
3.9 KiB
Groovy

def p = [:]
node {
checkout scm
p = readProperties interpolate: true, file: 'ci/pipeline.properties'
}
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
disableConcurrentBuilds()
}
triggers {
cron('@daily')
}
stages {
stage('Build') {
options {
timeout(time: 15, unit: "MINUTES")
}
steps {
script {
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
docker.image(p['docker.container.image.java.main']).inside(p['docker.container.inside.env.full']) {
sh "echo 'Setup build environment...'"
sh "ci/setup.sh"
// Cleanup any prior build system resources
try {
sh "echo 'Clean up GemFire/Geode files & build artifacts...'"
sh "ci/cleanupGemFiles.sh"
sh "ci/cleanupArtifacts.sh"
}
catch (ignore) { }
// Run the SBDG project Gradle build using JDK 8 inside Docker
try {
sh "echo 'Building SSDG...'"
sh "ci/check.sh"
}
catch (e) {
currentBuild.result = "FAILED: build"
throw e
}
finally {
junit '**/build/test-results/*/*.xml'
}
}
}
}
}
}
stage ('Deploy Docs') {
options {
timeout(time: 15, unit: "MINUTES")
}
steps {
script {
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
docker.image(p['docker.container.image.java.main']).inside(p['docker.container.inside.env.basic']) {
withCredentials([file(credentialsId: 'docs.spring.io-jenkins_private_ssh_key', variable: 'DEPLOY_SSH_KEY')]) {
try {
sh "ci/deployDocs.sh"
}
catch (e) {
currentBuild.result = "FAILED: deploy docs"
throw e
}
}
}
}
}
}
}
stage ('Deploy Artifacts') {
options {
timeout(time: 15, unit: "MINUTES")
}
steps {
script {
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
docker.image(p['docker.container.image.java.main']).inside(p['docker.container.inside.env.basic']) {
withCredentials([file(credentialsId: 'spring-signing-secring.gpg', variable: 'SIGNING_KEYRING_FILE')]) {
withCredentials([string(credentialsId: 'spring-gpg-passphrase', variable: 'SIGNING_PASSWORD')]) {
withCredentials([usernamePassword(credentialsId: 'oss-token', passwordVariable: 'OSSRH_PASSWORD', usernameVariable: 'OSSRH_USERNAME')]) {
withCredentials([usernamePassword(credentialsId: '02bd1690-b54f-4c9f-819d-a77cb7a9822c', usernameVariable: 'ARTIFACTORY_USERNAME', passwordVariable: 'ARTIFACTORY_PASSWORD')]) {
try {
sh "ci/deployArtifacts.sh"
}
catch (e) {
currentBuild.result = "FAILED: deploy artifacts"
throw e
}
}
}
}
}
}
}
}
}
}
}
post {
changed {
script {
def BUILD_SUCCESS = hudson.model.Result.SUCCESS.toString()
def buildStatus = currentBuild.result
def buildNotSuccess = !BUILD_SUCCESS.equals(buildStatus)
def previousBuildStatus = currentBuild.previousBuild?.result
def previousBuildNotSuccess = !BUILD_SUCCESS.equals(previousBuildStatus)
if (buildNotSuccess || previousBuildNotSuccess) {
def RECIPIENTS = [[$class: 'DevelopersRecipientProvider'], [$class: 'RequesterRecipientProvider']]
def subject = "${buildStatus}: Build ${env.JOB_NAME} ${env.BUILD_NUMBER} status is now ${buildStatus}"
def details = "The build status changed to ${buildStatus}. For details see ${env.BUILD_URL}"
emailext(subject: subject, body: details, recipientProviders: RECIPIENTS, to: "$GEODE_TEAM_EMAILS")
slackSend(color: (currentBuild.currentResult == 'SUCCESS') ? 'good' : 'danger',
channel: '#spring-data-dev',
message: "${currentBuild.fullDisplayName} - `${currentBuild.currentResult}`\n${env.BUILD_URL}")
}
}
}
}
}