Övning – Skapa tillfälliga miljöer för pull-begäranden
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ö.
I Visual Studio Code-terminalen checkar du ut huvudgrenen för lagringsplatsen.
git checkout main
Hämta den senaste versionen av koden från GitHub, som innehåller de ändringar som du sammanfogade i en tidigare övning.
git pull
Öppna filen .github/workflows/pr-validation.yml i Visual Studio Code.
Lägg till en
name
inställning längst upp i filen underconcurrency
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.
Längst upp i filen, under avsnittet
on
som definierar utlösaren, definierar dupermissions
avsnittet:name: pr-validation concurrency: ${{ github.event.number }} on: pull_request permissions: id-token: write contents: read
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 namnetpr_123
, där123
ä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.Definiera ett nytt jobb med namnet
deploy
, underlint
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.
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 }}
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
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 }}"
Spara dina ändringar.
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.
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.
Skapa en ny fil med namnet pr-closed.yml i mappen .github/workflows .
Ö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
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.
Under koden du lade till definierar du ett nytt jobb med namnet
remove
och 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 }}
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
Spara dina ändringar.
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.
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.
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
Öppna filen main.bicep i distributionsmappen.
Uppdatera värdet för variabeln
appServiceAppLinuxFrameworkVersion
:var appServiceAppLinuxFrameworkVersion = 'DOCKER|dockersamples/static-site:latest'
Spara dina ändringar.
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.
Välj Kod i webbläsaren och välj sedan 3 grenar.
Under Dina grenar, bredvid funktionen/containerappen, väljer du Ny pull-begäran.
Välj Skapa pull-begäran.
Se hur den tillfälliga miljön skapas
På sidan med information om pull-begäran väntar du tills statuskontrollobjekten visas.
I listan bredvid distributionsjobbet väljer du Information.
Vänta tills distributionen är klar.
Välj Visa webbplatsens värdnamn.
Välj URL:en i loggen.
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.
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.
Välj Pull-begäranden och välj Använd containeravbildning för begäran om webbplatshämtning .
Statuskontrollerna har passerat.
Välj Koppla pull-begäran.
Välj Bekräfta sammanslagning.
Granska borttagningen av resursgruppen
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.
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
- Från GitHub-lagringsplatsen går du till >>Åtgärder.
- Välj knappen Ta bort för varje lagringsplatshemlighet och följ anvisningarna.
GitHub-lagringsplats
- Gå till Allmänna inställningar>
- 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.
- På portalens startsida söker du efter Microsoft Entra-ID och väljer det i listan över tjänster.
- Gå till Hantera> Appregistreringar.
- I Ägda program väljer du toy-website-auto-review.
- Välj Ta bort och följ anvisningarna.
- 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.