114 lines
3.4 KiB
Groovy
114 lines
3.4 KiB
Groovy
String cloud_provider = "aws"
|
|
String aws_region = "eu-west-1"
|
|
String default_stage = "int"
|
|
String aws_access_credentials = "fdc_${aws_region}_${default_stage}_infrastructure.automation.user"
|
|
String dynatrace_api_token_credentials = "api_token_dynatrace_${aws_region}_${default_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 = "${default_stage}"
|
|
CLOUD_PROVIDER = "${cloud_provider}"
|
|
|
|
API_TOKEN = credentials("${dynatrace_api_token_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 {
|
|
sshagent(credentials: ['sofa-user-automation']) {
|
|
container('terraform') {
|
|
sh """
|
|
set -e
|
|
cd environments/${CLOUD_PROVIDER}/${AWS_REGION}/${STAGE}
|
|
terraform init
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Terraform plan') {
|
|
steps {
|
|
sshagent(credentials: ['sofa-user-automation']) {
|
|
container('terraform') {
|
|
script {
|
|
env.PLAN_STATUS = sh(script: "cd environments/${CLOUD_PROVIDER}/${AWS_REGION}/${STAGE} && 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()
|
|
}
|
|
}
|
|
}
|
|
}
|