Gyakorlat – Több környezet hozzáadása a munkafolyamathoz

Befejeződött

Most már készen áll a munkafolyamat frissítésére a tesztelési és az éles környezetekben való üzembe helyezéshez. Ebben a leckében úgy fogja frissíteni a munkafolyamatot, hogy úgynevezett munkafolyamatokat használjon, hogy újra felhasználhassa a feladatokat a környezetekben.

A folyamat során a következőt fogja elvégezni:

  • Adjon hozzá egy újrafelhasználható munkafolyamatot a lint feladathoz.
  • Adjon hozzá egy újrafelhasználható munkafolyamatot, amely meghatározza a környezetekben való üzembe helyezéshez szükséges feladatokat.
  • Frissítse a munkafolyamatot a hívott munkafolyamatok használatára.
  • Futtassa a munkafolyamatot, és tekintse meg az eredményeket.

Újrafelhasználható munkafolyamat hozzáadása a lint feladathoz

A lint-feladat csak egyszer történik a munkafolyamat futtatása során, függetlenül attól, hogy hány környezetbe telepíti a munkafolyamatot. Így nem igazán kell egy úgynevezett munkafolyamatot használnia a lint feladathoz. A fő munkafolyamat-definíciós fájl egyszerű és könnyen olvasható megőrzése érdekében azonban úgy dönt, hogy a lint feladatot egy külön munkafolyamat-fájlban határozza meg.

  1. A Visual Studio Code-ban hozzon létre egy új fájlt a lint.yml nevű .github/workflows mappában.

    Képernyőkép a Visual Studio Code Explorerről, a github és a munkafolyamatok mappáival, valamint a lint pont YML-fájllal.

  2. Illessze be a következő munkafolyamat-definíciót a fájlba:

    name: lint
    
    on:
      workflow_call:
    
    jobs:
      lint:
        name: Lint code
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
    
        - name: Lint code
          run: |
            az bicep build --file deploy/main.bicep
    

    A lint feladat megegyezik a munkafolyamatban már meglévő lintfeladatéval, de most már egy külön munkafolyamat-fájlban van.

  3. Mentse a módosításokat, és zárja be a fájlt.

Újrafelhasználható munkafolyamat hozzáadása üzembe helyezéshez

Hozzon létre egy újrafelhasználható munkafolyamatot, amely meghatározza az egyes környezetek üzembe helyezéséhez szükséges összes feladatot. Bemenetek és titkos kódok használatával adja meg azokat a beállításokat, amelyek eltérhetnek a környezetek között.

  1. Hozzon létre egy új fájlt a .github/workflows mappában deploy.yml.

    Képernyőkép a Visual Studio Code Explorerről a pont github- és munkafolyamat-mappákkal, valamint az üzembe helyezési pont YML-fájljával.

    Ez a fájl az egyes környezetekhez futtatott összes üzembe helyezési tevékenységet jelöli.

  2. Illessze be a következő munkafolyamatnevet, eseményindítót, bemeneteket és titkos kulcsokat a fájlba:

    name: deploy
    
    on:
      workflow_call:
        inputs:
          environmentType:
            required: true
            type: string
          resourceGroupName:
            required: true
            type: string
        secrets:
          AZURE_CLIENT_ID:
            required: true
          AZURE_TENANT_ID:
            required: true
          AZURE_SUBSCRIPTION_ID:
            required: true
    

    Feljegyzés

    Amikor elkezd dolgozni a YAML-fájllal a Visual Studio Code-ban, előfordulhat, hogy néhány piros hullámos vonal jelzi, hogy probléma van. Ennek az az oka, hogy a YAML-fájlokHoz készült Visual Studio Code-bővítmény néha helytelenül találgatja a fájl sémáját.

    Figyelmen kívül hagyhatja a bővítmény által felhozott problémákat. Vagy ha szeretné, hozzáadhatja a következő kódot a fájl tetejére, hogy elnyomja a bővítmény találgatását:

    # yaml-language-server: $schema=./deploy.yml
    
  3. A titkos kódok alatt illessze be az érvényesítési feladat definícióját:

    jobs:
      validate:
         runs-on: ubuntu-latest
         steps:
         - uses: actions/checkout@v3
         - uses: azure/login@v1
           name: Sign in to Azure
           with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
         - if: inputs.environmentType != 'Production'
           uses: azure/arm-deploy@v1
           name: Run preflight validation
           with:
             deploymentName: ${{ github.run_number }}
             resourceGroupName: ${{ inputs.resourceGroupName }}
             template: ./deploy/main.bicep
             parameters: >
               environmentType=${{ inputs.environmentType }}
             deploymentMode: Validate
         - if: inputs.environmentType == 'Production'
           uses: azure/arm-deploy@v1
           name: Run what-if
           with:
             failOnStdErr: false
             resourceGroupName: ${{ inputs.resourceGroupName }}
             template: ./deploy/main.bicep
             parameters: >
               environmentType=${{ inputs.environmentType }}
             additionalArguments: --what-if
    

    Figyelje meg, hogy a rendszer egy feltételt alkalmaz a feladatokra. Az előzetes ellenőrzés csak nem éles környezetekben fut. A lehetőségelemzési művelet csak az éles környezetben fut. A képzési terv előző moduljában külön feladatokat használt ezekhez a műveletekhez, de itt ezeket kombinálva egyszerűsítheti a munkafolyamatot.

    Tipp.

    A YAML-fájlok érzékenyek a behúzásra. Akár beírja, akár beilleszti ezt a kódot, győződjön meg arról, hogy a behúzás helyes. A gyakorlat későbbi részében megjelenik a teljes YAML-munkafolyamat-definíció, így ellenőrizheti, hogy a fájl egyezik-e.

  4. Az érvényesítési feladat alatt illessze be az üzembe helyezési feladat definícióját:

    deploy:
      needs: validate
      environment: ${{ inputs.environmentType }}
      runs-on: ubuntu-latest
      outputs:
        appServiceAppHostName: ${{ steps.deploy.outputs.appServiceAppHostName }}
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/arm-deploy@v1
        id: deploy
        name: Deploy Bicep file
        with:
          failOnStdErr: false
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ inputs.resourceGroupName }}
          template: ./deploy/main.bicep
          parameters: >
            environmentType=${{ inputs.environmentType }}
    
  5. Az üzembe helyezési feladat alatt illessze be a füsttesztelési feladat definícióját:

    smoke-test:
      runs-on: ubuntu-latest
      needs: deploy
      steps:
      - uses: actions/checkout@v3
      - run: |
          $container = New-PesterContainer `
            -Path 'deploy/Website.Tests.ps1' `
            -Data @{ HostName = '${{needs.deploy.outputs.appServiceAppHostName}}' }
          Invoke-Pester `
            -Container $container `
            -CI
        name: Run smoke tests
        shell: pwsh
    
  6. Ellenőrizze, hogy a deploy.yml fájl a következő példához hasonlóan néz-e ki:

    name: deploy
    
    on:
      workflow_call:
        inputs:
          environmentType:
            required: true
            type: string
          resourceGroupName:
            required: true
            type: string
        secrets:
          AZURE_CLIENT_ID:
            required: true
          AZURE_TENANT_ID:
            required: true
          AZURE_SUBSCRIPTION_ID:
            required: true
    
    jobs:
      validate:
         runs-on: ubuntu-latest
         steps:
         - uses: actions/checkout@v3
         - uses: azure/login@v1
           name: Sign in to Azure
           with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
         - if: inputs.environmentType != 'Production'
           uses: azure/arm-deploy@v1
           name: Run preflight validation
           with:
             deploymentName: ${{ github.run_number }}
             resourceGroupName: ${{ inputs.resourceGroupName }}
             template: ./deploy/main.bicep
             parameters: >
               environmentType=${{ inputs.environmentType }}
             deploymentMode: Validate
         - if: inputs.environmentType == 'Production'
           uses: azure/arm-deploy@v1
           name: Run what-if
           with:
             failOnStdErr: false
             resourceGroupName: ${{ inputs.resourceGroupName }}
             template: ./deploy/main.bicep
             parameters: >
               environmentType=${{ inputs.environmentType }}
             additionalArguments: --what-if
    
      deploy:
        needs: validate
        environment: ${{ inputs.environmentType }}
        runs-on: ubuntu-latest
        outputs:
          appServiceAppHostName: ${{ steps.deploy.outputs.appServiceAppHostName }}
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          id: deploy
          name: Deploy Bicep file
          with:
            failOnStdErr: false
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ inputs.resourceGroupName }}
            template: ./deploy/main.bicep
            parameters: >
              environmentType=${{ inputs.environmentType }}
    
      smoke-test:
        runs-on: ubuntu-latest
        needs: deploy
        steps:
        - uses: actions/checkout@v3
        - run: |
            $container = New-PesterContainer `
              -Path 'deploy/Website.Tests.ps1' `
              -Data @{ HostName = '${{needs.deploy.outputs.appServiceAppHostName}}' }
            Invoke-Pester `
              -Container $container `
              -CI
          name: Run smoke tests
          shell: pwsh
    
  7. Mentse a fájl módosításait.

A munkafolyamat-definíció frissítése a sablonok használatára

  1. Nyissa meg a workflow.yml fájlt a .github/workflows mappában.

  2. Távolítsa el a env: szakasz tartalmát, beleértve a két környezeti változót is. Ezeket hamarosan környezetspecifikus változókra cseréli.

  3. Távolítsa el a lint: feladatdefiníció tartalmát, és cserélje le a következő kódra a korábban létrehozott lint.yml fájl használatához:

    # Lint the Bicep file.
    lint:
      uses: ./.github/workflows/lint.yml
    
  4. Törölje a frissített lint feladat alatti fájl minden elemét.

  5. A fájl alján adja hozzá a következő kódot a tesztkörnyezetben való üzembe helyezéshez:

    # Deploy to the test environment.
    deploy-test:
      uses: ./.github/workflows/deploy.yml
      needs: lint
      with:
        environmentType: Test
        resourceGroupName: ToyWebsiteTest
      secrets:
        AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_TEST }}
        AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
        AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  6. Az imént hozzáadott kód alatt adja hozzá a következő kódot az éles környezetben való üzembe helyezéshez:

    # Deploy to the production environment.
    deploy-production:
      uses: ./.github/workflows/deploy.yml
      needs: deploy-test
      with:
        environmentType: Production
        resourceGroupName: ToyWebsiteProduction
      secrets:
        AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_PRODUCTION }}
        AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
        AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    

    A frissített munkafolyamat egyszer futtatja a lint feladatot. Ezután kétszer használja a deploy.yml nevű munkafolyamatot: környezetenként egyszer. Így a munkafolyamat-definíció egyértelmű és könnyen érthető marad. A YAML-fájl megjegyzései azonosítják az egyes feladatok célkörnyezetét.

  7. Ellenőrizze, hogy a workflow.yml fájl a következő példához hasonlóan néz-e ki:

    name: deploy-toy-website-environments
    concurrency: toy-company
    
    on:
      push:
        branches:
          - main
      workflow_dispatch:
    
    permissions:
      id-token: write
      contents: read
    
    jobs:
    
      # Lint the Bicep file.
      lint:
        uses: ./.github/workflows/lint.yml
    
      # Deploy to the test environment.
      deploy-test:
        uses: ./.github/workflows/deploy.yml
        needs: lint
        with:
          environmentType: Test
          resourceGroupName: ToyWebsiteTest
        secrets:
          AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_TEST }}
          AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
      # Deploy to the production environment.
      deploy-production:
        uses: ./.github/workflows/deploy.yml
        needs: deploy-test
        with:
          environmentType: Production
          resourceGroupName: ToyWebsiteProduction
        secrets:
          AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_PRODUCTION }}
          AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  8. Mentse a módosításokat.

  9. Véglegesítse és küldje le a módosításokat a Git-adattárba az alábbi parancsok futtatásával a Visual Studio Code terminálon:

    git add .
    git commit -m "Add reusable workflows"
    git push
    
  10. Mivel ez az első alkalom, hogy leküldi az adattárba, előfordulhat, hogy a rendszer kérni fogja a bejelentkezést.

    Windows rendszeren írja be az 1 értéket a webböngészővel történő hitelesítéshez, majd válassza az Enter lehetőséget.

    MacOS rendszeren válassza az Engedélyezés lehetőséget.

  11. Megnyílik egy böngészőablak. Előfordulhat, hogy újra be kell jelentkeznie a GitHubra. Válassza az Engedélyezés lehetőséget.

A munkafolyamat futtatásának megtekintése

  1. A böngészőben lépjen a Műveletek elemre.

    A munkafolyamat Első véglegesítés címkével ellátott első futtatása hibaként jelenik meg. A GitHub automatikusan futtatta a munkafolyamatot az adattár létrehozásakor. Nem sikerült, mert a titkos kódok akkor még nem voltak készen. Ezt a hibát figyelmen kívül hagyhatja.

  2. Válassza ki a deploy-toy-website-environments munkafolyamatot .

  3. Válassza ki a munkafolyamat legutóbbi futtatását.

    Figyelje meg, hogy a munkafolyamat futtatása mostantól megjeleníti a YAML-fájlokban definiált összes feladatot.

    Egyes figyelmeztetések a Széljegyzetek panelen jelennek meg. Ezek a figyelmeztetések azért vannak, mert a Bicep tájékoztató üzeneteket ír a munkafolyamat-naplóba. Ezeket a figyelmeztetéseket figyelmen kívül hagyhatja.

  4. Várja meg, amíg a munkafolyamat szüneteltetve lesz az üzembe helyezési/üzembe helyezési feladat előtt. Eltarthat néhány percig, amíg a munkafolyamat eléri ezt a pontot.

    Képernyőkép a GitHubról, amelyen a munkafolyamat jóváhagyásra szüneteltetve fut.

  5. Az üzembe helyezés jóváhagyása az éles környezetben az Üzembe helyezés áttekintése gombra kattintva.

  6. Válassza ki az Éles környezetet, majd a Jóváhagyás és üzembe helyezés gombot.

    Képernyőkép a GitHub felületéről, amely a munkafolyamat jóváhagyási oldalát és a Jóváhagyás és üzembe helyezés gombot jeleníti meg.

    Várja meg, amíg a munkafolyamat fut. A munkafolyamat sikeresen befejeződött.

  7. Válassza a Kód lehetőséget.

  8. Válassza ki az éles üzembe helyezést.

    Képernyőkép a GitHubról, amelyen a Kód lap környezete látható, és az éles környezet ki van emelve.

  9. Figyelje meg, hogy az üzembe helyezési képernyőn megjelenik az éles környezet üzembe helyezési előzményeinek áttekintése.

    Képernyőkép a GitHubról, amely az éles környezetet jeleníti meg, és az üzembe helyezési előzmények egyetlen üzembe helyezést mutatnak.

  10. Válassza ki a véglegesítés azonosítót.

    Figyelje meg, hogy a GitHub megjeleníti az üzembe helyezésben szereplő véglegesítések listáját. Ez segít a környezet változásainak időbeli változásainak megtekintésében.

    Képernyőkép a GitHubról, amely az éles környezet üzembe helyezési adatait jeleníti meg a véglegesítések listájával.

  11. Nyissa meg a böngészőjében az Azure Portalt.

  12. Nyissa meg a ToyWebsiteProduction erőforráscsoportot.

  13. Az erőforrások listájában nyissa meg a Azure-alkalmazás Service alkalmazást.

    Képernyőkép az Azure Portalról, amelyen az App Services-alapú termékoldali éles alkalmazás és az App Service-csomag termékváltozatának részletei láthatók.

    Figyelje meg, hogy az App Service-csomag típusa S1.

  14. Nyissa meg az App Service alkalmazást a ToyWebsiteTest erőforráscsoportban.

    Figyelje meg, hogy az App Service-csomag típusa F1. A két környezet különböző beállításokat használ a Bicep-fájlban definiált módon.