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.

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.

  1. A példakönyvtárban keresse meg a src könyvtárat.

  2. Futtassa a terraform init parancsot a munkakönyvtár inicializálásához.

    terraform init
    
  3. 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.
  4. Szerkessze a main.tf fájlt.

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

  6. Mentse a fájlt.

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

  1. A választott szerkesztővel keresse meg a Terraform mintaprojekt helyi klónját a GitHubon.

  2. Nyissa meg a samples/integration-testing/src/azure-pipeline.yaml fájlt.

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

  4. 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ájlban azure-pipeline.yaml van definiálva.
  5. 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 elnevezett terraformVersion és definiált Azure Pipeline-változón keresztül van megadva.
  6. 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ájlban azure-pipeline.yaml van definiálva.
  7. 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)
    
  8. 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 folyamat importálása az Azure DevOpsba

  1. Nyissa meg az Azure DevOps-projektet, és lépjen az Azure Pipelines szakaszba.

  2. Válassza a Folyamat létrehozása gombot.

  3. A Hol van a kód? lehetőségnél válassza a GitHub (YAML) lehetőséget.

    Hol található a kód?

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

  5. Az adattárak listájában válassza ki a GitHub-szervezetben létrehozott adattár elágazását.

  6. A Folyamat konfigurálása lépésben válasszon egy meglévő YAML-folyamatból való kezdést.

    Meglévő YAML-folyamat

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

    Meglévő YAML-folyamat kiválasztása

  8. Válassza a Folytatás lehetőséget az Azure YAML-folyamat GitHubról való betöltéséhez.

  9. 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 Azure Pipeline futtatása

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.

A GitHubról futó folyamat

Miután elvégezte ezt a lépést, az Azure DevOpsban hozzáférhet a részletekhez, hogy minden megfelelően futjon.

Azure DevOps Green Pipeline

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