Övning – Skapa tillfälliga miljöer för pull-begäranden

Slutförd

Vissa teammedlemmar har sagt att de uppskattar att få automatiserad Bicep linter feedback om sina kodändringar innan de skickar dem till andra teammedlemmar att granska. Nu har du bestämt dig för att ge dina deltagare och granskare möjlighet att distribuera och granska deras kod i en tillfällig miljö.

I den här övningen uppdaterar du arbetsflödet för pull-begäranden för att distribuera en tillfällig miljö när en pull-begäran öppnas och distribuerar om den när koden skickas till pull-begärandegrenen. Du skapar också ett annat arbetsflöde för att automatiskt ta bort miljön när pull-begäran stängs. Du testar ändringarna genom att skapa en pull-begäran om att webbplatsen ska använda en Docker-containeravbildning.

Under processen gör du följande:

  • Uppdatera arbetsflödet för pull-begäran för att distribuera en tillfällig miljö.
  • Skapa ett arbetsflöde för borttagning av pull-begäranden för att ta bort den tillfälliga miljön.
  • Skapa en pull-begäran och se hur den tillfälliga miljön skapas.
  • Godkänn pull-begäran och se hur den tillfälliga miljön tas bort.

Uppdatera arbetsflödet för pull-begäran för att distribuera en tillfällig miljö

Börja med att uppdatera ditt pr-valideringsarbetsflöde för att skapa en tillfällig miljö.

  1. I Visual Studio Code-terminalen checkar du ut huvudgrenen för lagringsplatsen.

    git checkout main
    
  2. Hämta den senaste versionen av koden från GitHub, som innehåller de ändringar som du sammanfogade i en tidigare övning.

    git pull
    
  3. Öppna filen .github/workflows/pr-validation.yml i Visual Studio Code.

  4. Lägg till en name inställning längst upp i filen under concurrency inställningen:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    

    Den här inställningen förhindrar att flera arbetsflöden för samma pull-begäran körs samtidigt, vilket kan orsaka oförutsägbara resultat när du distribuerar resurser till Azure.

  5. Längst upp i filen, under avsnittet on som definierar utlösaren, definierar du permissions avsnittet:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    
    on: pull_request
    
    permissions:
      id-token: write
      contents: read
    
  6. Under avsnittet permissions lägger du till två nya miljövariabler:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    
    on: pull_request
    
    permissions:
      id-token: write
      contents: read
    
    env:
      resourceGroupName: pr_${{ github.event.number }}
      resourceGroupLocation: westus3
    

    Miljövariabeln resourceGroupName anger namnet på den resursgrupp som ska användas för varje tillfällig miljö. Varje resursgrupp får namnet pr_123, där 123 är det unika pull-begärandenumret.

    Miljövariabeln resourceGroupLocation anger att dina tillfälliga miljöer ska distribueras till Azure-regionen USA, västra 3.

  7. Definiera ett nytt jobb med namnet deploy, under lint jobbet:

    jobs:
      lint:
        uses: ./.github/workflows/lint.yml
    
      deploy:
        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 }}
    

    Jobbet checkar först ut all kod på GitHub-löparen och loggar sedan in på din Azure-miljö.

    Dricks

    YAML-filer är känsliga för indrag. Oavsett om du skriver eller klistrar in den här koden kontrollerar du att indraget är korrekt. Senare i den här övningen visas den fullständiga YAML-arbetsflödesdefinitionen så att du kan kontrollera att filen matchar.

  8. Lägg till ett steg för att skapa resursgruppen med det namn som definierats i miljövariabeln:

    - uses: Azure/cli@v1
      name: Create resource group
      with:
        inlineScript: |
          az group create \
            --name ${{ env.resourceGroupName }} \
            --location ${{ env.resourceGroupLocation }}
    
  9. När resursgruppen har skapats lägger du till ett steg för att distribuera Bicep-filen till resursgruppen:

    - uses: azure/arm-deploy@v1
      id: deploy
      name: Deploy Bicep file
      with:
        failOnStdErr: false
        deploymentName: ${{ github.run_number }}
        resourceGroupName: ${{ env.resourceGroupName }}
        template: ./deploy/main.bicep
        parameters: >
          environmentType=Test
    
  10. Efter distributionssteget lägger du till ett steg för att visa den tillfälliga miljöns webbplatsadress i arbetsflödesloggen:

    - name: Show website hostname
      run: |
        echo "Access the website at this address: https://${{ steps.deploy.outputs.appServiceAppHostName }}"
    
  11. Spara dina ändringar.

  12. Kontrollera att filen pr-validation.yml ser ut så här:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    
    on: pull_request
    
    permissions:
      id-token: write
      contents: read
    
    env:
      resourceGroupName: pr_${{ github.event.number }}
      resourceGroupLocation: westus3
    
    jobs:
      lint:
        uses: ./.github/workflows/lint.yml
    
      deploy:
        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 }}
          - uses: Azure/cli@v1
            name: Create resource group
            with:
              inlineScript: |
                az group create \
                  --name ${{ env.resourceGroupName }} \
                  --location ${{ env.resourceGroupLocation }}
          - uses: azure/arm-deploy@v1
            id: deploy
            name: Deploy Bicep file
            with:
              failOnStdErr: false
              deploymentName: ${{ github.run_number }}
              resourceGroupName: ${{ env.resourceGroupName }}
              template: ./deploy/main.bicep
              parameters: >
                environmentType=Test
          - name: Show website hostname
            run: |
              echo "Access the website at this address: https://${{ steps.deploy.outputs.appServiceAppHostName }}"
    

    Om den inte gör det uppdaterar du den så att den matchar det här exemplet och sparar det sedan.

  13. I Visual Studio Code-terminalen checkar du in ändringarna. Du kommer inte att skicka dem till fjärrlagringsplatsen än.

    git add .
    git commit -m "Update pull request validation workflow to deploy an ephemeral environment"
    

Lägga till ett arbetsflöde för borttagning av pull-begäran

Du har skapat ett arbetsflöde som automatiskt distribuerar ändringarna i varje pull-begäran till en tillfällig resursgrupp. Nu ska du konfigurera ett andra arbetsflöde för att ta bort de tillfälliga miljöerna när de inte längre behövs.

  1. Skapa en ny fil med namnet pr-closed.yml i mappen .github/workflows .

    Skärmbild av Visual Studio Code som visar P R-filen med sluten punkt Y M L i mappen arbetsflöden.

  2. Överst i filen namnger du arbetsflödet, konfigurerar samma samtidighetsnyckel som du använde i valideringsarbetsflödet för pull-begäran, konfigurerar arbetsflödet så att det körs när en pull-begäran stängs och låter arbetsflödet hämta en åtkomsttoken:

    name: pr-closed
    concurrency: ${{ github.event.number }}
    
    on:
      pull_request:
        types: [closed]
    
    permissions:
      id-token: write
      contents: read
    
  3. Under den kod som du nyss angav definierar du en miljövariabel för namnet på resursgruppen som är associerad med pull-begärans tillfälliga miljö:

    env:
      resourceGroupName: pr_${{ github.event.number }}
    

    Resursgruppens namn är samma som det som du använde för valideringsarbetsflödet för pull-begäran.

  4. Under koden du lade till definierar du ett nytt jobb med namnet removeoch konfigurerar det för att logga in på Azure:

    jobs:
      remove:
        runs-on: ubuntu-latest
        steps:
          - 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 }}
    
  5. remove I jobbet definierar du ett steg för att ta bort resursgruppen med hjälp av Azure CLI och bekräftar borttagningen med hjälp --yes av argumentet:

    - uses: Azure/cli@v1
      name: Delete resource group
      with:
        inlineScript: |
          az group delete \
            --name ${{ env.resourceGroupName }} \
            --yes
    
  6. Spara dina ändringar.

  7. Kontrollera att filen pr-closed.yml ser ut så här:

    name: pr-closed
    concurrency: ${{ github.event.number }}
    
    on:
      pull_request:
        types: [closed]
    
    permissions:
      id-token: write
      contents: read
    
    env:
      resourceGroupName: pr_${{ github.event.number }}
    
    jobs:
      remove:
        runs-on: ubuntu-latest
        steps:
          - 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/cli@v1
            name: Delete resource group
            with:
              inlineScript: |
                az group delete \
                  --name ${{ env.resourceGroupName }} \
                  --yes
    

    Om den inte gör det uppdaterar du den så att den matchar det här exemplet och sparar det sedan.

  8. I Visual Studio Code-terminalen checkar du in ändringarna och push-överför dem till fjärrlagringsplatsen:

    git add .
    git commit -m 'Add pull request closed workflow'
    git push
    

Uppdatera Bicep-filen

Uppdatera sedan Bicep-filen så att den använder en Docker-containeravbildning för webbplatsens program.

  1. I Visual Studio Code-terminalen skapar du en ny gren för dina ändringar genom att köra följande kommando:

    git checkout -b feature/container-app
    
  2. Öppna filen main.bicep i distributionsmappen.

  3. Uppdatera värdet för variabeln appServiceAppLinuxFrameworkVersion :

    var appServiceAppLinuxFrameworkVersion = 'DOCKER|dockersamples/static-site:latest'
    
  4. Spara dina ändringar.

  5. Checka in och skicka ändringarna till Git-lagringsplatsen genom att köra följande kommandon i Visual Studio Code-terminalen:

    git add .
    git commit -m "Use container image for website"
    git push origin feature/container-app
    

Skapa en pull-begäran

Du har definierat arbetsflöden för att skapa och hantera tillfälliga miljöer automatiskt i pull-begäranden. Nu ska du skapa en annan pull-begäran för dina Bicep-ändringar.

  1. Välj Kod i webbläsaren och välj sedan 3 grenar.

    Skärmbild av GitHub som visar lagringsplatsens grenlista.

  2. Under Dina grenar, bredvid funktionen/containerappen, väljer du Ny pull-begäran.

    Skärmbild av GitHub som visar länken för att skapa en pull-begäran för containerappgrenen för funktionssnedstreck.

  3. Välj Skapa pull-begäran.

Se hur den tillfälliga miljön skapas

  1. På sidan med information om pull-begäran väntar du tills statuskontrollobjekten visas.

  2. I listan bredvid distributionsjobbet väljer du Information.

    Skärmbild av GitHub-pull-begäran som visar statuskontrollobjekten. Länken

    Vänta tills distributionen är klar.

  3. Välj Visa webbplatsens värdnamn.

  4. Välj URL:en i loggen.

    Skärmbild av GitHub Actions-distributionsloggen. Webbplats-URL:en i steget Visa webbplatsvärdnamn är markerad.

    Webbplatsen läser in och visar ett Hello Docker! -meddelande som anger att webbplatsen körs från containeravbildningen som definieras i pull-begäran.

    Skärmbild av webbplatsens startsida när distributionen är klar.

  5. Du kan också öppna Azure Portal och gå till den tillfälliga miljöns resursgrupp.

    Granska de resurser som har distribuerats: lagringskonto, App Service och App Service-plan.

Sammanfoga pull-begäran

Nu när du har testat pull-begäran kan du sammanfoga den till huvudgrenen.

  1. Välj Pull-begäranden och välj Använd containeravbildning för begäran om webbplatshämtning .

    Skärmbild av GitHub som visar listan över öppna pull-begäranden på lagringsplatsen.

    Statuskontrollerna har passerat.

    Skärmbild av GitHub-pull-begäran som visar att de två statuskontrollerna har godkänts.

  2. Välj Koppla pull-begäran.

  3. Välj Bekräfta sammanslagning.

Granska borttagningen av resursgruppen

  1. I webbläsaren väljer du Åtgärder och väljer sedan det pr-stängda arbetsflödet i den vänstra rutan.

    Du kan se att arbetsflödet har anropats automatiskt eftersom en pull-begäran stängdes.

    Skärmbild av fönstret GitHub Actions som visar att det P R-stängda arbetsflödet körs.

  2. Välj arbetsflödet för att granska loggen.

    Det kan ta några minuter för arbetsflödet att slutföra borttagningen av resursgruppen i Azure.

    Viktigt!

    Du behöver inte vänta tills arbetsflödeskörningen har slutförts. Men se till att öppna Azure Portal senare, både för att verifiera att den tillfälliga miljöns resursgrupp har tagits bort och för att undvika kostnader för Azure-resurserna.

Rensa resurser

När du är klar med modulen kan du ta bort de resurser som du skapade:

  • GitHub-hemligheter

    1. Från GitHub-lagringsplatsen går du till >>Åtgärder.
    2. Välj knappen Ta bort för varje lagringsplatshemlighet och följ anvisningarna.
  • GitHub-lagringsplats

    1. Gå till Allmänna inställningar>
    2. Rulla längst ned på skärmen, välj Ta bort den här lagringsplatsen och följ anvisningarna.
  • Azure App Registrations federerade autentiseringsuppgifter och tjänstens huvudnamn.

    1. På portalens startsida söker du efter Microsoft Entra-ID och väljer det i listan över tjänster.
    2. Gå till Hantera> Appregistreringar.
    3. I Ägda program väljer du toy-website-auto-review.
    4. Välj Ta bort och följ anvisningarna.
    5. Välj Borttagna program för att ta bort appregistreringen permanent.

    Viktigt!

    Det går att ha duplicerade namn på appregistrering och tjänstens huvudnamn. Vi rekommenderar att du verifierar program-ID:t för att se till att du tar bort rätt resurs.