Sdílet prostřednictvím


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.

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.

  1. V ukázkovém adresáři přejděte do src adresáře.

  2. Spuštěním příkazu terraform init inicializujete pracovní adresář.

    terraform init
    
  3. 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á.
  4. Upravte soubor main.tf.

  5. Na řádku 5 vložte překlep, který zneplatňuje syntaxi. Nahraďte například var.locationvar.loaction.

  6. Uložte soubor.

  7. 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 planZobrazí 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.

  1. Pomocí libovolného editoru přejděte na místní klon ukázkového projektu Terraformu na GitHubu.

  2. Otevřete soubor samples/integration-testing/src/azure-pipeline.yaml.

  3. 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í.

  4. 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 souboru azure-pipeline.yaml.
  5. 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 souboru azure-pipeline.yaml.
  6. 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 souboru azure-pipeline.yaml.
  7. 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)
    
  8. 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.

Importujte pipelinu do Azure DevOps

  1. Otevřete projekt Azure DevOps a přejděte do části Azure Pipelines.

  2. Vyberte tlačítko Vytvořit kanál.

  3. Pro Kde je váš kód? vyberte GitHub (YAML).

    Kde je váš kód?

  4. 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.

  5. V seznamu úložišť vyberte fork úložiště, které jste vytvořili ve vaší organizaci Na GitHubu.

  6. V kroku Konfigurace kanálu zvolte, jestli chcete začít z existujícího kanálu YAML.

    existující kanál YAML

  7. 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.

    Výběr existujícího kanálu YAML

  8. Vyberte Pokračovat pro načtení Azure YAML pipeline z GitHubu.

  9. Když se zobrazí stránka Kontrola kanálu YAML, vyberte Spustit, aby se kanál poprvé vytvořil a aktivoval ručně.

    spuštění služby Azure Pipeline

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.

potrubí spuštěné z GitHubu

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

Další kroky