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

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.

  1. V rámci tohoto ukázkového adresáře přejděte do src adresáře.

  2. Spusťte terraformu init pro inicializaci pracovního adresáře.

    terraform init
    
  3. Spusťte příkaz terraformu Validate a ověřte syntaxi konfiguračních souborů.

    terraform validate
    

    Klíčové body:

    • Zobrazí se zpráva oznamující, že je konfigurace Terraformu platná.
  4. Úprava souboru main.tf.

  5. Na řádku 5 vložte překlep, které neověřuje syntaxi. Například var.location nahraďte var.loaction

  6. Soubor uložte.

  7. Znovu spusťte ověřování.

    terraform validate
    

    Klíč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.

  1. Pomocí editoru podle vlastního výběru přejděte k místnímu klonu ukázkového projektu terraformu na GitHub.

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

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

  4. Přečtěte si řádek, který čte, Krok 1: Spusťte statickou Code Analysis Checkov. V tomto kroku se v Checkov předchozím projektu spustí Analýza statického kódu v ukázkové terraformu konfiguraci.

    - 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 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 v azure-pipeline.yaml souboru.
  5. 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 terraformVersion a definovanou v azure-pipeline.yaml souboru.
  6. 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 command určuje, který příkaz Terraformu se má spustit.
    • Vstup workingDirectory označuje cestu k adresáři Terraformu.
    • Proměnná $(terraformWorkingDirectory) je definována v azure-pipeline.yaml souboru .
  7. 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 validate spustí 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)
    
  8. 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 environmentServiceName odkazuje na název připojení služby Azure vytvořeného v části Konfigurace environmentServiceName. Připojení umožňuje Terraformu přístup k vašemu předplatnému Azure.
    • Vstup commandOptions slouží 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.

Import kanálu 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. U možnosti Kde je váš kód? vyberte GitHub (YAML).

    Kde je váš kód?

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

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

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

    Existující kanál YAML

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

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

  8. Vyberte Pokračovat a načtěte kanál Azure YAML z GitHub.

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

    Spuštění kanálu Azure Pipelines

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.

Kanál spuštěný z GitHub

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

Azure DevOps Zelený kanál

Řešení potíží s Terraformem v Azure

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

Další kroky