Skip to main content

Jenkins Terraform Integration | How do you integrate Terraform with Jenkins | Automate Infrastructure setup using Terraform and Jenkins Pipeline

 Pre-requistes:

  • Jenkins is up and running
  • Terraform is installed in Jenkins
  • Terraform files already created in your SCM
  • Make sure you have necessary IAM role created with right policy and attached to Jenkins EC2 instance. see below for the steps to create IAM role.
I have provided my public repo as an example which you can use.

Create IAM role to provision EC2 instance in AWS 



Select AWS service, EC2, Click on Next Permissions


Type EC2 and choose AmazonEC2FullAccess as policy


Click on Next tags, Next Review
give some role name and click on Create role.



Assign IAM role to EC2 instance

Go back to Jenkins EC2 instance, click on EC2 instance, Security, Modify IAM role


Type your IAM role name my-ec2-terraform-role and Save to attach that role to EC2 instance.



Create a new Jenkins Pipeline

Give a name to the pipeline you are creating.



Add parameters to the pipeline

Click checkbox - This project is parameterized, choose Choice Parameter


Enter name as action
type apply and enter and type destroy as choices as it is shown below(it should be in two lines)


Go to Pipeline section

Add below pipeline code and modify per your GitHub repo configuration.

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
            checkout([$class: 'GitSCM', branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[url: 'https://github.com/mydevopscoach/my-tf-iac-aws-repo']]])            

          }
        }
        
        stage ("terraform init") {
            steps {
                sh ('terraform init') 
            }
        }
        
        stage ("terraform Action") {
            steps {
                echo "Terraform action is --> ${action}"
                sh ('terraform ${action} --auto-approve') 
           }
        }
    }
}

Click on Build with Parameters and choose apply to build the infrastructure or choose destroy if you like to destroy the infrastructure you have built. 



Click on Build
Now you should see the console output if you choose apply.


Pipeline will look like below:


Login to AWS console, you should see the new EC2 instance created.

Comments

Popular posts from this blog

Create AMI using packer

 basic parameter vim moon.json  {        "builders": [            {            "type": "amazon-ebs",            "access_key": "AGQ",            "secret_key": "Kft1aurid",            "region": "us-east-1",            "instance_type": "t2.micro",            "source_ami": "ami-02e136e904f3da870",            "ssh_username": "ec2-user",            "ami_name": "moon-amiii"         }        ] } convert json file into hcl  packer hcl2 upgrade moon.json validate code  packer validate moon.json   packer validate moon.json.pkr.hcl

Packer Environment Variable

Note:  1011  export AWS_ACCESS=AKGQ                         do this on console not on editor  1012  export AWS_SECRET=KfVkt1aurid  1013  echo $AWS_ACCESS  1014  AKVUGQ   vim moon.json {     "variables": {       "aws_access_key": "{{env `AWS_ACCESS`}}",       "aws_secret_key": "{{env `AWS_SECRET`}}"     },        "builders": [            {            "type": "amazon-ebs",            "region": "us-east-1",            "access_key": "{{user `aws_access_key`}}",            "secret_key": "{{user `aws_secret_key`}}",            "instance_type": "t2.micro",            "source_ami": "ami-02e136e904f3da870", ...

ANSIBLE REMOTE-PROVISIONER

 NOTE:   974  mkdir sourcepath   975  cd sourcepath/   976  wget https://www.free-css.com/assets/files/free-css-templates/download/page276/transportz.zip   977  ll   978  unzip transportz.zip   979  ll   980  rm -rf transportz.zip   981  ll   982  cp -rvf transportz/* .   983  rm -rf transportz/ packer build aws.json now to n.virginia region  go to ami launch image  go to ec2 dashboard  launch instance  all traffic anywhere use public ip of that with 8080 and see website' vim   moo.json {        "builders": [            {            "type": "amazon-ebs",            "access_key": "AGQ",            "secret_key": "K1aurid",            "region": "us-east-1",         ...