🎯 What You'll Learn ✅ Prerequisites 🗺️ Lab Sequence 🔄 CI/CD Flow 🙋 Getting Help
✨ A hands-on, end-to-end DevOps course — from zero pipeline to a fully monitored AKS application.
This course walks you through a real-world DevOps setup using Azure DevOps, Terraform, AKS, and Application Insights. Every lab builds on the last, so by the end you'll have a production-style CI/CD pipeline deploying a containerised Python app to Kubernetes — with monitoring and alerting configured.
No prior Azure DevOps experience required. If you're comfortable with the Azure portal and a terminal, you're ready.
This course is designed for:
- Cloud engineers who want hands-on Azure DevOps and AKS experience
- Developers looking to understand infrastructure-as-code with Terraform
- Teams wanting a reference implementation for CI/CD on Azure
| Topic | Skills Gained |
|---|---|
| 🛠️ Azure DevOps | Organisations, projects, pipelines-as-code, Workload Identity Federation |
| 🏗️ Terraform on Azure | Remote state, modules, AKS, ACR, VNet, Key Vault, Application Insights |
| 🐳 Containers & ACR | Docker builds, pushing images, service connections |
| 🚀 AKS Deployment | Helm, ALB Controller, Gateway API, kubelogin |
| 🔄 CI/CD | Trigger configuration, automated rollouts, rollout status gating |
| 📊 Monitoring | Application Insights, availability tests, Log Analytics Container Insights |
Before starting, review the full prerequisites guide. You'll need:
- Azure subscription with Contributor access
- Azure DevOps organisation — create one free
- Azure CLI —
azinstalled and authenticated - Terraform — v1.14+
- Docker Desktop — for local image testing
- kubectl and kubelogin
- Helm — v3+
Complete the labs in order — each builds on the previous.
| Lab | Title | What You'll Do |
|---|---|---|
| 1a | 🔧 Azure DevOps Setup | Create org, project, and WIF service connection |
| 1b | 🗄️ Terraform Remote State | Create Azure Storage for Terraform state |
| 1c | 👥 AKS Admin AD Group | Create Azure AD group for AKS administrators |
| 2 | ⚙️ Terraform Pipeline | Deploy all Azure infrastructure via pipeline |
| 3 | 📦 Deploy App to ACR | Build and push Docker image to Azure Container Registry |
| 4a | 🔑 Key Vault Secret | Store App Insights connection string in Key Vault |
| 4b | 🚀 Deploy App to AKS | Deploy the containerised app to AKS |
| 5a | 🔄 Introduce CI/CD | Add pipeline triggers for automatic runs on push |
| 5b | 🤖 Automated Deployments | Fully automated deploy on every merge to main |
| 6a | 📊 Application Insights | View live telemetry from your running app |
| 6b | 🔔 Availability Tests | Configure uptime alerting |
| 6c | 📋 Container Insights | Review AKS logs and metrics in Log Analytics |
Every lab follows the same pattern:
- Context — why this step matters in a real DevOps workflow
- Step-by-step instructions — exact commands and portal steps
- Expected output — what success looks like
- Validation — how to confirm the step worked before moving on
Once all labs are complete, your pipeline works like this:
Developer pushes to main
↓
Azure DevOps CI triggers
↓
Terraform plan → apply (infrastructure updated)
↓
Docker build → push to ACR (new image tagged with Build ID)
↓
kubectl apply to AKS (rolling update)
↓
kubectl rollout status (pipeline waits for healthy pods)
↓
Application Insights + Container Insights (monitoring active)
All Azure resources are provisioned by Terraform in Lab 2:
| Resource | Name | Purpose |
|---|---|---|
| Resource Group | devopsjourneyapr2026-rg |
Container for all resources |
| AKS Cluster | devopsjourneyapr2026 |
Kubernetes cluster |
| Azure Container Registry | devopsjourneyapr2026acr |
Docker image registry |
| Key Vault | (from Terraform output) | Secrets management |
| Application Insights | (from Terraform output) | App telemetry |
| Log Analytics Workspace | (from Terraform output) | Centralised logging |
| ALB (App Gateway for Containers) | devopsjourneyapr2026-alb |
Ingress / load balancing |
- 🐛 Found a bug or issue? Open an Issue
- 🤝 Want to contribute? PRs are welcome!
- 📝 Blog posts and deeper dives: thomasthornton.cloud
- 💬 Connect: LinkedIn · X / Twitter
Did you find this helpful? Please ⭐ star and share the repository!
This project is licensed under the terms of the MIT open source license. Please refer to the LICENSE file for the full terms.