Integrációs tesztek implementálása Terraform-projektekhez az Azure-ban
A Terraform lehetővé teszi a felhőinfrastruktúra definícióját, előzetes verzióját és üzembe helyezését. A Terraform használatával konfigurációs fájlokat hozhat létre HCL-szintaxissal. A HCL szintaxissal megadhatja a felhőszolgáltatót – például az Azure-t – és a felhőinfrastruktúra elemeit. A konfigurációs fájlok létrehozása után létrehoz egy végrehajtási tervet , amely lehetővé teszi az infrastruktúra változásainak előzetes megtekintését az üzembe helyezés előtt. A módosítások ellenőrzése után alkalmazza a végrehajtási tervet az infrastruktúra üzembe helyezésére.
Az integrációs tesztek ellenőrzik, hogy az újonnan bevezetett kódmódosítások nem szegik-e meg a meglévő kódot. A DevOpsban a folyamatos integráció (CI) egy olyan folyamatra utal, amely a teljes rendszert létrehozza a kódbázis módosításakor – például valaki, aki egy pr-t szeretne egyesíteni egy Git-adattárral. Az alábbi lista az integrációs tesztek gyakori példáit tartalmazza:
- Statikus kódelemzési eszközök, például lint és formátum.
- A terraform-ellenőrzés futtatásával ellenőrizze a konfigurációs fájl szintaxisát.
- Futtassa a Terraform-tervet , hogy a konfiguráció a várt módon működjön.
Ebben a cikkben az alábbiakkal ismerkedhet meg:
- Ismerje meg a Terraform-projektek integrációs tesztelésének alapjait.
- Az Azure DevOps használatával konfigurálhat egy folyamatos integrációs folyamatot.
- Statikus kódelemzés futtatása Terraform-kódon.
- Futtassa
terraform validate
a Terraform konfigurációs fájljainak érvényesítését a helyi gépen. - Futtassa
terraform plan
annak ellenőrzéséhez, hogy a Terraform-konfigurációs fájlok távoli szolgáltatások szempontjából származnak-e. - Az Azure Pipeline használatával automatizálhatja a folyamatos integrációt.
1. A környezet konfigurálása
- Azure-előfizetés: Ha nem rendelkezik Azure-előfizetéssel, első lépésként mindössze néhány perc alatt létrehozhat egy ingyenes fiókot.
A Terraform konfigurálása: Ha még nem tette meg, konfigurálja a Terraformot az alábbi lehetőségek egyikével:
Azure DevOps-szervezet és -projekt: Ha nincs , hozzon létre egy Azure DevOps-szervezetet.
Terraform Build & Release Tasks bővítmény: Telepítse a Terraform build/release tasks bővítményt az Azure DevOps-szervezetébe.
Azure DevOps-hozzáférés biztosítása az Azure-előfizetéshez: Hozzon létre egy Azure-szolgáltatáskapcsolatot , amely lehetővé
terraform-basic-testing-azure-connection
teszi az Azure Pipelines számára az Azure-előfizetésekhez való csatlakozástPéldakód és erőforrások: Töltse le a GitHubról az integrációtesztelési projektet. A példakönyvtárnak nevezzük azt a könyvtárat, amelybe letölti a mintát.
2. Helyi Terraform-konfiguráció ellenőrzése
A terraform-érvényesítési parancs a Terraform-fájlokat tartalmazó könyvtár parancssorából fut. Ez a parancsok fő célja a szintaxis érvényesítése.
A példakönyvtárban keresse meg a
src
könyvtárat.Futtassa a terraform init parancsot a munkakönyvtár inicializálásához.
terraform init
A terraform-ellenőrzés futtatásával ellenőrizze a konfigurációs fájlok szintaxisát.
terraform validate
Főbb pontok:
- Megjelenik egy üzenet, amely jelzi, hogy a Terraform-konfiguráció érvényes.
Szerkessze a
main.tf
fájlt.Az 5. sorban szúrjon be egy elírást, amely érvényteleníti a szintaxist. Például cserélje le a következőre
var.location
:var.loaction
Mentse a fájlt.
Futtassa újra az ellenőrzést.
terraform validate
Főbb pontok:
- Megjelenik egy hibaüzenet, amely a hiba kódsorát és a hiba leírását jelzi.
Mint látható, a Terraform hibát észlelt a konfigurációs kód szintaxisában. Ez a probléma megakadályozza a konfiguráció üzembe helyezését.
Célszerű mindig a Terraform-fájlokon futni terraform validate
, mielőtt a verziókövetési rendszerbe küldené őket. Az ellenőrzésnek emellett a folyamatos integrációs folyamat részét kell képeznie. A cikk későbbi részében bemutatjuk, hogyan konfigurálhat egy Azure-folyamatot az automatikus ellenőrzéshez.
3. Terraform-konfiguráció ellenőrzése
Az előző szakaszban megismerkedett a Terraform-konfiguráció ellenőrzésének módjával. Ez a tesztelési szint a szintaxisra volt jellemző. Ez a teszt nem veszi figyelembe, hogy mi lehet már üzembe helyezve az Azure-ban.
A Terraform egy deklaratív nyelv , amely azt jelenti, hogy végeredményként deklarálja, amit szeretne. Tegyük fel például, hogy 10 virtuális gépe van egy erőforráscsoportban. Ezután létrehoz egy Terraform-fájlt, amely három virtuális gépet határoz meg. A terv alkalmazása nem növeli a teljes darabszámot 13-ra. Ehelyett a Terraform hét virtuális gépet töröl, hogy hárommal végződjön. A futtatás terraform plan
lehetővé teszi a végrehajtási terv alkalmazásának lehetséges eredményeinek megerősítését a meglepetések elkerülése érdekében.
A Terraform végrehajtási terv létrehozásához terraform-tervet kell futtatnia. Ez a parancs a cél Azure-előfizetéshez csatlakozva ellenőrzi, hogy a konfiguráció mely része van már üzembe helyezve. A Terraform ezután meghatározza a Terraform-fájlban megadott követelményeknek való megfeleléshez szükséges módosításokat. Ebben a szakaszban a Terraform nem helyez üzembe semmit. Azt mondja, mi fog történni, ha alkalmazza a tervet.
Ha követi a cikket, és elvégezte az előző szakaszban leírt lépéseket, futtassa a terraform plan
parancsot:
terraform plan
A futtatás terraform plan
után a Terraform megjeleníti a végrehajtási terv alkalmazásának lehetséges eredményét. A kimenet azt jelzi, hogy mely Azure-erőforrások lesznek hozzáadva, módosítva és megsemmisítve.
A Terraform alapértelmezés szerint ugyanabban a helyi könyvtárban tárolja az állapotot, mint a Terraform-fájl. Ez a minta jól működik egyfelhasználós forgatókönyvekben. Ha azonban többen dolgoznak ugyanazon az Azure-erőforráson, a helyi állapotfájlok nem lesznek szinkronizálva. A probléma megoldásához a Terraform támogatja az állapotfájlok távoli adattárba (például az Azure Storage-ba) való írását. Ebben a forgatókönyvben problémát jelenthet egy helyi gépen való futtatás terraform plan
és egy távoli gép megcélzása. Ennek eredményeképpen érdemes lehet automatizálni ezt az ellenőrzési lépést a folyamatos integrációs folyamat részeként.
4. Statikus kódelemzés futtatása
A statikus kódelemzés közvetlenül a Terraform konfigurációs kódján végezhető el anélkül, hogy végrehajtanák. Ez az elemzés hasznos lehet olyan problémák észleléséhez, mint a biztonsági problémák és a megfelelőségi inkonzisztencia.
Az alábbi eszközök statikus elemzést biztosítanak a Terraform-fájlokhoz:
A statikus elemzést gyakran egy folyamatos integrációs folyamat részeként hajtják végre. Ezek a tesztek nem igényelnek végrehajtási terv vagy üzembe helyezés létrehozását. Ennek eredményeképpen gyorsabban futnak, mint a többi teszt, és általában a folyamatos integrációs folyamat elején futnak.
5. Integrációs tesztek automatizálása az Azure Pipeline használatával
A folyamatos integráció magában foglalja egy teljes rendszer tesztelését a változás bevezetésekor. Ebben a szakaszban a folyamatos integráció megvalósításához használt Azure Pipeline-konfiguráció jelenik meg.
A választott szerkesztővel keresse meg a Terraform mintaprojekt helyi klónját a GitHubon.
Nyissa meg a
samples/integration-testing/src/azure-pipeline.yaml
fájlt.Görgessen le a lépések szakaszához, ahol a különböző telepítési és ellenőrzési rutinok futtatásához használt lépések standard készlete látható.
Tekintse át az 1. lépésben olvasható sort: futtassa a Checkov statikus kódelemzést. Ebben a lépésben a
Checkov
korábban említett projekt statikus kódelemzést futtat a Terraform-mintakonfiguráción.- bash: $(terraformWorkingDirectory)/checkov.sh $(terraformWorkingDirectory) displayName: Checkov Static Code Analysis
Főbb pontok:
- Ez a szkript felelős a Checkov futtatásáért a Docker-tárolóban csatlakoztatott Terraform-munkaterületen. A Microsoft által felügyelt ügynökök engedélyezve vannak a Dockerben. Az eszközök Docker-tárolón belüli futtatása egyszerűbb, és nem szükséges telepíteni a Checkovot az Azure Pipeline-ügynökre.
- A
$(terraformWorkingDirectory)
változó a fájlbanazure-pipeline.yaml
van definiálva.
Tekintse át a 2. lépésben olvasható sort: telepítse a Terraformot az Azure Pipelines-ügynökre. A korábban telepített Terraform Build &Release Task bővítmény rendelkezik egy paranccsal, amely a Terraformot telepíti az Azure Pipelinet futtató ügynökre. Ebben a lépésben ez a feladat történik.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0 displayName: 'Install Terraform' inputs: terraformVersion: $(terraformVersion)
Főbb pontok:
- A telepíteni kívánt Terraform-verzió egy, a
azure-pipeline.yaml
fájlban elnevezettterraformVersion
és definiált Azure Pipeline-változón keresztül van megadva.
- A telepíteni kívánt Terraform-verzió egy, a
Tekintse át a 3. lépésben olvasható sort: futtassa a Terraform init parancsot a munkaterület inicializálásához. Most, hogy a Terraform telepítve van az ügynökön, a Terraform könyvtár inicializálható.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform init' inputs: command: init workingDirectory: $(terraformWorkingDirectory)
Főbb pontok:
- A
command
bemenet megadja, hogy melyik Terraform-parancsot kell futtatni. - A
workingDirectory
bemenet a Terraform könyvtár elérési útját jelzi. - A
$(terraformWorkingDirectory)
változó a fájlbanazure-pipeline.yaml
van definiálva.
- A
Tekintse át az olvasott sort, 4. lépés: futtassa a Terraform-ellenőrzés futtatását a HCL szintaxisának ellenőrzéséhez. A projektkönyvtár inicializálása
terraform validate
után a rendszer futtatja a konfigurációt a kiszolgálón.- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform validate' inputs: command: validate workingDirectory: $(terraformWorkingDirectory)
Tekintse át az 5. lépésben olvasható sort: futtassa a Terraform-tervet a HCL szintaxisának ellenőrzéséhez. A korábban ismertetett módon a végrehajtási terv létrehozása annak ellenőrzésére történik, hogy a Terraform-konfiguráció érvényes-e az üzembe helyezés előtt.
- 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)
Főbb pontok:
- A
environmentServiceName
bemenet a környezet konfigurálásához létrehozott Azure-szolgáltatáskapcsolat nevére vonatkozik. A kapcsolat lehetővé teszi a Terraform számára az Azure-előfizetés elérését. - A
commandOptions
bemenet argumentumokat ad át a Terraform parancsnak. Ebben az esetben egy hely van megadva. A$(azureLocation)
változó a YAML-fájl korábbi szakaszában van definiálva.
- A
A folyamat importálása az Azure DevOpsba
Nyissa meg az Azure DevOps-projektet, és lépjen az Azure Pipelines szakaszba.
Válassza a Folyamat létrehozása gombot.
A Hol van a kód? lehetőségnél válassza a GitHub (YAML) lehetőséget.
Ezen a ponton előfordulhat, hogy engedélyeznie kell az Azure DevOps számára a szervezethez való hozzáférést. A témakörről további információt a GitHub-adattárak létrehozása című cikkben talál.
Az adattárak listájában válassza ki a GitHub-szervezetben létrehozott adattár elágazását.
A Folyamat konfigurálása lépésben válasszon egy meglévő YAML-folyamatból való kezdést.
Amikor megjelenik a Meglévő YAML-folyamat kiválasztása lap, adja meg az ágat
master
, és adja meg a YAML-folyamat elérési útját:samples/integration-testing/src/azure-pipeline.yaml
.Válassza a Folytatás lehetőséget az Azure YAML-folyamat GitHubról való betöltéséhez.
Amikor megjelenik a Folyamat YAML-áttekintése lap, válassza a Futtatás lehetőséget a folyamat első létrehozásához és manuális aktiválásához.
Az eredmények ellenőrzése
A folyamatot manuálisan is futtathatja az Azure DevOps felhasználói felületén. A cikk célja azonban az automatizált folyamatos integráció bemutatása. Tesztelje a folyamatot az elágaztatott adattár mappájának módosításával samples/integration-testing/src
. A módosítás automatikusan elindít egy új folyamatot azon az ágon, amelyen a kódot le szeretné nyomni.
Miután elvégezte ezt a lépést, az Azure DevOpsban hozzáférhet a részletekhez, hogy minden megfelelően futjon.
A Terraform hibaelhárítása az Azure-ban
A Terraform Azure-beli használatakor felmerülő gyakori problémák elhárítása
Következő lépések
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: