0
0
TerraformHow-ToBeginner · 4 min read

How to Use Terraform in CI/CD Pipelines for Infrastructure Automation

To use Terraform in a CI/CD pipeline, automate the steps of initializing, planning, and applying Terraform configurations within your pipeline scripts. This ensures infrastructure changes are tested and deployed automatically with each code update.
📐

Syntax

Terraform commands are used in sequence to manage infrastructure in CI/CD:

  • terraform init: Prepares the working directory.
  • terraform plan: Shows the changes Terraform will make.
  • terraform apply: Applies the changes to the infrastructure.

These commands are scripted in your CI/CD pipeline to automate infrastructure deployment.

bash
terraform init
terraform plan -out=tfplan
terraform apply tfplan
💻

Example

This example shows a simple GitHub Actions workflow that runs Terraform commands to deploy infrastructure on every push to the main branch.

yaml
name: Terraform CI/CD

on:
  push:
    branches:
      - main

jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: 1.5.6

      - name: Terraform Init
        run: terraform init

      - name: Terraform Plan
        run: terraform plan -out=tfplan

      - name: Terraform Apply
        if: github.ref == 'refs/heads/main'
        run: terraform apply -auto-approve tfplan
Output
Terraform initialized successfully. Plan: 1 to add, 0 to change, 0 to destroy. Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
⚠️

Common Pitfalls

Common mistakes when using Terraform in CI/CD include:

  • Not storing Terraform state remotely, causing conflicts in parallel runs.
  • Running terraform apply without review, risking unintended changes.
  • Missing environment variables or credentials in the pipeline, causing failures.
  • Not locking the state file, leading to corruption.

Always use remote state storage with locking (e.g., Terraform Cloud, S3 with DynamoDB) and require manual approval or automated checks before applying changes.

bash
## Wrong way (no remote state, auto apply without plan review)
terraform init
terraform apply -auto-approve

## Right way (remote state, plan output, manual or conditional apply)
terraform init
terraform plan -out=tfplan
terraform apply tfplan
📊

Quick Reference

StepCommandPurpose
Initializeterraform initPrepare working directory and download providers
Planterraform plan -out=tfplanShow and save planned changes
Applyterraform apply tfplanApply saved changes to infrastructure
Remote StateConfigure backendStore state safely and enable locking
CI/CD IntegrationScript commands in pipelineAutomate infrastructure deployment

Key Takeaways

Automate terraform init, plan, and apply commands in your CI/CD pipeline for smooth infrastructure deployment.
Use remote state storage with locking to avoid conflicts and state corruption.
Review terraform plan output before applying changes to prevent unintended infrastructure updates.
Ensure your CI/CD environment has necessary credentials and environment variables set securely.
Integrate Terraform commands into pipeline steps like GitHub Actions or Jenkins for continuous infrastructure delivery.