Övning – Distribuera ARM-mallar som en del av CI/CD-arbetet med GitHub Actions
Här distribuerar du en ARM-mall (Azure Resource Manager) från ett GitHub Actions-arbetsflöde.
Viktigt!
Du utför den här övningen utanför Microsoft Learn-miljön. Du behöver en egen Azure-prenumeration för att utföra den här övningen, och avgifter kan tillkomma. Detta krävs eftersom du måste skapa ett tjänsthuvudnamn, som inte stöds i sandbox-prenumerationen. Om du inte redan har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Skapa ditt GitHub-konto och din lagringsplats
Om du inte har något GitHub-konto skapar du ett nu på sidan för att skapa GitHub-kontot. (Det är gratis.)
När du har ett konto loggar du in och skapar en ny lagringsplats där du kan behålla dina mallar som en del av IaC-modellen (infrastruktur som kod). Följ dessa steg för att skapa lagringsplatsen (kallas ofta för en lagringsplats i branschen):
I det övre högra hörnet på en sida på GitHub-webbplatsen använder du listrutan + och väljer New repository (Ny lagringsplats). Eller så kan du välja den gröna knappen Create repository (Skapa lagringsplats), om den finns på sidan.
Ge lagringsplatsen ett kort namn som är lätt att komma ihåg. Använd till exempel Distribuera-ARM-mall. Om du vill kan du lägga till en beskrivning av lagringsplatsen. Använt till exempel Distribuerar min första ARM-mall med GitHub Actions.
Välj en synlighetsinställning för lagringsplatsen. Offentliga lagringsplatser är tillgängliga för alla på Internet. Privata lagringsplatser är bara tillgängliga för dig och för de personer som du uttryckligen delar åtkomst med. (Antingen fungerar med den här övningen.)
Under Initiera den här lagringsplatsen med: väljer du Lägg till en README-fil.
Välj Create repository (Skapa lagringsplats).
Du skapade lagringsplatsen och initierade den med en README-fil. Det är det dags att checka in en mall och en mallparameterfil på lagringsplatsen.
Kommentar
Viktigt-filer är en bra plats för att beskriva projektet i detalj, eller lägga till dokumentation, till exempel hur man installerar eller använder ditt projekt. Innehållet i filen Viktigt visas automatiskt på den första sidan på din lagringsplats.
Checka in en ARM-mallfil på lagringsplatsen
Gå till huvudsidan för lagringsplatsen på GitHub.
I listrutan Add file (Lägg till fil) ovanför listan med filer väljer du Create new file (Skapa ny fil).
I fältet för filnamn anger du mallens namn och tillägg. I den här övningen använder du namnet azuredeploy.json. Kopiera och klistra in följande mall i din nya GitHub-fil.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "VnetName": { "type": "string", "defaultValue": "VNet-001", "metadata": { "description": "Virtual Network Name" } }, "CostCenterIO": { "type": "string", "defaultValue": "12345", "metadata": { "description": "Cost Center IO number for cross billing" } }, "OwnerName": { "type": "string", "defaultValue": "John Smith", "metadata": { "description": "Name of the stakeholder responsible for this resource" } } }, "variables": {}, "resources": [ { "apiVersion": "2018-10-01", "type": "Microsoft.Network/virtualNetworks", "name": "[parameters('VnetName')]", "location": "[resourceGroup().location]", "tags": { "CostCenter": "[parameters('CostCenterIO')]", "Owner": "[parameters('OwnerName')]" }, "properties": { "addressSpace": { "addressPrefixes": [ "10.0.0.0/16" ] }, "enableVmProtection": false, "enableDdosProtection": false, "subnets": [ { "name": "subnet001", "properties": { "addressPrefix": "10.0.0.0/24" } }, { "name": "subnet002", "properties": { "addressPrefix": "10.0.1.0/24" } } ] } } ] }
Lägg till en beskrivning i avsnittet Commit new file (Checka in ny fil) och välj Commit new file (Checka in ny fil) för att spara den på lagringsplatsen.
Konfigurera autentisering mellan GitHub Actions och din Azure-prenumeration
För att kunna distribuera resurser till Azure med hjälp av GitHub Actions måste du skapa ett Azure-tjänsthuvudnamn och ge det behörighet att skapa de resurser som definieras i dina mallar. Du utför det steget i avsnittet Azure Cloud Shell i Azure-portalen när du har loggat in på din prenumeration.
Skapa huvudnamn för tjänsten
Huvudnamnet för ett GitHub Actions-arbetsflöde behöver rätt inbyggda deltagare för att kunna distribuera Azure-resurser.
Följande Azure CLI-skript visar hur du kan generera ett Azure-tjänsthuvudnamn med deltagarbehörighet i en Azure-resursgrupp. Den här resursgruppen är den plats där arbetsflödet distribuerar de resurser som definierats i ARM-mallen.
projectName="GitHubActionExercise"
location="eastus"
resourceGroupName="${projectName}-rg"
appName="http://${projectName}"
# Create the resource group
az group create --name $resourceGroupName --location $location
# Store the resource group ID in a variable
scope=$(az group list --query "[?contains(name, '$resourceGroupName')].id" -o tsv)
# Create the service principal with contributor rights to the resource group we just created
az ad sp create-for-rbac --name $appName --role Contributor --scopes $scope --sdk-auth
Se till att du är inloggad i din prenumeration och välj Cloud Shell-ikonen i portalen för att öppna gränssnittet längst ned på sidan.
I gränssnittet använder du föregående kod för att skapa tjänsthuvudnamnet. Du får följande resultat. Kopiera JSON-delen av resultaten (innehållet i den röda rutan i följande skärmbild) eftersom du behöver det när du konfigurerar hemligheten i GitHub.
Kopiera JSON-utdata och lagra den som en GitHub-hemlighet på din GitHub-lagringsplats genom att utföra följande steg i GitHub: Välj fliken Inställningar från GitHub-lagringsplatsen. Välj listrutan Hemligheter i den vänstra menyn och välj sedan Codespaces.
Ange följande värden och välj sedan Add secret (Lägg till hemlighet):
- Namn: Ange AZURE_CREDENTIALS.
- Hemlighet: Klistra in JSON-utdata som du kopierade tidigare.
Du behöver den här informationen för att ange autentiseringen i arbetsflödet.
Skapa ett arbetsflöde
Arbetsflödesfilen måste lagras i mappen .github/workflows i roten för din lagringsplats. Arbetsflödesfilens tillägg kan vara antingen .yml eller .yaml.
Du kan skapa en arbetsflödesfil och sedan push-överföra/ladda upp filen till lagringsplatsen. Du kan också använda följande procedur för att skapa den i GitHub-gränssnittet:
Välj Actions (Åtgärder) på den översta menyn på din GitHub-lagringsplats. Välj sedan Set up a workflow yourself (Konfigurera ett eget arbetsflöde).
Byt namn på arbetsflödesfilen om du föredrar ett annat namn än main.yml. Använd till exempel deployARMTemplate.yml.
Ersätt innehållet i .yml-filen med följande kod.
Kommentar
På GitHub Marketplace finns några färdiga åtgärder som du kan använda för att distribuera ARM-mallar. I den här modulen används marketplace-providern Deploy Azure Resource Manager (ARM).
name: Deploy ARM Template on: push: branches: - main env: AZURE_SUBSCRIPTION_ID: << Subscription Id >> # set this to your Azure Subscription Id AZURE_RESOURCE_GROUP: GitHubActionExercise-rg # set this to your target resource group jobs: deploy-virtual-network-template: runs-on: ubuntu-latest steps: - name: Checkout source code uses: actions/checkout@main - name: Login to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Deploy ARM Template uses: azure/arm-deploy@v1 with: scope: resourcegroup subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }} resourceGroupName: ${{ env.AZURE_RESOURCE_GROUP }} template: ./azuredeploy.json
Arbetsflödesfilen har tre avsnitt.
name
: Namnet på arbetsflödet.on
: Namnet på GitHub-händelsen som utlöser arbetsflödet. Arbetsflödet utlöses när en push-händelse finns på huvudgrenen och ändrar minst en fil på huvudgrenen.jobs
: En arbetsflödeskörning består av ett eller flera jobb. Det finns bara ett jobb med namnetdeploy-virtual-network-template
. Det här jobbet har tre steg.- Checka ut källkod.
- Logga in på Azure.
- Distribuera ARM-mallen.
Viktigt!
Kontrollera att det hemliga namnet i uttrycket
creds: ${{ secrets.AZURE_CREDENTIALS }}
matchar namnet för hemligheten som du har sparat i inställningarna för din lagringsplats. Kontrollera också att namnet på ARM-mallen iDeploy ARM Template
-stegettemplate: $GITHUB_WORKSPACE/azuredeploy.json
matchar namnet som du sparade tidigare på lagringsplatsen.Kommentar
Resursgruppsnamnet ska vara
GitHubActionExercise-rg
om du använde föregående Azure CLI-kod när du konfigurerade autentiseringsuppgifter för distributionen. Resursgruppsnamnet som genereras är projektnamnet medrg
tillagt i slutet.Välj Start commit (Starta incheckning). Lägg till en kommentar och beskrivning om det behövs.
Kontrollera att Checka in direkt till huvudgrenen är markerat och välj sedan Checka in ny fil (eller Genomför ändringar).
När arbetsflödesfilen har skapats och checkats in på huvudgrenen på lagringsplatsen startar arbetsflödet automatiskt eftersom utlösaren i arbetsflödet är en incheckning/push-överföring till huvudgrenen.
on: push: branches: - main
Gå till lagringsplatsen och kontrollera arbetsflödets status.
Kontrollera distributionen
När arbetsflödet har slutförts går du till Azure-portalen och kontrollerar distributionens status.
I det vänstra fönstret väljer du Resursgrupper>GitHubActionExercise-rg. Kontrollera att distributionen har lyckats i fönstret Distributioner.