Implementace integračních testů pro projekty Terraformu v Azure
Terraform umožňuje definici, náhled a nasazení cloudové infrastruktury. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu , například Azure, a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán spouštění , který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Jakmile ověříte změny, použijete plán provádění k nasazení infrastruktury.
Testy integrace ověřují, že nově zavedená změna kódu neporuší stávající kód. Kontinuální integrace (CI) v DevOps odkazuje na proces, který sestaví celý systém při každé změně v kódové základně – například při sloučení PR do Git repozitáře. Následující seznam obsahuje běžné příklady integračních testů:
- Nástroje pro analýzu statického kódu, jako je lint a formát.
- Spuštěním příkazu terraform ověřte a ověřte syntaxi konfiguračního souboru.
- Spusťte terraform plan pro ověření, že konfigurace bude fungovat podle očekávání.
V tomto článku se naučíte:
- Seznamte se se základy testování integrace pro projekty Terraformu.
- Ke konfiguraci kanálu kontinuální integrace použijte Azure DevOps.
- Spusťte statickou analýzu kódu v kódu Terraformu.
- Spuštěním
terraform validate
ověřte konfigurační soubory Terraformu na místním počítači. - Spuštěním
terraform plan
ověřte, že konfigurační soubory Terraformu z pohledu vzdálených služeb. - Využijte Azure Pipeline k automatizaci kontinuální integrace.
1. Konfigurace prostředí
- předplatného Azure: Pokud předplatné Azure nemáte, vytvořte si bezplatný účet.
konfiguraceTerraformu: Pokud jste to ještě neudělali, nakonfigurujte Terraform pomocí jedné z následujících možností:
organizace a projekt Azure DevOps: Pokud ho nemáte, vytvořte si organizaci Azure DevOps.
rozšíření Terraform Build & Release Tasks: Nainstalujte rozšíření úkolů sestavení/vydání Terraformu do organizace Azure DevOps.
Udělení přístupu Azure DevOps k vašemu předplatnému Azure: Vytvořte připojení služby Azure pojmenované
terraform-basic-testing-azure-connection
, aby se služba Azure Pipelines mohla připojit k předplatným Azure.Ukázkový kód a zdroje: Stáhněte z GitHubu projekt pro integrační testování. Adresář, do kterého stáhnete ukázku, se označuje jako ukázkový adresář.
2. Ověření místní konfigurace Terraformu
Příkaz terraform validate se spustí z příkazového řádku v adresáři, který obsahuje vaše soubory Terraformu. Hlavním cílem příkazů je ověřování syntaxe.
V ukázkovém adresáři přejděte do
src
adresáře.Spuštěním příkazu terraform init inicializujete pracovní adresář.
terraform init
Spuštěním příkazu terraform ověřte a ověřte syntaxi konfiguračních souborů.
terraform validate
klíčové body :
- Zobrazí se zpráva oznamující, že konfigurace Terraformu je platná.
Upravte soubor
main.tf
.Na řádku 5 vložte překlep, který zneplatňuje syntaxi. Nahraďte například
var.location
var.loaction
.Uložte soubor.
Znovu spusťte ověření.
terraform validate
klíčové body :
- Zobrazí se chybová zpráva označující řádek kódu v chybě a popis chyby.
Jak vidíte, Terraform zjistil problém v syntaxi konfiguračního kódu. Tento problém brání nasazení konfigurace.
Před odesláním souborů Terraformu do systému správy verzí je vhodné vždy spouštět terraform validate
na soubory Terraformu. Také tato úroveň ověřování by měla být součástí vašeho procesu kontinuální integrace. Dále v tomto článku prozkoumáme, jak nakonfigurovat Azure pipeline tak, aby automaticky ověřila.
3. Ověření konfigurace Terraformu
V předchozí části jste viděli, jak ověřit konfiguraci Terraformu. Tato úroveň testování byla specifická pro syntaxi. Tento test nebral v úvahu, co už může být nasazené v Azure.
Terraform je deklarativní jazyk což znamená, že deklarujete, co chcete mít jako konečný výsledek. Řekněme například, že máte ve skupině prostředků 10 virtuálních počítačů. Pak vytvoříte soubor Terraformu definující tři virtuální počítače. Použití tohoto plánu nezvýší celkový počet na 13. Místo toho Terraform odstraní sedm virtuálních počítačů, takže skončíte třemi. Vyhnout se překvapením vám umožňuje spuštění terraform plan
, které potvrzuje potenciální výsledky použití plánu provedení.
Pokud chcete vygenerovat plán provádění Terraformu, spusťte terraform plan. Tento příkaz se připojí k cílovému předplatnému Azure a zkontroluje, jaká část konfigurace je už nasazená. Terraform pak určí potřebné změny, aby splňovaly požadavky uvedené v souboru Terraformu. V této fázi Terraform nic nenasazuje. Říká vám, co se stane, když plán použijete.
Pokud postupujete podle článku a provedli jste kroky v předchozí části, spusťte příkaz terraform plan
:
terraform plan
Po spuštění terraform plan
Zobrazí Terraform potenciální výsledek použití plánu provádění. Výstup označuje prostředky Azure, které se přidají, změní a zničí.
Ve výchozím nastavení Terraform ukládá stav ve stejném místním adresáři jako soubor Terraform. Tento model funguje dobře ve scénářích s jedním uživatelem. Pokud však na stejných prostředcích Azure pracuje více lidí, soubory místního stavu se mohou rozcházet. Pro vyřešení tohoto problému Terraform podporuje zápis stavových souborů do vzdáleného datového úložiště (například Azure Storage). V tomto scénáři může být problematické spustit terraform plan
na místním počítači a cílit na vzdálený počítač. V důsledku toho může být vhodné tento krok ověřování automatizovat jako součást kanálu kontinuální integrace.
4. Spuštění statické analýzy kódu
Statickou analýzu kódu je možné provést přímo v konfiguračním kódu Terraformu, aniž byste ho provedli. Tato analýza může být užitečná k detekci problémů, jako jsou problémy se zabezpečením a nekonzistence dodržování předpisů.
Následující nástroje poskytují statickou analýzu souborů Terraformu:
Statická analýza se často provádí v rámci kanálu kontinuální integrace. Tyto testy nevyžadují vytvoření plánu provádění ani nasazení. V důsledku toho běží rychleji než jiné testy a obvykle se spouští jako první v procesu kontinuální integrace.
5. Automatizace integračních testů pomocí služby Azure Pipeline
Kontinuální integrace zahrnuje testování celého systému při zavedení změny. V této části se zobrazí konfigurace kanálu Azure, která se používá k implementaci kontinuální integrace.
Pomocí libovolného editoru přejděte na místní klon ukázkového projektu Terraformu na GitHubu.
Otevřete soubor
samples/integration-testing/src/azure-pipeline.yaml
.Posuňte se dolů k části kroků, kde vidíte standardní sadu kroků, které slouží ke spouštění různých rutin instalace a ověřování.
Zkontrolujte řádek, který obsahuje krok 1: spusťte Checkov Static Code Analysis. V tomto kroku spustí projekt
Checkov
uvedený dříve statickou analýzu kódu v ukázkové konfiguraci Terraformu.- bash: $(terraformWorkingDirectory)/checkov.sh $(terraformWorkingDirectory) displayName: Checkov Static Code Analysis
klíčové body :
- Tento skript zodpovídá za spuštění Checkov v pracovním prostoru Terraformu připojeném uvnitř kontejneru Dockeru. Agenti spravovaní Microsoftem mají podporu Dockeru. Spouštění nástrojů v kontejneru Dockeru je jednodušší a eliminuje nutnost instalace Checkov na agenta Azure Pipeline.
- Proměnná
$(terraformWorkingDirectory)
je definována v souboruazure-pipeline.yaml
.
Projděte řádek, který zní Krok 2: instalace Terraformu na agenta Azure Pipelines. Rozšíření Terraform Build & Release Task, které jste nainstalovali dříve, má příkaz k instalaci Terraformu na agenta, na kterém běží Azure Pipeline. Tento úkol se provádí v tomto kroku.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0 displayName: 'Install Terraform' inputs: terraformVersion: $(terraformVersion)
klíčové body:
- Verze Terraformu, která se má nainstalovat, je určená prostřednictvím proměnné kanálu Azure s názvem
terraformVersion
a definovanou v souboruazure-pipeline.yaml
.
- Verze Terraformu, která se má nainstalovat, je určená prostřednictvím proměnné kanálu Azure s názvem
Zkontrolujte řádek, který říká krok 3: Chcete-li inicializovat pracovní prostor, spusťte Terraform init. Teď, když je Terraform nainstalovaný v agentu, je možné inicializovat adresář Terraformu.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform init' inputs: command: init workingDirectory: $(terraformWorkingDirectory)
klíčové body :
- Vstup
command
určuje, který příkaz Terraform se má spustit. - Vstup
workingDirectory
označuje cestu k adresáři Terraformu. - Proměnná
$(terraformWorkingDirectory)
je definována v souboruazure-pipeline.yaml
.
- Vstup
Zkontrolujte řádek, který čte krok 4: spusťte příkaz `terraform validate` k ověření syntaxe HCL. Po inicializaci adresáře projektu se
terraform validate
spustí, aby se ověřila konfigurace na serveru.- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform validate' inputs: command: validate workingDirectory: $(terraformWorkingDirectory)
Zkontrolujte ten řádek, který zní, Krok 5: Spusťte plán Terraform k ověření syntaxe HCL. Jak bylo vysvětleno dříve, generování plánu provádění se provádí, aby se ověřilo, jestli je konfigurace Terraformu platná před nasazením.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform plan' inputs: command: plan workingDirectory: $(terraformWorkingDirectory) environmentServiceName: $(serviceConnection) commandOptions: -var location=$(azureLocation)
klíčové body :
- Vstup
environmentServiceName
odkazuje na název připojení služby Azure vytvořeného v Konfigurace prostředí. Připojení umožňuje Terraformu přistupovat k vašemu předplatnému Azure. - Vstup
commandOptions
slouží k předání argumentů příkazu Terraform. V tomto případě se zadává umístění. Proměnná$(azureLocation)
je definována dříve v souboru YAML.
- Vstup
Importujte pipelinu do Azure DevOps
Otevřete projekt Azure DevOps a přejděte do části Azure Pipelines.
Vyberte tlačítko Vytvořit kanál.
Pro Kde je váš kód? vyberte GitHub (YAML).
V tuto chvíli možná budete muset autorizovat Azure DevOps pro přístup k vaší organizaci. Další informace o tomto tématu najdete v článku sestavení úložišť GitHub.
V seznamu úložišť vyberte fork úložiště, které jste vytvořili ve vaší organizaci Na GitHubu.
V kroku Konfigurace kanálu zvolte, jestli chcete začít z existujícího kanálu YAML.
Když se zobrazí stránka Vyberte existující YAML kanál, zadejte větev
master
a zadejte cestu k YAML kanálu:samples/integration-testing/src/azure-pipeline.yaml
.Vyberte Pokračovat pro načtení Azure YAML pipeline z GitHubu.
Když se zobrazí stránka Kontrola kanálu YAML, vyberte Spustit, aby se kanál poprvé vytvořil a aktivoval ručně.
Ověření výsledků
Potrubí můžete spustit ručně z uživatelského rozhraní Azure DevOps. Cílem článku je ale ukázat automatizovanou kontinuální integraci. Otestujte proces potvrzením změny v adresáři samples/integration-testing/src
vašeho odvozeného úložiště. Tato změna automaticky aktivuje nový kanál ve větvi, do které kód odesíláte.
Jakmile tento krok dokončíte, získejte přístup k podrobnostem v Azure DevOps, abyste měli jistotu, že všechno proběhlo správně.
zeleného kanálu Azure DevOps
Řešení potíží s Terraformem v Azure
Řešení běžných problémů při používání Terraformu v Azure