String cloud_provider = "aws" String aws_region = "eu-west-1" String stage = "int" String aws_access_credentials = "fdc_${aws_region}_${stage}_infrastructure.automation.user" String dynatrace_api_toke_credentials = "api_token_dynatrace_${aws_region}_${stage}" pipeline { agent { node { label 'vsds-terraform' } } environment { GIT_SSH_COMMAND = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" AWS_ID = credentials("${aws_access_credentials}") AWS_ACCESS_KEY_ID = "${env.AWS_ID_USR}" AWS_SECRET_ACCESS_KEY = "${env.AWS_ID_PSW}" AWS_REGION = "${aws_region}" STAGE = "${stage}" CLOUD_PROVIDER = "${cloud_provider}" API_TOKEN = credentials("${dynatrace_api_toke_credentials}") TF_VAR_dt_api_token = "${env.API_TOKEN}" } options { timestamps() ansiColor('xterm') disableConcurrentBuilds(abortPrevious: true) timeout(time: 1, unit: 'HOURS') } stages { stage('terraform init') { steps { container('terraform') { sshagent(credentials: ['sofa-user-automation']) { script { sh "cd environments/${CLOUD_PROVIDER}/${AWS_REGION}/${stage} " sh "terraform init" sh "terraform fmt" } } } } } stage('Terraform plan') { steps { container('terraform') { sshagent(credentials: ['sofa-user-automation']) { script { sh "cd environments/${cloud_provider}/${aws_region}/${STAGE} " env.PLAN_STATUS = sh(script: "terraform plan -out=.terraform/plan.out -input=false -detailed-exitcode", returnStatus: true) if (env.PLAN_STATUS == "1") { currentBuild.result = "FAILURE" error('Aborting the build.') return } } } } } } stage('Interactive') { when { allOf { expression { env.PLAN_STATUS == "2" } } } steps { timeout(time: 15, unit: "MINUTES") { input "Is this plan acceptable?" milestone 1 } } } stage("terraform apply") { when { allOf { expression { env.PLAN_STATUS == "2" } } } steps { container('terraform') { sshagent(credentials: ['sofa-user-automation']) { script { sh "cd environments/${cloud_provider}/${aws_region}/${STAGE} " sh("terraform apply -input=false .terraform/plan.out") } } } } } } post { always { cleanWs() script { currentBuild.result = currentBuild.result ?: 'SUCCESS' notifyBitbucket(projectKey: 'packages') } } } }