Övning – Distribuera ARM-mallar som en del av CI/CD-arbetet med GitHub Actions

Slutförd

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.)

Skärmbild som visar sidan för att skapa ett GitHub-konto.

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):

  1. 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.

    Skärmbild som visar val för att skapa en GitHub-lagringsplats.

  2. 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.

  3. 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.)

  4. Under Initiera den här lagringsplatsen med: väljer du Lägg till en README-fil.

  5. Välj Create repository (Skapa lagringsplats).

    Skärmbild som visar skapandet av information för en ny 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

  1. Gå till huvudsidan för lagringsplatsen på GitHub.

  2. I listrutan Add file (Lägg till fil) ovanför listan med filer väljer du Create new file (Skapa ny fil).

    Skärmbild som visar val för att lägga till en mall på lagringsplatsen.

  3. 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"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  4. 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.

    Skärmbild som visar hur du sparar en ny mall 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.

Animering som visar hur Cloud Shell öppnas.

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.

Skärmbild som visar resultatet av att skapa ett tjänsthuvudnamn i Azure.

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.

Skärmbild som visar hur du lägger till ny hemlig information om tjänstens huvudnamn i en GitHub-hemlighet.

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:

  1. 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).

    Skärmbild som visar val för att konfigurera ett arbetsflöde.

  2. Byt namn på arbetsflödesfilen om du föredrar ett annat namn än main.yml. Använd till exempel deployARMTemplate.yml.

  3. Ersätt innehållet i .yml-filen med följande kod.

    Kommentar

    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 namnet deploy-virtual-network-template. Det här jobbet har tre steg.

      1. Checka ut källkod.
      2. Logga in på Azure.
      3. 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 i Deploy ARM Template-steget template: $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 med rg tillagt i slutet.

  4. Välj Start commit (Starta incheckning). Lägg till en kommentar och beskrivning om det behövs.

  5. Kontrollera att Checka in direkt till huvudgrenen är markerat och välj sedan Checka in ny fil (eller Genomför ändringar).

    Skärmbild som visar hur du checkar in ett arbetsflöde till huvudgrenen.

    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
    
  6. Gå till lagringsplatsen och kontrollera arbetsflödets status.

    Skärmbild som visar 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.

Skärmbild som visar distributionens status.