// Basic Pipeline def clusterCredsID = env.CLUSTER_CREDENTIALS ?: "cluster-creds" pipeline { environment { REGISTRY_URL = "us.icr.io" MAJOR_PREFIX = "1.0.0" RELEASE_NAME = "pbw-liberty-mariadb" DEPLOYMENT_NS = "default" } tools { maven 'Apache Maven 3.5.2' jdk 'Open JDK 8' } agent any stages { stage ('Initialize') { steps { sh '''#!/bin/bash if [ -z "${CLUSTER_NAME}" ]; then echo "FATAL ERROR: CLUSTER_NAME undefined, exiting pipeline" exit 22 else echo "CLUSTER_NAME set to ${CLUSTER_NAME}" fi if [ -z "${REGISTRY_NS}" ]; then echo "FATAL ERROR: REGISTRY_NS undefined, exiting pipeline" exit 22 else echo "REGISTRY_NS set to ${REGISTRY_NS}" fi if [ -z "${REGION}" ]; then echo "FATAL ERROR: REGION undefined, exiting pipeline" exit 22 else echo "REGION set to ${REGION}" fi if [ -z "${RESOURCE_GROUP}" ]; then echo "FATAL ERROR: RESOURCE_GROUP undefined, exiting pipeline" exit 22 else echo "RESOURCE_GROUP set to ${RESOURCE_GROUP}" fi if [ -z "${DEPLOYMENT_NS}" ]; then echo "FATAL ERROR: DEPLOYMENT_NS undefined, exiting pipeline" exit 22 else echo "DEPLOYMENT_NS set to ${DEPLOYMENT_NS}" fi if [ -z "${RELEASE_NAME}" ]; then echo "FATAL ERROR: RELEASE_NAME undefined, exiting pipeline" exit 22 else echo "RELEASE_NAME set to ${RELEASE_NAME}" fi if [ -z "${REGISTRY_NS}" ]; then echo "FATAL ERROR: REGISTRY_NS undefined, exiting pipeline" exit 22 else echo "REGISTRY_NS set to ${REGISTRY_NS}" fi ''' } } stage('Build application ear file') { steps { checkout scm sh 'mvn clean package' } } stage('Build Docker Image') { steps { script { echo "docker build -t ${REGISTRY_URL}/${REGISTRY_NS}/pbw-mariadb-web:${MAJOR_PREFIX}.${BUILD_NUMBER} ." sh 'docker build -t ${REGISTRY_URL}/${REGISTRY_NS}/pbw-mariadb-web:${MAJOR_PREFIX}.${BUILD_NUMBER} .' } } } stage('Push Docker Image to Registry') { steps { withCredentials([usernamePassword(credentialsId: clusterCredsID, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh """#!/bin/bash docker login -u ${USERNAME} -p ${PASSWORD} ${env.REGISTRY_URL} docker push ${env.REGISTRY_URL}/${env.REGISTRY_NS}/pbw-mariadb-web:${env.MAJOR_PREFIX}.${env.BUILD_NUMBER} """ } } } stage('Deploy new Docker Image') { steps { echo 'Deploying....' withCredentials([usernamePassword(credentialsId: clusterCredsID, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh """#!/bin/bash ibmcloud login --apikey ${PASSWORD} -r ${env.REGION} -g ${env.RESOURCE_GROUP} eval \$(ibmcloud ks cluster-config --cluster ${env.CLUSTER_NAME} --export) DEPLOYMENT=`kubectl --namespace=${env.DEPLOYMENT_NS} get deployments -l app=pbw-liberty-mariadb,component=web-app,release=${env.RELEASE_NAME} --no-headers -o name` if [ -z "\$DEPLOYMENT" ]; then echo "FATAL ERROR: Deployment not found, exiting pipeline" exit 22 else echo "Existing deployment found, uodating to point to image just created " fi kubectl --namespace=${env.DEPLOYMENT_NS} get \${DEPLOYMENT} --no-headers -o custom-columns=":metadata.name" # Update Deployment kubectl --namespace=${env.DEPLOYMENT_NS} set image \${DEPLOYMENT} ${env.RELEASE_NAME}-liberty=${env.REGISTRY_URL}/${env.REGISTRY_NS}/pbw-mariadb-web:${env.MAJOR_PREFIX}.${env.BUILD_NUMBER} kubectl --namespace=${env.DEPLOYMENT_NS} rollout status \${DEPLOYMENT} """ } } } } }