Refactor Jenkinsfile to use Bash shell scripts to execute individual, isolated Steps in the Staged Jenkins CI build Pipeline.

This commit is contained in:
John Blum
2021-04-05 14:11:30 -07:00
parent 01347ac4af
commit 7144a5e4af

140
Jenkinsfile vendored
View File

@@ -21,58 +21,58 @@ pipeline {
stages {
stage('Build') {
options {
timeout(time: 15, unit: "MINUTES")
}
steps {
script {
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
docker.image('adoptopenjdk/openjdk8:latest').inside('-v $HOME:/tmp/jenkins-home -v /var/run/docker.sock:/var/run/docker.sock') {
try {
stage('Build') {
options {
timeout(time: 15, unit: "MINUTES")
}
steps {
script {
docker.withRegistry('', 'hub.docker.com-springbuildmaster') {
docker.image('adoptopenjdk/openjdk8:latest').inside('-u root -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v $HOME:/tmp/jenkins-home') {
try {
sh 'rm -Rf ./.m2'
sh 'rm -Rf ./.gradle'
sh 'rm -Rf `find . -name "BACKUPDEFAULT*"`'
sh 'rm -Rf `find . -name "ConfigDiskDir*"`'
sh 'rm -Rf `find . -name "locator*" | grep -v "src" | grep -v "locator-application"`'
sh 'rm -Rf `find . -name "newDB"`'
sh 'rm -Rf `find . -name "server" | grep -v "src"`'
sh 'rm -Rf `find . -name "*.log"`'
}
catch (ignore) { }
// Cleanup any prior build system resources
try {
sh "ci/cleanupGemFiles.sh"
sh "ci/cleanupArtifacts.sh"
}
catch (ignore) { }
// Run the SBDG project Gradle build using JDK 8 inside Docker
try {
sh 'GRADLE_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./gradlew --no-daemon --refresh-dependencies --stacktrace clean check'
}
catch (e) {
currentBuild.result = "FAILED: build"
}
finally {
junit '**/build/test-results/*/*.xml'
// Run the SBDG project Gradle build using JDK 8 inside Docker
try {
sh "docker login --username ${DOCKER_HUB_USR} --password ${DOCKER_HUB_PSW}"
sh "ci/check.sh"
}
catch (e) {
currentBuild.result = "FAILED: build"
throw e
}
finally {
junit '**/build/test-results/*/*.xml'
}
}
}
}
}
}
}
stage ('Deploy') {
parallel {
stage ('Deploy Artifacts') {
steps {
script {
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')]) {
withEnv(["JAVA_HOME=${tool 'jdk8'}"]) {
try {
sh 'GRADLE_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./gradlew deployArtifacts finalizeDeployArtifacts --no-daemon --refresh-dependencies --stacktrace -Psigning.secretKeyRingFile=$SIGNING_KEYRING_FILE -Psigning.keyId=$SPRING_SIGNING_KEYID -Psigning.password=$SIGNING_PASSWORD -PossrhUsername=$OSSRH_USERNAME -PossrhPassword=$OSSRH_PASSWORD -PartifactoryUsername=$ARTIFACTORY_USERNAME -PartifactoryPassword=$ARTIFACTORY_PASSWORD'
}
catch (e) {
currentBuild.result = "FAILED: deploy artifacts"
stage ('Deploy') {
parallel {
stage ('Deploy Artifacts') {
steps {
script {
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')]) {
withEnv(["JAVA_HOME=${tool 'jdk8'}"]) {
try {
sh "ci/deployArtifacts.sh"
}
catch (e) {
currentBuild.result = "FAILED: deploy artifacts"
throw e
}
}
}
}
@@ -81,17 +81,18 @@ pipeline {
}
}
}
}
stage ('Deploy Docs') {
steps {
script {
withCredentials([file(credentialsId: 'docs.spring.io-jenkins_private_ssh_key', variable: 'DEPLOY_SSH_KEY')]) {
withEnv(["JAVA_HOME=${tool 'jdk8'}"]) {
try {
sh 'GRADLE_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./gradlew --no-daemon --refresh-dependencies --stacktrace -PdeployDocsSshKeyPath=$DEPLOY_SSH_KEY -PdeployDocsSshUsername=$SPRING_DOCS_USERNAME deployDocs'
}
catch (e) {
currentBuild.result = "FAILED: deploy docs"
stage ('Deploy Docs') {
steps {
script {
withCredentials([file(credentialsId: 'docs.spring.io-jenkins_private_ssh_key', variable: 'DEPLOY_SSH_KEY')]) {
withEnv(["JAVA_HOME=${tool 'jdk8'}"]) {
try {
sh "ci/deployDocs.sh"
}
catch (e) {
currentBuild.result = "FAILED: deploy docs"
throw e
}
}
}
}
@@ -100,24 +101,25 @@ pipeline {
}
}
}
finally {
stage ('Notify') {
steps {
script {
stage ('Notify') {
steps {
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)
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) {
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}"
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")
emailext(subject: subject, body: details, recipientProviders: RECIPIENTS, to: "$GEODE_TEAM_EMAILS")
}
}
}
}