Gyakorlat – Több környezet hozzáadása a munkafolyamathoz
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.
A Visual Studio Code-ban hozzon létre egy új fájlt a lint.yml nevű .github/workflows mappában.
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.
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.
Hozzon létre egy új fájlt a .github/workflows mappában deploy.yml.
Ez a fájl az egyes környezetekhez futtatott összes üzembe helyezési tevékenységet jelöli.
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
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.
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 }}
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
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
Mentse a fájl módosításait.
A munkafolyamat-definíció frissítése a sablonok használatára
Nyissa meg a workflow.yml fájlt a .github/workflows mappában.
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.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
Törölje a frissített lint feladat alatti fájl minden elemét.
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 }}
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.
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 }}
Mentse a módosításokat.
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
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.
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
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.
Válassza ki a deploy-toy-website-environments munkafolyamatot .
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.
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.
Az üzembe helyezés jóváhagyása az éles környezetben az Üzembe helyezés áttekintése gombra kattintva.
Válassza ki az Éles környezetet, majd a Jóváhagyás és üzembe helyezés gombot.
Várja meg, amíg a munkafolyamat fut. A munkafolyamat sikeresen befejeződött.
Válassza a Kód lehetőséget.
Válassza ki az éles üzembe helyezést.
Figyelje meg, hogy az üzembe helyezési képernyőn megjelenik az éles környezet üzembe helyezési előzményeinek áttekintése.
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.
Nyissa meg a böngészőjében az Azure Portalt.
Nyissa meg a ToyWebsiteProduction erőforráscsoportot.
Az erőforrások listájában nyissa meg a Azure-alkalmazás Service alkalmazást.
Figyelje meg, hogy az App Service-csomag típusa S1.
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.