We will be learning how to execute Terraform scripts automatically using Jenkins pipeline. We will learn how to create EC2 instance using Terraform and Jenkins in AWS cloud.
Watch the steps in YouTube channel:
Pre-requisites:
- 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
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
type apply and enter and type destroy as choices as it is shown below(it should be in two lines)
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:
Hi...How to do the same for Azure VM?
ReplyDeleteHi,i am trying to destroy action. but getting the error Destroy complete! Resources: 0 destroyed.
ReplyDelete..............job status.....................
Terraform action is --> destroy
[Pipeline] sh
+ terraform destroy --auto-approve
[0m [1m [32mNo changes. [0m [1m No objects need to be destroyed. [0m
[0mEither you have not created any objects yet or the existing objects were
already deleted outside of Terraform.
[0m [1m [32m
Destroy complete! Resources: 0 destroyed.
[0m
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS