Immutable Infrastructure CI/CD using Jenkins and Terraform on Azure Virtual Architecture overview

Log Analytics
Managed Disks
Virtual Machine Scale Sets

Solution Idea

If you'd like to see us expand this article with more information, such as potential use cases, alternative services, implementation considerations, or pricing guidance, let us know with GitHub Feedback!

Azure is a world-class cloud for hosting virtual machines running Windows or Linux. Whether you use Java, Node.js, Go, or PHP to develop your applications, you'll need a continuous integration and continuous deployment (CI/CD) pipeline to push changes to these virtual machines automatically.


Architecture diagram Download an SVG of this architecture.

Data flow

  1. Change application source code.
  2. Commit code to GitHub.
  3. Continuous Integration Trigger to Jenkins.
  4. Jenkins triggers a Packer image build to create a VM and stores it as a VM image using Azure Managed Disks.
  5. Jenkins triggers Terraform to provision a new Virtual Machine Scale Set using the Azure Managed Disks VM image.
  6. Azure Log Analytics collects and analyzes logs.
  7. Monitor application and make improvements.


  • Managed Disks: Persistent, secured disk storage for Azure virtual machines.
  • Virtual Machine Scale Sets: Manage and scale up to thousands of Linux and Windows virtual machines.
  • Log Analytics: Collect, search, and visualize machine data from on-premises and cloud.
  • Visual Studio Code: Build and deploy multi-platform apps to get the most from Azure services.

Deploy this scenario

Next steps