---
# System prepended metadata

title: Untitled

---

```
pipeline {
  agent any
  options {
        timeout(time: 1, unit: 'HOURS')
        buildDiscarder(logRotator(numToKeepStr: '50', artifactNumToKeepStr: '50'))

    }
  triggers {
           githubPush()
        }
  parameters {
    string(
      name: 'AWS_AMI',
      defaultValue: 'ami-096f43ef67d75e998',
      description: 'Enter the AWS AMI'
    )
    string(
      name: 'APP_URL',
      description: 'Enter the Mitte APP URL'
    )
    string(
      name: 'AWS_Region',
      defaultValue:"eu-west-1",
      description: "Enter the AWS Region")

    string(
      name: 'AWS_KEY',
      description: 'Enter the AWS EC2 Key'
    )

    string(
      name: 'AWS_VPCID',
      defaultValue: 'vpc-b603dfcf',
      description: 'Enter the AWS VPCID'
    )

    string(
      name: 'AWS_SUBNET_ID',
      defaultValue: 'subnet-c3020ba5',
      description: 'Enter the AWS EC2 Subnet'
    )

    string(
      name: 'AWS_INS_TYPE',
      defaultValue: 't2.micro',
      description: 'Enter the AWS EC2 INSTANCE TYPE'
    )
    string(
      name: 'AWS_RDS_SG',
      defaultValue:"MITTE-WEBSHOP-RDS",
      description: 'Enter the AWS SG RDS'
    )
    string(
      name: 'AWS_APP_SG',
      defaultValue:"MITTE-WEBSHOP-APP",
      description: 'Enter the AWS  SG APP'
    )
    string(
      name: 'AWS_ALB_SG',
      defaultValue:"MITTE-WEBSHOP-ALB",
      description: 'Enter the AWS SG ALB'
    )
    string(
      name: 'AWS_RDS_CLASS',
      defaultValue: 'db.t2.micro',
      description: 'Enter the AWS RDS TYPE'
    )
    string(
      name: 'AWS_RDS_USER',
      description: 'Enter the AWS RDS USER NAME'
    )
    string(
      name: 'AWS_RDS_PASS',
      description: 'Enter the AWS RDS PASS'
    )
    string(
      name: 'AWS_RDS_SUBNET',
      defaultValue:"test_run",
      description: 'Enter the AWS RDS SUBNET GROUP NAME'
    )
    string(
      name: 'AWS_RDS_SNAP',
      defaultValue:"webshop-golden-snap",
      description: 'Enter the AWS RDS SNAPSHOT NAME'
    )
    string(
      name: 'AWS_ALB_NAME',
      defaultValue:"webshop-mitte-alb",
      description: 'Enter the AWS ALB NAME'
    )
    string(
      name: 'AWS_ACM',
      defaultValue:"arn:aws:acm:eu-west-1:171983042750:certificate/fe04d20b-bebb-4538-870e-1ab7475b676c",
      description: 'Enter the AWS ACM ARN'
    )

  }
  environment {
        def PARAM_STAGE = "${params.PARAM_STAGE}"
        def AWS_Region  = "${params.AWS_Region}"
        def AWS_BucketName  = "${params.AWS_BucketName}"
  }
  stages {
    stage('Terraform Initialization') {
       steps {
         catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
         withAWS(credentials: 'aws-testrun', region: AWS_Region) {
             sh '/usr/local/bin/terraform init'
             sh '/usr/local/bin/terraform plan'
               }
             }
           }
       post {
         success {
            mail to: 'sranjantripathi@gmail.com',
            subject: "Jenkins Build ${currentBuild.currentResult}: Job ${env.JOB_NAME}",
            body: "${currentBuild.currentResult}: Job ${env.JOB_NAME} build ${env.BUILD_NUMBER}\n Completed Successfully"
             }
          failure {
            mail to: 'sranjantripathi@gmail.com',
            subject: "Failed Pipeline: ${currentBuild.currentResult}: Job ${env.JOB_NAME}",
            body: "Something is wrong with ${env.BUILD_URL}\n Need more info, kindly check : ${env.BUILD_URL}"
              }
           }
         }

    stage('Terraform Approval') {
        steps {
          script {
            def userInput = input(id: 'confirm', message: 'Apply Terraform?', parameters: [ [$class: 'BooleanParameterDefinition', defaultValue: false, description: 'Apply terraform', name: 'confirm'] ])
          }

      }
    }
     stage('AWS Resource Deployment') {
        steps {
          withAWS(credentials: 'aws-testrun', region: AWS_Region) {
          sh '/usr/local/bin/terraform apply --auto-approve -var="ami=${AWS_AMI}" -var="type=${AWS_INS_TYPE}" -var="key=${AWS_KEY}" -var="subid=${AWS_SUBNET_ID}" -var="vpcid=${AWS_VPCID}" -var="sgrds-name=${AWS_RDS_SG}" -var="sgalb-name=${AWS_ALB_SG}" -var="sgapp-name=${AWS_APP_SG}" -var="rdsclass=${AWS_RDS_CLASS}" -var="rdsuser=${AWS_RDS_USER}" -var="rdspass=${AWS_RDS_PASS}" -var="rdssub=${AWS_RDS_SUBNET}" -var="snap=${AWS_RDS_SNAP}" -var="albn=${AWS_ALB_NAME}" -var="acm=${AWS_ACM}" -target=aws_db_instance.db -target=aws_security_group.rdssg -target=aws_security_group.appsg -target=local_file.rdsendpoint'
          sh '/bin/sh update.sh'
          sh '/usr/local/bin/terraform apply --auto-approve -var="ami=${AWS_AMI}" -var="type=${AWS_INS_TYPE}" -var="key=${AWS_KEY}" -var="subid=${AWS_SUBNET_ID}" -var="vpcid=${AWS_VPCID}" -var="sgrds-name=${AWS_RDS_SG}" -var="sgalb-name=${AWS_ALB_SG}" -var="sgapp-name=${AWS_APP_SG}" -var="rdsclass=${AWS_RDS_CLASS}" -var="rdsuser=${AWS_RDS_USER}" -var="rdspass=${AWS_RDS_PASS}" -var="rdssub=${AWS_RDS_SUBNET}" -var="snap=${AWS_RDS_SNAP}" -var="albn=${AWS_ALB_NAME}" -var="acm=${AWS_ACM}"'
         }
        }
      }
    }
}

```