You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			278 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Groovy
		
	
			
		
		
	
	
			278 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Groovy
		
	
| /*
 | |
|  * spring-music-cf service pipeline, file lives inside of app repository.
 | |
|  *
 | |
|  * See https://jenkins.io/doc/book/pipeline/syntax/ for details on the file format.
 | |
|  */
 | |
| 
 | |
| // Branch to build
 | |
| def gitBranch
 | |
| 
 | |
| // Build version of parcel-shipping-service
 | |
| def deployVersion
 | |
| 
 | |
| // Whether the build will be deployed to production
 | |
| def officialBuild
 | |
| def deployToDev
 | |
| def deployToTest
 | |
| def deployToAze
 | |
| 
 | |
| // Pipeline should run build stage
 | |
| def doBuild
 | |
| 
 | |
| pipeline {
 | |
|     // Choose the Jenkins VM configuration (definitions are in vault)
 | |
|     agent {
 | |
|         node {
 | |
|             label 'pipes-docker-agent'
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // A pipeline consists of a series of stages
 | |
|     stages {
 | |
|         stage('Ingest Build Options') {
 | |
|             steps {
 | |
|                 echo 'Parsing options passed in through Jenkins'
 | |
|                 echo ''
 | |
|                 echo "Unparsed content: ${params}"
 | |
| 
 | |
|                 script {
 | |
|                     // Use version passed in through Jenkins if possible; otherwise, get new version
 | |
|                     deployVersion = params.ARTIFACT_VERSION
 | |
| 
 | |
|                     if (!deployVersion) {
 | |
|                         deployVersion = sh(returnStdout: true, script: "./version.sh").trim()
 | |
|                     }
 | |
| 
 | |
|                     echo "deployVersion: '${deployVersion}'"
 | |
|                 }
 | |
| 
 | |
|                 script {
 | |
|                     gitBranch = params.GIT_BRANCH
 | |
| 
 | |
|                     echo "gitBranch: '${gitBranch}'"
 | |
|                 }
 | |
| 
 | |
|                 script{
 | |
|                     officialBuild = (params.OFFICIAL_BUILD as boolean)
 | |
|                      deployToDev = (params.deploy_to_dev as boolean)
 | |
|                      deployToTest = (params.deploy_to_test as boolean)
 | |
|                      deployToAze = (params.deploy_to_aze as boolean)
 | |
| 
 | |
|                     echo "officialBuild: '${officialBuild}'"
 | |
|                 }
 | |
| 
 | |
|                 script {
 | |
|                     doBuild = (params.ARTIFACT_VERSION == '')
 | |
| 
 | |
|                     echo "doBuild: ${doBuild}"
 | |
|                 }
 | |
| 
 | |
|                 // validate the combination of flags passed
 | |
|                 script {
 | |
|                     if (doBuild) {
 | |
|                         echo "Building version '${deployVersion}'"
 | |
|                     }
 | |
| 
 | |
|                     if (!doBuild) {
 | |
|                         echo "Deploying previous build ${deployVersion}"
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|        /* stage('Checkout Config Repository') {
 | |
|             when { expression { doBuild } }
 | |
|             steps {
 | |
|                 echo 'Checkout Config Repository'
 | |
|                 dir("./../parcel-shipping-service-config") {
 | |
|                     git branch: "master",
 | |
|                     credentialsId: 'github_credential',
 | |
|                     url: 'https://github.gapinc.com/parcel-shipping/parcel-shipping-service-config.git'
 | |
|                 }
 | |
|             }
 | |
|         }*/
 | |
| 
 | |
|         stage('Build Artifacts') {
 | |
|             when { expression { doBuild } }
 | |
|             steps {
 | |
|                 echo 'Build, deploy to Artifactory'
 | |
| 
 | |
|               /*  withCredentials(bindings: [
 | |
|                                     sshUserPrivateKey(credentialsId: 'pss-prod-rsakey', keyFileVariable: 'PSS_PROD_KEY', passphraseVariable: 'PSS_PROD_PASSPHRASE', usernameVariable: 'PSS_PROD_USERNAME'),
 | |
|                                     sshUserPrivateKey(credentialsId: 'pss-dev-rsakey', keyFileVariable: 'PSS_DEV_KEY', passphraseVariable: 'PSS_DEV_PASSPHRASE', usernameVariable: 'PSS_DEV_USERNAME')
 | |
|                                     ]){
 | |
|                                     sh "./cpfile.sh $PSS_DEV_KEY 'src/main/resources/pssdev.rsa'"
 | |
|                                     sh "./cpfile.sh $PSS_PROD_KEY 'src/main/resources/pssprod.rsa'"
 | |
|                                 }
 | |
| 
 | |
|                 withCredentials(bindings: [ string(credentialsId: 'pss-oci-sso-wallet-dev', variable: 'PSS_OCI_SSO_WALLET_DEV'),
 | |
|                                     string(credentialsId: 'pss-oci-sso-p12-dev', variable: 'PSS_OCI_SSO_P12_DEV'),
 | |
|                                     string(credentialsId: 'pss-oci-sso-wallet-test', variable: 'PSS_OCI_SSO_WALLET_TEST'),
 | |
|                                     string(credentialsId: 'pss-oci-sso-p12-test', variable: 'PSS_OCI_SSO_P12_TEST')]) {
 | |
|                     sh "mkdir -p src/main/resources/wallet"
 | |
|                     sh "./oci_wallet_cpfile.sh $PSS_OCI_SSO_WALLET_DEV 'src/main/resources/wallet' 'dev' 'dev/cwallet.sso'"
 | |
|                     sh "./oci_wallet_cpfile.sh $PSS_OCI_SSO_P12_DEV 'src/main/resources/wallet' 'dev' 'dev/ewallet.p12'"
 | |
|                     sh "./oci_wallet_cpfile.sh $PSS_OCI_SSO_WALLET_TEST 'src/main/resources/wallet' 'test' 'test/cwallet.sso'"
 | |
|                     sh "./oci_wallet_cpfile.sh $PSS_OCI_SSO_P12_TEST 'src/main/resources/wallet' 'test' 'test/ewallet.p12'"
 | |
|                 }
 | |
| 
 | |
|                 withCredentials(bindings: [ string(credentialsId: 'pss-confluent-client-keystore-dev-jks', variable: 'PSS_CONFLUENT_CLIENT_KEYSTORE_DEV_JKS'),
 | |
|                                           string(credentialsId: 'pss-confluent-client-keystore-stage-jks', variable: 'PSS_CONFLUENT_CLIENT_KEYSTORE_STAGE_JKS'),
 | |
|                                           string(credentialsId: 'pss-confluent-client-keystore-prod-jks', variable: 'PSS_CONFLUENT_CLIENT_KEYSTORE_PROD_JKS'),
 | |
|                                           string(credentialsId: 'pss-confluent-client-truststore-jks', variable: 'PSS_CONFLUENT_CLIENT_TRUSTSTORE_JKS')]) {
 | |
|                   sh "./oci_wallet_cpfile.sh $PSS_CONFLUENT_CLIENT_KEYSTORE_DEV_JKS 'src/main/resources' 'clientSSL' 'clientSSL/confluent.client.keystore.dev.jks'"
 | |
|                   sh "./oci_wallet_cpfile.sh $PSS_CONFLUENT_CLIENT_KEYSTORE_STAGE_JKS 'src/main/resources' 'clientSSL' 'clientSSL/confluent.client.keystore.stage.jks'"
 | |
|                   sh "./oci_wallet_cpfile.sh $PSS_CONFLUENT_CLIENT_KEYSTORE_PROD_JKS 'src/main/resources' 'clientSSL' 'clientSSL/confluent.client.keystore.prod.jks'"
 | |
|                   sh "./oci_wallet_cpfile.sh $PSS_CONFLUENT_CLIENT_TRUSTSTORE_JKS 'src/main/resources' 'clientSSL' 'clientSSL/confluent.client.truststore.jks'"
 | |
|                 }*/
 | |
| 
 | |
|                 withCredentials([usernamePassword(usernameVariable: 'GITHUB_USERNAME', passwordVariable: 'GITHUB_PASSWORD', credentialsId: 'github_credential'),
 | |
|                                  usernamePassword(usernameVariable: 'ARTIFACTORY_USERNAME', passwordVariable: 'ARTIFACTORY_PASSWORD', credentialsId: 'pt-classroom-artifactory-token')]) {
 | |
|                     sh "./gradlew clean build uploadBootArchives"
 | |
|                 }
 | |
|                 //sh "./gradlew clean build uploadArchives"
 | |
|                 //sh "./gradlew clean build"
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         stage('Deploy to DEV') {
 | |
|         when { expression { deployToDev } }
 | |
|             steps {
 | |
|                 echo 'Deploy from Artifactory to DEV'
 | |
|                 build job: 'spring_music_cf_service_deploy_to_dev', parameters: [[$class: 'StringParameterValue', name: 'ARTIFACT_VERSION', value: "${deployVersion}"]]
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         stage('Deploy to TEST') {
 | |
|         when { expression { deployToTest } }
 | |
|             steps {
 | |
|                 echo 'Deploy from Artifactory to TEST'
 | |
|                 build job: 'spring_music_cf_service_deploy_to_test', parameters: [[$class: 'StringParameterValue', name: 'ARTIFACT_VERSION', value: "${deployVersion}"]]
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         stage('Deploy to E2E2') {
 | |
|          when { expression { officialBuild } }
 | |
|             steps {
 | |
|                 echo 'Deploy from Artifactory to E2E2'
 | |
|                 build job: 'spring_music_cf_service_deploy_to_e2e2', parameters: [[$class: 'StringParameterValue', name: 'ARTIFACT_VERSION', value: "${deployVersion}"]]
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         stage('Deploy to AZE DEV') {
 | |
|             when { expression { deployToAze} }
 | |
|                 steps {
 | |
|                     echo 'Deploy from Artifactory to AZE DEV'
 | |
|                     build job: 'spring_music_cf_service_deploy_to_azedev', parameters: [[$class: 'StringParameterValue', name: 'ARTIFACT_VERSION', value: "${deployVersion}"]]
 | |
|                  }
 | |
|         }
 | |
| 
 | |
|         stage('Deploy to AZE TEST') {
 | |
|             when { expression { deployToTest && deployToAze } }
 | |
|                 steps {
 | |
|                     echo 'Deploy from Artifactory to AZE TEST'
 | |
|                     build job: 'spring_music_cf_service_deploy_to_azetest', parameters: [[$class: 'StringParameterValue', name: 'ARTIFACT_VERSION', value: "${deployVersion}"]]
 | |
|                 }
 | |
|         }
 | |
| 
 | |
|         stage('Deploy to AZE E2E2') {
 | |
|             when { expression { officialBuild && deployToAze} }
 | |
|                 steps {
 | |
|                     echo 'Deploy from Artifactory to AZE E2E2'
 | |
|                     build job: 'parcel_shipping_service_deploy_to_azee2e2', parameters: [[$class: 'StringParameterValue', name: 'ARTIFACT_VERSION', value: "${deployVersion}"]]
 | |
|                 }
 | |
|          }
 | |
| 
 | |
|      //   stage('Deploy to PROD') {
 | |
|      //    when { expression { officialBuild } }
 | |
|      //       steps {
 | |
|      //           echo 'Deploy from Artifactory to PROD'
 | |
|      //           build job: 'parcel_shipping_service_deploy_to_prod', parameters: [[$class: 'StringParameterValue', name: 'ARTIFACT_VERSION', value: "${deployVersion}"]]
 | |
|      //       }
 | |
|      //   }
 | |
|     }
 | |
| 
 | |
|     post {
 | |
|         success {
 | |
|           notifyTeam(deployVersion, 'SUCCESS')
 | |
|         }
 | |
|         failure {
 | |
|           notifyTeam(deployVersion, 'FAILURE')
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| def notifyTeam(deployVersion, status) {
 | |
|   // don't send an email just for refreshing parameters, unless it fails
 | |
|   if (params.refreshParameters && (status == 'SUCCESS')) {
 | |
|     return
 | |
|   }
 | |
| 
 | |
|   def recipients = 'nathan_wagner@gap.com'
 | |
| 
 | |
|   def presendScript
 | |
| 
 | |
|   if (status == 'SUCCESS') {
 | |
|     presendScript = ''
 | |
|   } else {
 | |
|     // failed builds are marked important
 | |
|     presendScript = """
 | |
|       msg.addHeader("X-Priority", "1 (Highest)");
 | |
|       msg.addHeader("Importance", "High");
 | |
|     """
 | |
|   }
 | |
| 
 | |
|   def buildStart = new java.text.SimpleDateFormat("h:mm a z 'on' MMMM d").format(new Date(currentBuild.startTimeInMillis))
 | |
| 
 | |
|   def durationSeconds = (currentBuild.duration / 1000) as Long
 | |
| 
 | |
|   def buildDuration = [
 | |
|           'hour': (durationSeconds / 3600) as Long,
 | |
|           'minute': (((durationSeconds / 60) as Long) % 60),
 | |
|           'second': durationSeconds % 60,
 | |
|   ].findAll { it.value > 0 }.collect { "${it.value} ${it.key}${it.value == 1 ? '' : 's'}" }.join(', ')
 | |
| 
 | |
|   def changeSet
 | |
| 
 | |
|   if (currentBuild.changeSets.every { it.emptySet }) {
 | |
|     changeSet = '<tr><td colspan="2"><code>No changes since last build.</code></td></tr>'
 | |
|   } else {
 | |
|     changeSet = currentBuild.changeSets.collect {
 | |
|       it.items.collect { "<tr><td>${it.author.fullName}</td><td>${it.msg}</td></tr>" }
 | |
|     }.flatten().join('\n')
 | |
|   }
 | |
| 
 | |
|   def touchedFiles = currentBuild.changeSets.collect {
 | |
|     it.items.collect { it.affectedPaths.collect { "<li><code>${it}</code></li>" } }
 | |
|   }.flatten().sort().unique(false).join('\n') ?: '<li>No files changed since last build.</li>'
 | |
| 
 | |
|   def emailBody = [
 | |
|           "<h2>${currentBuild.fullDisplayName}</h2>",
 | |
|           "<p>${currentBuild.buildCauses[0].shortDescription} at ${buildStart}.</p>",
 | |
|           "<p>The build took ${buildDuration}.</p>",
 | |
|           "<p>View the build <a href='${currentBuild.absoluteUrl}'>in Jenkins</a>.</p>",
 | |
|           "<p>To redeploy the same artifacts, use deployVersion: <code>${deployVersion}</code></p>",
 | |
|           '<h3>Commits:</h3>',
 | |
|           '<style>tr:nth-child(3n) { background: #eee; }</style>',
 | |
|           '<table>',
 | |
|           '<thead style="background: #ddd;"><tr><th>Git Author</th><th>Commit Message</th></tr></thead>',
 | |
|           '<tbody>',
 | |
|           changeSet,
 | |
|           '</tbody>',
 | |
|           '</table>',
 | |
|           '<h3>Touched files:</h3>',
 | |
|           '<ul style="list-style-type: none;">',
 | |
|           touchedFiles,
 | |
|           '</ul>',
 | |
|   ].join('\n')
 | |
| 
 | |
|   emailext(
 | |
|           subject: "${status}: ${currentBuild.fullDisplayName}",
 | |
|           to: recipients,
 | |
|           body: emailBody,
 | |
|           mimeType: 'text/html',
 | |
|           presendScript: presendScript
 | |
|   )
 | |
| }
 |