Øvelse – Føj flere miljøer til din arbejdsproces
Nu er du klar til at opdatere din arbejdsproces, så den udrulles i både dine test- og produktionsmiljøer. I dette undermodul skal du opdatere din arbejdsproces til at bruge kaldte arbejdsprocesser, så du kan genbruge job på tværs af miljøer.
Under processen skal du:
- Tilføj en arbejdsproces, der kan genbruges, for lintjobbet.
- Tilføj en arbejdsproces, der kan genbruges, og som definerer de job, der kræves for at udrulle til et hvilket som helst miljø.
- Opdater arbejdsprocessen for at bruge de kaldte arbejdsprocesser.
- Kør din arbejdsproces, og få vist resultaterne.
Tilføj en arbejdsproces, der kan genbruges, for lintjobbet
Lint-jobbet udføres kun én gang under kørslen af arbejdsprocessen, uanset hvor mange miljøer arbejdsprocessen udruller til. Så du behøver ikke at bruge en kaldet arbejdsproces til lintjobbet. Men hvis du vil gøre din primære arbejdsprocesdefinitionsfil enkel og nem at læse, beslutter du dig for at definere lintjobbet i en separat arbejdsprocesfil.
I Visual Studio Code skal du oprette en ny fil i mappen .github/arbejdsprocesser mappe med navnet lint.yml.
Indsæt følgende arbejdsprocesdefinition i filen:
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
Lintjobbet er det samme som det lintjob, der allerede findes i arbejdsprocessen, men nu er det i en separat arbejdsprocesfil.
Gem ændringerne, og luk filen.
Tilføj en arbejdsproces, der kan genbruges, til installation
Opret en arbejdsproces, der kan genbruges, og som definerer alle de job, der kræves for at udrulle hvert af dine miljøer. Du skal bruge input og hemmeligheder til at angive de indstillinger, der kan variere mellem miljøer.
Opret en ny fil i mappen .github/arbejdsprocesser mappe med navnet deploy.yml.
Denne fil repræsenterer alle de installationsaktiviteter, der kører for hvert af dine miljøer.
Indsæt følgende arbejdsprocesnavn, udløser, input og hemmeligheder i filen:
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
Seddel
Når du begynder at arbejde med din YAML-fil i Visual Studio Code, kan du se nogle røde bølgestreger, der fortæller dig, at der er et problem. Det skyldes, at Visual Studio Code-filtypenavnet for YAML-filer nogle gange gætter filens skema forkert.
Du kan ignorere de problemer, som udvidelsen rapporterer. Eller hvis du foretrækker det, kan du tilføje følgende kode øverst i filen for at undertrykke udvidelsens gæt:
# yaml-language-server: $schema=./deploy.yml
Under hemmelighederne skal du indsætte definitionen af valideringsjobbet:
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
Bemærk, at der anvendes en betingelse på jobbene. Forhåndskontrollen kører kun for ikke-produktionsmiljøer. What if-handlingen kører kun for produktionsmiljøet. I det forrige modul i læringsforløbet brugte du separate job til disse handlinger, men her kombinerer du dem for at forenkle arbejdsprocessen.
Drikkepenge
YAML-filer er følsomme for indrykning. Uanset om du skriver eller indsætter denne kode, skal du sørge for, at indrykningen er korrekt. Senere i denne øvelse får du vist den komplette YAML-arbejdsprocesdefinition, så du kan kontrollere, at filen stemmer overens.
Indsæt definitionen af installationsjobbet under valideringsjobbet:
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 }}
Under udrulningsjobbet skal du indsætte definitionen af røgtestjobbet:
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
Kontrollér, at din deploy.yml-fil nu ser ud som i følgende eksempel:
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
Gem ændringerne i filen.
Opdater arbejdsprocesdefinitionen for at bruge skabelonerne
Åbn workflow.yml-filen i mappen .github/arbejdsprocesser.
Fjern indholdet af afsnittet
env:
, herunder de to miljøvariabler. Du skal snart erstatte disse med miljøspecifikke variabler.Fjern indholdet af
lint:
jobdefinitionen, og erstat den med følgende kode for at bruge den lint.yml fil, du oprettede tidligere:# Lint the Bicep file. lint: uses: ./.github/workflows/lint.yml
Slet alt i filen under det lintjob, du har opdateret.
Nederst i filen skal du tilføje følgende kode for at installere den i testmiljøet:
# 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 }}
Under den kode, du lige har tilføjet, skal du tilføje følgende kode for at udrulle den i produktionsmiljøet:
# 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 }}
Den opdaterede arbejdsproces kører lintjobbet én gang. Derefter bruges deploy.yml kaldet arbejdsproces to gange: én gang pr. miljø. Dette holder definitionen af arbejdsprocessen klar og let at forstå. Kommentarerne i YAML-filen identificerer hvert jobs destinationsmiljø.
Kontrollér, at din workflow.yml-fil ser ud som i følgende eksempel:
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 }}
Gem dine ændringer.
Bekræft og send dine ændringer til Git-lageret ved at køre følgende kommandoer i Visual Studio Code-terminalen:
git add . git commit -m "Add reusable workflows" git push
Da det er første gang, du pusher til lageret, bliver du muligvis bedt om at logge på.
Skriv 1 i Windows for at godkende vha. en webbrowser, og vælg Angiv.
På macOS skal du vælge Godkend.
Der vises et browservindue. Du skal muligvis logge på GitHub igen. Vælg Godkend.
Få vist kørslen af arbejdsprocessen
Gå til Handlingeri browseren.
Den første kørsel af arbejdsprocessen, der er mærket Initial commit, vises som en fejl. GitHub kørte automatisk arbejdsprocessen, da du oprettede lageret. Det mislykkedes, fordi hemmelighederne ikke var klar på det tidspunkt. Du kan ignorere denne fejl.
Vælg installér-toy-website-environments arbejdsproces.
Vælg den seneste kørsel af arbejdsprocessen.
Bemærk, at arbejdsprocessen nu viser alle de job, du har defineret i YAML-filerne.
Nogle advarsler vises i panelet Anmærkninger. Alle disse advarsler skyldes den måde, Bicep skriver oplysningsmeddelelser på i arbejdsprocesloggen. Du kan ignorere disse advarsler.
Vent på, at arbejdsprocessen afbrydes midlertidigt, før udruller/udruller job. Det kan tage et par minutter, før arbejdsprocessen når dette punkt.
Godkend udrulningen i produktionsmiljøet ved at vælge knappen Gennemse udrulninger.
Vælg miljøet Produktion, og vælg derefter knappen Godkend og udrul.
Vent, indtil arbejdsprocessen er færdig med at køre. Arbejdsprocessen er fuldført.
Vælg Kode.
Vælg udrulningen af Production.
Bemærk, at du på installationsskærmen får vist en oversigt over produktionsmiljøets installationshistorik.
Vælg bekræftelses-id'et.
Bemærk, at GitHub viser dig listen over bekræftelser, der er inkluderet i installationen. Dette hjælper dig med at se ændringerne i dit miljø over tid.
I din browser skal du gå til Azure Portal.
Gå til ressourcegruppen ToyWebsiteProduction.
Åbn Azure App Service-appen på listen over ressourcer.
Bemærk, at typen af App Service-abonnement er S1.
Gå til App Service-appen i ressourcegruppen ToyWebsiteTest.
Bemærk, at typen af App Service-abonnement er F1. De to miljøer bruger forskellige indstillinger, som du har defineret i din Bicep-fil.