Övning – Lägga till en Bicep-distributionsåtgärd i arbetsflödet
Du har skapat ett grundläggande arbetsflöde och du har konfigurerat dina Azure- och GitHub-miljöer för att ansluta. Nu är du redo att distribuera webbplatsens Bicep-fil till Azure från arbetsflödet.
I den här övningen kommer du att:
- Lägg till en Bicep-fil på lagringsplatsen.
- Lägg till ett arbetsflödessteg för att ladda ned lagringsplatsens källkod till löparens filsystem.
- Lägg till ett arbetsflödessteg för att logga in på Azure.
- Lägg till ett arbetsflödessteg för att distribuera Bicep-filen.
- Kör arbetsflödet igen och kontrollera att det har distribuerat webbplatsen.
Lägg till webbplatsens Bicep-fil till GitHub-lagringsplatsen
Du har redan förberett webbplatsens Bicep-fil, som du kan använda för att distribuera olika konfigurationer av webbplatsresurserna beroende på miljö och konfiguration. Här lägger du till din Bicep-fil på lagringsplatsen.
Öppna Visual Studio Code Explorer.
Skapa en distributionsmapp i roten på lagringsplatsen.
Skapa en ny fil med namnet main.bicep i distributionsmappen. Se till att du skapar filen i distributionsmappen:
Kopiera följande kod till filen main.bicep :
@description('The Azure region into which the resources should be deployed.') param location string = resourceGroup().location @description('The type of environment. This must be nonprod or prod.') @allowed([ 'nonprod' 'prod' ]) param environmentType string @description('A unique suffix to add to resource names that need to be globally unique.') @maxLength(13) param resourceNameSuffix string = uniqueString(resourceGroup().id) var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website-plan' var toyManualsStorageAccountName = 'toyweb${resourceNameSuffix}' // Define the SKUs for each component based on the environment type. var environmentConfigurationMap = { nonprod: { appServicePlan: { sku: { name: 'F1' capacity: 1 } } toyManualsStorageAccount: { sku: { name: 'Standard_LRS' } } } prod: { appServicePlan: { sku: { name: 'S1' capacity: 2 } } toyManualsStorageAccount: { sku: { name: 'Standard_ZRS' } } } } var toyManualsStorageAccountConnectionString = 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}' resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: environmentConfigurationMap[environmentType].appServicePlan.sku } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'ToyManualsStorageAccountConnectionString' value: toyManualsStorageAccountConnectionString } ] } } } resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: toyManualsStorageAccountName location: location kind: 'StorageV2' sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku }
Spara ändringarna i filen.
I Visual Studio Code-terminalen kör du den här koden för att mellanlagra ändringarna, checka in ändringarna och skicka ändringarna till lagringsplatsen:
git add deploy/main.bicep git commit -m 'Add Bicep file' git push
Ersätt arbetsflödesstegen
Uppdatera sedan arbetsflödesdefinitionen för att distribuera Bicep-filen till Azure.
Öppna filen .github/workflows/workflow.yml i Visual Studio Code.
Lägg till ett
permissions:
avsnitt överst i filen mellanon:
ochjobs:
.name: deploy-toy-website on: [workflow_dispatch] permissions: id-token: write contents: read jobs:
Med den här ändringen kan arbetsflödet använda en arbetsbelastningsidentitet.
Byt namn på
say-hello
jobbet tilldeploy
:jobs: deploy: runs-on: ubuntu-latest steps:
Ta bort
placeholder
steget från arbetsflödesdefinitionen genom att ta bort de två nedersta raderna i filen.Som ett första steg lägger du till en uppgift för att kolla in koden i löparens filsystem. Lägg till ett nytt steg längst ned i filen:
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3
Kommentar
Det är en bra idé att skriva den här koden själv i stället för att kopiera och klistra in den från den här modulen. Var uppmärksam på filens indrag. Om indraget inte är korrekt är YAML-filen inte giltig. Visual Studio Code anger fel genom att visa vågiga rader.
Under det steg som du nyss lade till lägger du till en uppgift för att logga in i Din Azure-miljö. Den här uppgiften använder hemligheterna som du definierade tidigare för att logga in med hjälp av en arbetsbelastningsidentitet:
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Under steget som du precis lade till lägger du till ytterligare ett steg för att utföra Bicep-distributionen:
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT }}
Observera att den här uppgiften använder
github.run_number
standardmiljövariabeln för att namnge distributionen i Azure. Den använder också miljövariabler för resursgruppens namn och för parameternenvironmentType
i Bicep-filen.Lägg till dessa variabler och deras värden överst i arbetsflödesfilen, mellan
permissions:
ochjobs
:name: deploy-toy-website on: [workflow_dispatch] permissions: id-token: write contents: read env: AZURE_RESOURCEGROUP_NAME: ToyWebsite ENVIRONMENT: nonprod jobs:
Spara ändringarna i filen. Filen bör se ut som i detta exempel:
name: deploy-toy-website on: [workflow_dispatch] permissions: id-token: write contents: read env: AZURE_RESOURCEGROUP_NAME: ToyWebsite ENVIRONMENT: nonprod jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT }}
I Visual Studio Code-terminalen mellanlagra du ändringarna, checkar in dem på lagringsplatsen och push-överför dem till Azure Repos:
git add . git commit -m 'Add Azure CLI tasks to workflow' git push
Kör arbetsflödet
Nu är du redo att köra arbetsflödet!
Öppna arbetsflödet i webbläsaren genom att välja Åtgärder>för distribution av leksakswebbplats.
Välj Kör arbetsflöde>Kör arbetsflöde.
En ny körning av arbetsflödet visas i körningslistan. Om den inte visas uppdaterar du webbläsarsidan.
Välj arbetsflödet som körs för att visa information om körningen.
Vänta tills körningen har slutförts.
Välj distributionsjobbet.
Välj Kör azure/arm-deploy@v1. Då visas uppgiftsinformationen.
Välj Kör azure/arm-deploy@v1 i uppgiftsinformationen.
Observera att det här steget använder de miljövariabler som du har lagt till i arbetsflödesfilen.
Granska resten av arbetsflödets utdata.
Arbetsflödet visar en lyckad distribution.
Verifiera distributionen
Gå till Azure-portalen.
Välj Resursgrupper på den vänstra menyn.
Välj ToyWebsite.
I Översikt visar du distributionsstatus. Du kan se att en distribution lyckades.
Välj länken 1 Lyckades för att se information om distributionen.
Observera att namnet på distributionen matchar arbetsflödets körningsnummer i GitHub Actions, eftersom du använde
github.run_number
miljövariabeln för att namnge distributionen.Om du vill se vilka resurser som har distribuerats väljer du distributionen. Om du vill expandera distributionen och se mer information väljer du Distributionsinformation. I det här fallet finns det ett lagringskonto, en Azure App Service-plan och en app.