Implementace integračních testů pro projekty Terraformu v Azure
Testy integrace ověřují, že nově zavedená Změna kódu neruší stávající kód. v DevOps se průběžná integrace (CI) týká procesu, který sestaví celý systém vždy, když se změní základ kódu – například někdo chce sloučit žádosti o přijetí změn do úložiště Git. 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 Format.
- Spusťte příkaz terraformu Validate a ověřte syntaxi konfiguračního souboru.
- Spusťte plán terraformu , abyste zajistili, že konfigurace bude fungovat podle očekávání.
V tomto článku získáte informace o těchto tématech:
- Seznamte se se základy testování integrace pro projekty Terraformu.
- k nakonfigurování kanálu průběžné integrace použijte Azure DevOps.
- Spusťte analýzu statického kódu v kódu Terraformu.
- Spusťte
terraform validatepro ověření konfiguračních souborů terraformu na místním počítači.- Spusťte
terraform plan, pokud chcete ověřit, že konfigurační soubory terraformu z pohledu vzdálené služby.- K automatizaci nepřetržité integrace použijte kanál Azure.
1. konfigurace prostředí
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
Konfigurace terraformu: Pokud jste to ještě neudělali, nakonfigurujte Terraformu pomocí jedné z následujících možností:
Azure DevOps organizace a projekt: pokud ho ještě nemáte, vytvořte Azure DevOps organizaci.
Terraformu sestavení rozšíření úloh vydání: nainstalujte do vaší Azure DevOps organizace rozšíření úlohy sestavení/vydání terraformu .
udělení Azure DevOpsho přístupu k předplatnému azure: vytvořte připojení služby azure s názvem , aby se Azure Pipelines mohl připojit k předplatným azure.
Příklad kódu a prostředků: pomocí nástroje DownGit stáhněte z GitHub projekt pro integraci a testování a rozbalte do nového adresáře, který obsahuje vzorový kód. Tento adresář je označován jako Příklad adresáře.
2. ověření místní konfigurace Terraformu
Příkaz terraformu Validate se spouští z příkazového řádku v adresáři, který obsahuje soubory terraformu. Tento příkaz představuje hlavní cíl ověřování syntaxe.
V rámci tohoto ukázkového adresáře přejděte do
srcadresáře.Spusťte terraformu init pro inicializaci pracovního adresáře.
terraform initSpusťte příkaz terraformu Validate a ověřte syntaxi konfiguračních souborů.
terraform validateKlíčové body:
- Zobrazí se zpráva oznamující, že je konfigurace Terraformu platná.
Úprava souboru
main.tf.Na řádku 5 vložte překlep, které neověřuje syntaxi. Například
var.locationnahraďtevar.loactionSoubor uložte.
Znovu spusťte ověřování.
terraform validateKlíčové body:
- Zobrazí se chybová zpráva oznamující, že řádek kódu je chybový, a popis chyby.
Jak vidíte, Terraformu zjistila problém v syntaxi konfiguračního kódu. Tento problém zabraňuje nasazení konfigurace.
Před odesláním do systému správy verzí je dobrým zvykem, aby se soubory Terraformu vždy spouštěly terraform validate . Tato úroveň ověřování by taky měla být součástí vašeho kanálu průběžné integrace. Později v tomto článku se podíváme, jak nakonfigurovat kanál Azure tak, aby se automaticky ověřoval.
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 nebere v úvahu, co už může být nasazené v Azure.
Terraformu je deklarativní jazyk , který znamená, že deklarujete, co chcete mít jako konečný výsledek. Řekněme například, že máte 10 virtuálních počítačů ve skupině prostředků. 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 Terraformu odstraní sedm z virtuálních počítačů, takže se dokončí tři. Spuštění terraform plan umožňuje potvrdit potenciální výsledky použití plánu spuštění, aby se předešlo překvapením.
Pokud chcete vygenerovat plán spuštění Terraformu, spusťte plán terraformu. Tento příkaz se připojí k cílovému předplatnému Azure, aby zkontroloval, jaká část konfigurace je už nasazená. Terraformu pak určí nezbytné změny pro splnění požadavků uvedených v souboru Terraformu. V této fázi neterraformu žádné nasazení. Dozvíte se, co se stane, když použijete plán.
Pokud spolu s článkem provedete následující kroky a provedli jste postup v předchozí části, spusťte terraform plan příkaz:
terraform plan
Po spuštění terraform plan terraformu zobrazí potenciální výsledek použití plánu spuštění. Výstup označuje prostředky Azure, které se přidají, změní a zničí.
Ve výchozím nastavení Terraformu ukládá stav do stejného místního adresáře jako soubor Terraformu. Tento model funguje dobře ve scénářích s jedním uživatelem. Pokud ale více lidí pracuje na stejných prostředcích Azure, může se stát, že soubory místního stavu nebudou synchronizovány. K vyřešení tohoto problému Terraformu podporuje zápis stavových souborů do vzdáleného úložiště dat (například Azure Storage). V tomto scénáři může být problematické spustit terraform plan v 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 průběžné integrace.
4. spuštění analýzy statického kódu
Statickou analýzu kódu lze provést přímo na konfiguračním kódu Terraformu bez jeho provedení. Tato analýza může být užitečná pro 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 pro soubory Terraformu:
Statická analýza je často prováděna součástí kanálu průběžné integrace. Tyto testy nevyžadují vytvoření plánu spuštění nebo nasazení. V důsledku toho běží rychleji než jiné testy a obvykle se spouštějí jako první v procesu kontinuální integrace.
5. automatizace integračních testů pomocí kanálu Azure
Průběžná integrace zahrnuje testování celého systému při zavedení změny. V této části uvidíte konfiguraci kanálu Azure, která se používá k implementaci průběžné integrace.
Pomocí editoru podle vlastního výběru přejděte k místnímu klonu ukázkového projektu terraformu na GitHub.
Otevřete soubor
samples/integration-testing/src/azure-pipeline.yaml.Posuňte se dolů k části kroky , kde se zobrazí standardní sada kroků používaných ke spouštění různých rutin instalace a ověření.
Přečtěte si řádek, který čte, Krok 1: Spusťte statickou Code Analysis Checkov. V tomto kroku se v
Checkovpředchozím projektu spustí Analýza statického kódu v ukázkové terraformu konfiguraci.- bash: $(terraformWorkingDirectory)/checkov.sh $(terraformWorkingDirectory) displayName: Checkov Static Code AnalysisKlíčové body:
- Tento skript zodpovídá za spuštění Checkov v pracovním prostoru Terraformu připojeném do kontejneru Docker. Agenti spravovaných Microsoftem jsou zapnuté Docker. Spouštění nástrojů uvnitř kontejneru Docker je jednodušší a odstraňuje nutnost instalace Checkov na agenta kanálu Azure.
$(terraformWorkingDirectory)Proměnná je definována vazure-pipeline.yamlsouboru.
přečtěte si řádek, který čte, krok 2: instalace terraformu na agenta Azure Pipelines. Rozšíření úlohy verze sestavení terraformu , které jste nainstalovali dříve, obsahuje příkaz k instalaci terraformu na agentovi, na kterém běží kanál Azure. Tato úloha 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, se zadává přes proměnnou kanálu Azure s názvem
terraformVersiona definovanou vazure-pipeline.yamlsouboru.
- Verze Terraformu, která se má nainstalovat, se zadává přes proměnnou kanálu Azure s názvem
Zkontrolujte řádek Krok 3: Spuštění terraform init pro inicializaci pracovního prostoru. Teď, když je Terraform nainstalovaný v agentovi, 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
commandurčuje, který příkaz Terraformu se má spustit. - Vstup
workingDirectoryoznačuje cestu k adresáři Terraformu. - Proměnná
$(terraformWorkingDirectory)je definována vazure-pipeline.yamlsouboru .
- Vstup
Projděte si řádek Krok 4: Spuštění příkazu Terraform validate pro ověření syntaxe HCL. Po inicializaci adresáře projektu se
terraform validatespustí příkaz , který ověří konfiguraci na serveru.- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform validate' inputs: command: validate workingDirectory: $(terraformWorkingDirectory)Projděte si řádek Krok 5: Spuštění příkazu Terraform plan a ověřte syntaxi HCL. Jak jsme vysvětlili dříve, generování plánu provádění se provádí za účelem ověření, 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
environmentServiceNameodkazuje na název připojení služby Azure vytvořeného v části KonfiguraceenvironmentServiceName. Připojení umožňuje Terraformu přístup k vašemu předplatnému Azure. - Vstup
commandOptionsslouží k předání argumentů příkazu Terraformu. V tomto případě je určeno umístění. Proměnná$(azureLocation)je definována dříve v souboru YAML.
- Vstup
Import kanálu do Azure DevOps
Otevřete projekt Azure DevOps a přejděte do části Azure Pipelines.
Vyberte tlačítko Vytvořit kanál.
U možnosti Kde je váš kód? vyberte GitHub (YAML).

V tuto chvíli možná budete muset autorizovat přístup Azure DevOps vaší organizaci. Další informace o tomto tématu najdete v článku Sestavení GitHub úložiště.
V seznamu úložišť vyberte fork úložiště, které jste vytvořili ve vaší GitHub organizaci.
V kroku Konfigurace kanálu zvolte, že chcete začít z existujícího kanálu YAML.

Po zobrazení stránky Select existing YAML pipeline (Vybrat existující kanál YAML) zadejte větev a zadejte cestu ke kanálu YAML:
samples/integration-testing/src/azure-pipeline.yaml.
Vyberte Pokračovat a načtěte kanál Azure YAML z GitHub.
Když se zobrazí stránka Review your pipeline YAML (Zkontrolovat YAML kanálu), vyberte Run (Spustit) a kanál poprvé vytvořte a ručně aktivujte.

Ověření výsledků
Kanál můžete spustit ručně z uživatelského rozhraní Azure DevOps uživatelského rozhraní. V tomto článku ale ukážeme automatizovanou kontinuální integraci. Otestujte proces potvrzením změny ve samples/integration-testing/src složce vašeho roz forku úložiště. Tato změna automaticky aktivuje nový kanál ve větvi, do které kód nasazujete.

Jakmile tento krok skončíte, získejte přístup k podrobnostem v Azure DevOps a ujistěte se, že všechno proběhlo správně.

Řešení potíží s Terraformem v Azure
Řešení běžných problémů při používání Terraformu v Azure