Azure DevOps Terraform QA FTW .net stack 11 let kentico 8 let devops 2,5 roku Jiří Kovář jiris@kentico.com
temp environment v azure spravovane terraformem a instrumentovane azure devops narazili jsme na limity a jak jsme je prekonali abych dokazal vysvetlit, musim rict neco o nas
Brno, 250 zamestnancu, sprava content, tvorba webu, , hlavni trh USA, 2 produkty, budu mluvit jen o Cloudu
Kentico Cloud Headless Content as a Service ~60 lidí v developmentu 2 DevOps Test automation 2 DevOps Azure, CI/CD, IaC a konfigurace
Architektura řešení
Jak vyvíjíme a vydáváme builds per commit CD release per commit do mastera PRV per commit do PR HF per commit do release branche
Temp environmenty Infrastruktura Konfigurace Deployment Testy Destroy
Infrastruktura Azure a Fastly CDN Znovupoužitelné moduly 6 různých environmentů (QA, PROD, UI tests, OnDemand, 2 druhy INT testů) Jen potřebný subset Adekvátně naškálovaná Unikátní názvy (a Terraform workspaces) 12ctka je super 11cka mela dost nedostatku
Konfigurace - KeyVault Zdroje: Terraform (klíče typu „connection strings“) Statické klíče (JSON file) Top Secret KeyVault pro produkci Přístup všech strojů do KeyVaultu Zabezpečený a kontrolovaný zápis do KeyVaultu z agentů Jmenna konvence
Konfigurace - KeyVault
Deployment Data driven deployment Terraform -> KeyVault -> Azure DevOps Paralelizace Temp prostředí až 18 services Production 29 services (6min) Suffix – v dobe konfigurace nevim kam se bude deployovat
Deployment
Integrace pouštění testů Čtení informací o prostředí z KeyVaultu (URLs, connection strings,...) Paralelizace Na více agentů (až 6) V rámci agentů Rychlost = Cena (UI testy sériově 6h, nyní 30min) Opakované pokusy Raději 3x zkusit na jednom prostředí, než si myslet že to byla náhoda a vytvářet ho znovu
Použití temp environmentů Hlavní release (1-3x temp prostředí) Per commit do masteru Automatická detekce změněných artifactů Hotfix (3x temp prostředí) Na schválení Validace pull requestu (1-3 temp prostředí podle repozitáře) On demand prostředí pro různé účely Bez testů – když lokální vývoj nestačí
Statistiky za měsíc (jen testy) ~900 Temp prostředí ~7000 Azure Web Apps (compute) ~2200 Cosmos DB accounts (~2x tolik databází) ~3300 Storages ~850 SQL DBs <$800 USD (a to jsme teprve začali optimalizovat – Azure předpověd – $417)
Celkový dopad temp prostředí Commity validované všemi testy Per commit do mastera Před mergováním pull requestu (pokud DEV uzná za vhodné) Před vydáváním hotfixu (pokud DEV uzná za vhodné) Možnost vytvořit si on demand prostředí pro moje branche Automatická správá persistentních prostředí a jejich konfigurací Snadné rozšiřování infrastruktury a deploymentů Stabilnější master Ušetřené peníze (DEV ~$1200)
MS Teams blame bot
Závěr 2 DevOps engineeři (+ pomoc) 1,5 roku Dříve Nyní TeamCity Azure DevOps Manuální správa Azure a CDN Terraform Manuální správa settingů KeyVault Prostředí v Azure jen pro mastera On demand prostředí Agregované pouštění INT a UI testů Per commit Manuální testování hotfixů Automatické temp prostředí Obtížné pouštění INT a UI testů před mergem Pull Request Validation temp environmenty Notifikace emailem bez detailů a contextu MS Teams blame bot shrnující výsledky