Implementowanie testów integracji dla projektów programu Terraform na platformie Azure
Terraform umożliwia definiowanie, podgląd i wdrażanie infrastruktury chmurowej. Za pomocą narzędzia Terraform tworzysz pliki konfiguracji używając składni HCL. Składnia listy HCL umożliwia określenie dostawcy chmury — takiego jak platforma Azure — oraz elementów tworzących infrastrukturę chmury. Po utworzeniu plików konfiguracji należy utworzyć plan wykonywania, który umożliwia wyświetlenie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian należy zastosować plan wykonywania w celu wdrożenia infrastruktury.
Testy integracji sprawdzają, czy nowo wprowadzona zmiana kodu nie przerywa istniejącego kodu. W DevOps ciągła integracja (CI) odnosi się do procesu, który kompiluje cały system za każdym razem, gdy baza kodu zostanie zmieniona — na przykład, gdy ktoś chce scalić pull request do repozytorium Git. Poniższa lista zawiera typowe przykłady testów integracji:
- Narzędzia do analizy kodu statycznego, takie jak lint i format.
- Uruchom terraform validate, aby sprawdzić składnię pliku konfiguracji.
- Uruchom terraform plan, aby upewnić się, że konfiguracja będzie działać zgodnie z oczekiwaniami.
Z tego artykułu dowiesz się, jak wykonywać następujące działania:
- Poznaj podstawy testowania integracji dla projektów programu Terraform.
- Użyj usługi Azure DevOps do skonfigurowania potoku ciągłej integracji.
- Uruchom analizę kodu statycznego w kodzie programu Terraform.
- Uruchom
terraform validate
, aby zweryfikować pliki konfiguracji programu Terraform na komputerze lokalnym. - Uruchom
terraform plan
, aby zweryfikować pliki konfiguracji programu Terraform pod kątem usług zdalnych. - Użyj usługi Azure Pipeline, aby zautomatyzować ciągłą integrację.
Skonfiguruj program Terraform: jeśli jeszcze tego nie zrobiono, skonfiguruj program Terraform przy użyciu jednej z następujących opcji:
- Konfigurowanie narzędzia Terraform w usłudze Azure Cloud Shell przy użyciu powłoki Bash
- konfigurowanie programu Terraform w usłudze Azure Cloud Shell przy użyciu programu PowerShell
- Konfigurowanie narzędzia Terraform w systemie Windows przy użyciu powłoki Bash
- konfigurowanie programu Terraform w systemie Windows przy użyciu programu PowerShell
organizacja i projekt Azure DevOps: jeśli nie masz, utwórz organizację Azure DevOps.
rozszerzenie Terraform Build & Release Tasks: Zainstaluj rozszerzenie zadań kompilacji/wydania narzędzia Terraform w organizacji usługi Azure DevOps.
Przyznaj usłudze Azure DevOps dostęp do subskrypcji platformy Azure: Utwórz połączenie usługi Azure o nazwie
terraform-basic-testing-azure-connection
, aby umożliwić Azure Pipelines łączenie się z subskrypcjami platformy AzurePrzykładowy kod i zasoby: Pobierz z usługi GitHub projekt integration-testing. Katalog, w którym pobierasz przykład, jest określany jako przykładowy katalog .
Polecenie terraform validate jest uruchamiane z wiersza polecenia w katalogu zawierającym pliki narzędzia Terraform. To polecenie służy do sprawdzania poprawności składni.
W przykładowym katalogu przejdź do katalogu
src
.Uruchom terraform init, aby zainicjować katalog roboczy.
terraform init
Uruchom terraform validate, aby zweryfikować poprawność składni plików konfiguracji.
terraform validate
Kluczowe punkty:
- Zostanie wyświetlony komunikat wskazujący, że konfiguracja narzędzia Terraform jest prawidłowa.
Edytuj plik
main.tf
.W wierszu 5 wstaw literówkę, która unieważnia składnię. Na przykład zastąp
var.location
var.loaction
Zapisz plik.
Uruchom walidację ponownie.
terraform validate
Kluczowe punkty:
- Zostanie wyświetlony komunikat o błędzie wskazujący wiersz kodu w błędzie i opis błędu.
Jak widać, narzędzie Terraform wykryło problem ze składnią kodu konfiguracji. Ten problem uniemożliwia wdrożenie konfiguracji.
Dobrym rozwiązaniem jest zawsze uruchamianie terraform validate
względem plików programu Terraform przed wypchnięciem ich do systemu kontroli wersji. Ponadto ten poziom weryfikacji powinien być częścią potoku ciągłej integracji oprogramowania. W dalszej części tego artykułu dowiesz się, jak skonfigurować przepływ pracy platformy Azure w celu automatycznej walidacji.
W poprzedniej sekcji pokazano, jak zweryfikować konfigurację programu Terraform. Ten poziom testowania był specyficzny dla składni. Ten test nie uwzględniał tego, co można już wdrożyć na platformie Azure.
Terraform to język deklaratywny oznaczający, że deklarujesz, co chcesz uzyskać jako wynik końcowy. Załóżmy na przykład, że masz 10 maszyn wirtualnych w grupie zasobów. Następnie utworzysz plik Terraform definiujący trzy maszyny wirtualne. Zastosowanie tego planu nie zwiększa całkowitej liczby do 13. Zamiast tego narzędzie Terraform usuwa siedem z maszyn wirtualnych, tak aby pozostały trzy. Uruchomienie terraform plan
pozwala potwierdzić potencjalne wyniki zastosowania planu wykonania, aby uniknąć niespodzianek.
Aby wygenerować plan wykonywania programu Terraform, uruchom terraform plan. To polecenie łączy się z docelową subskrypcją platformy Azure, aby sprawdzić, która część konfiguracji została już wdrożona. Narzędzie Terraform określa następnie niezbędne zmiany, aby spełnić wymagania określone w pliku Terraform. Na tym etapie Terraform nie wdraża niczego. Mówi ci, co się stanie, jeśli zastosujesz plan.
Jeśli korzystasz z artykułu i wykonano kroki opisane w poprzedniej sekcji, uruchom polecenie terraform plan
:
terraform plan
Po uruchomieniu terraform plan
program Terraform wyświetla potencjalny wynik zastosowania planu wykonania. Dane wyjściowe wskazują zasoby platformy Azure, które zostaną dodane, zmienione i zniszczone.
Domyślnie program Terraform przechowuje stan w tym samym katalogu lokalnym co plik Terraform. Ten wzorzec działa dobrze w scenariuszach pojedynczego użytkownika. Jeśli jednak wiele osób pracuje nad tymi samymi zasobami platformy Azure, lokalne pliki stanu mogą wyjść z synchronizacji. Aby rozwiązać ten problem, program Terraform obsługuje zapisywanie plików stanu w zdalnym magazynie danych (takim jak usługa Azure Storage). W tym scenariuszu może być problematyczne uruchomienie terraform plan
na komputerze lokalnym i użycie go do obsługi maszyny zdalnej. W związku z tym warto zautomatyzować ten krok weryfikacji w ramach potoku ciągłej integracji.
Analizę kodu statycznego można wykonać bezpośrednio w kodzie konfiguracji programu Terraform bez jego wykonywania. Ta analiza może być przydatna do wykrywania problemów, takich jak problemy z zabezpieczeniami i niespójność zgodności.
Następujące narzędzia zapewniają analizę statyczną plików programu Terraform:
Analiza statyczna jest często wykonywana w ramach ciągłego procesu integracji. Te testy nie wymagają utworzenia planu wykonania ani wdrożenia. W rezultacie działają one szybciej niż inne testy i są zazwyczaj uruchamiane jako pierwsze w procesie ciągłej integracji.
Ciągła integracja obejmuje testowanie całego systemu po wprowadzeniu zmiany. W tej sekcji zostanie wyświetlona konfiguracja usługi Azure Pipeline używana do implementowania ciągłej integracji.
Korzystając z wybranego edytora, przejdź do lokalnego klonu przykładowego projektu Terraform w witrynie GitHub.
Otwórz plik
samples/integration-testing/src/azure-pipeline.yaml
.Przewiń w dół do sekcji kroków , gdzie zobaczysz standardowy zestaw kroków używanych do uruchamiania różnych procedur instalacji i walidacji.
Przejrzyj wiersz, który mówi: Krok 1: uruchom analizę statyczną kodu Checkov. W tym kroku projekt
Checkov
, o którym wspomniano wcześniej, uruchamia statyczną analizę kodu w przykładowej konfiguracji narzędzia Terraform.- bash: $(terraformWorkingDirectory)/checkov.sh $(terraformWorkingDirectory) displayName: Checkov Static Code Analysis
Kluczowe punkty:
- Ten skrypt jest odpowiedzialny za uruchomienie narzędzia Checkov w obszarze roboczym narzędzia Terraform zainstalowanym w kontenerze platformy Docker. Agenci zarządzani przez Microsoft obsługują Docker. Uruchamianie narzędzi wewnątrz kontenera platformy Docker jest łatwiejsze i eliminuje konieczność zainstalowania narzędzia Checkov na agencie usługi Azure Pipeline.
- Zmienna
$(terraformWorkingDirectory)
jest definiowana w plikuazure-pipeline.yaml
.
Przejrzyj wiersz, który zaczyna się od Krok 2: zainstaluj Terraform na agencie Azure Pipelines. Zainstalowane wcześniej rozszerzenie Terraform Build & Release Task zawiera polecenie instalacji Terraform na agencie, na którym działa Azure Pipeline. To zadanie jest wykonywane w tym kroku.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0 displayName: 'Install Terraform' inputs: terraformVersion: $(terraformVersion)
Kluczowe punkty:
- Wersja programu Terraform do zainstalowania jest określana za pośrednictwem zmiennej usługi Azure Pipeline o nazwie
terraformVersion
i zdefiniowanej w plikuazure-pipeline.yaml
.
- Wersja programu Terraform do zainstalowania jest określana za pośrednictwem zmiennej usługi Azure Pipeline o nazwie
Przejrzyj wiersz, który brzmi: Krok 3: uruchom narzędzie Terraform init, aby zainicjować obszar roboczy. Teraz, gdy program Terraform jest zainstalowany na agencie, można zainicjować katalog programu Terraform.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform init' inputs: command: init workingDirectory: $(terraformWorkingDirectory)
Kluczowe punkty:
- Dane wejściowe
command
określają, które polecenie narzędzia Terraform ma zostać uruchomione. - Dane wejściowe
workingDirectory
wskazują ścieżkę katalogu programu Terraform. - Zmienna
$(terraformWorkingDirectory)
jest definiowana w plikuazure-pipeline.yaml
.
- Dane wejściowe
Przejrzyj wiersz, który brzmi: Krok 4: uruchom narzędzie Terraform validate, aby zweryfikować składnię HCL. Po zainicjowaniu katalogu projektu zostanie uruchomiony
terraform validate
w celu zweryfikowania konfiguracji na serwerze.- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform validate' inputs: command: validate workingDirectory: $(terraformWorkingDirectory)
Przejrzyj wiersz, który brzmi, Krok 5: uruchom plan Terraform, aby zweryfikować składnię HCL. Jak wyjaśniono wcześniej, generowanie planu wykonania jest wykonywane w celu sprawdzenia, czy konfiguracja programu Terraform jest prawidłowa przed wdrożeniem.
- 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)
Kluczowe punkty:
- Wejście
environmentServiceName
odnosi się do nazwy połączenia usługi Azure utworzonego w Konfigurowanie środowiska. Połączenie umożliwia programowi Terraform dostęp do subskrypcji platformy Azure. - Wejście
commandOptions
jest używane do przekazywania argumentów do polecenia Terraform. W tym przypadku jest określana lokalizacja. Zmienna$(azureLocation)
jest zdefiniowana wcześniej w pliku YAML.
- Wejście
Otwórz projekt usługi Azure DevOps i przejdź do sekcji Azure Pipelines.
Wybierz przycisk Utwórz potok.
Dla opcji Gdzie jest twój kod? wybierz GitHub (YAML).
W tym momencie może być konieczne autoryzowanie usługi Azure DevOps w celu uzyskania dostępu do organizacji. Aby uzyskać więcej informacji na ten temat, zobacz artykuł Build GitHub repozytoria.
Na liście repozytoriów wybierz fork repozytorium utworzonego w organizacji GitHub.
W kroku Konfigurowanie rurociągu wybierz opcję rozpoczęcie od istniejącego rurociągu YAML.
Po wyświetleniu strony Wybierz istniejący potok YAML określ gałąź
master
i podaj ścieżkę do potoku YAML:samples/integration-testing/src/azure-pipeline.yaml
.Wybierz opcję Kontynuuj, aby załadować pipeline YAML platformy Azure z usługi GitHub.
Gdy zostanie wyświetlona strona Przegląd potoku YAML, wybierz Uruchomić, aby utworzyć i ręcznie wyzwolić potok po raz pierwszy.
Możesz uruchomić potok danych ręcznie z poziomu interfejsu użytkownika usługi Azure DevOps. Jednak punktem artykułu jest pokazanie automatycznej ciągłej integracji. Przetestuj proces, wprowadzając zmianę w folderze samples/integration-testing/src
rozgałęzionego repozytorium. Zmiana automatycznie uruchomi nowy potok w gałęzi, na którą wypychasz kod.
potok
Po wykonaniu tego kroku uzyskaj dostęp do szczegółów w usłudze Azure DevOps, aby upewnić się, że wszystko działa prawidłowo.
Rozwiązywanie typowych problemów podczas korzystania z narzędzia Terraform na platformie Azure