Cvičení – nasazení šablon ARM v rámci CI/CD s použitím GitHub Actions

Dokončeno

Tady nasadíte šablonu Azure Resource Manageru (ARM) z pracovního postupu GitHub Actions.

Důležité

Toto cvičení se provádí mimo prostředí Microsoft Learn. Toto cvičení vyžaduje, abyste měli vlastní předplatné Azure, přičemž vám mohou být účtovány poplatky. Je to nutné, protože budete muset vytvořit instanční objekt, který není podporovaný v sandboxovém předplatném. Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet, než začnete.

Vytvoření účtu a úložiště GitHub

Nejprve, pokud nemáte účet GitHub, vytvořte si ho teď na stránce pro vytvoření účtu GitHub. (Je bezplatný.)

Snímek obrazovky znázorňující stránku pro vytvoření účtu GitHub

Jakmile budete mít účet, přihlaste se a vytvořte nové úložiště, ve kterém můžete šablony uchovávat jako součást modelu infrastruktury jako kódu (IaC). Pokud chcete vytvořit úložiště (běžně označované jako úložiště v oboru), postupujte takto:

  1. V pravém horním rohu libovolné stránky na webu GitHub použijte rozevírací nabídku + a vyberte New repository (Nové úložiště). Nebo vyberte zelené tlačítko Create repository (Vytvořit úložiště), pokud ho vidíte.

    Snímek obrazovky znázorňující výběry pro vytvoření úložiště GitHubu

  2. Zadejte krátký a zapamatovatelný název úložiště. Použijte například Deploy-ARM-Template. Volitelně můžete přidat popis úložiště. Použijte například Nasazení první šablony ARM pomocí GitHub Actions.

  3. Zvolte nastavení viditelnosti úložiště. Veřejná úložiště jsou přístupná všem na internetu. Privátní úložiště jsou přístupná jen vám a lidem, se kterými explicitně sdílíte přístup. (Buď pracuje s tímto cvičením.)

  4. V části Inicializace tohoto úložiště pomocí příkazu:, vyberte Přidat soubor README.

  5. Vyberte Create repository (Vytvořit úložiště).

    Snímek obrazovky znázorňující podrobnosti nového úložiště

Vytvořili jste úložiště a inicializovali jste ho pomocí souboru README. Teď do tohoto úložiště zapíšete šablonu a soubor parametrů šablony.

Poznámka:

Soubory README jsou vhodným místem, kde můžete podrobněji popsat svůj projekt nebo přidat dokumentaci, která se týká například instalace nebo použití vašeho projektu. Obsah souboru README se automaticky objeví na úvodní stránce vašeho úložiště.

Zápis souboru šablony ARM do úložiště

  1. V GitHubu přejděte na hlavní stránku úložiště.

  2. Nad seznamem souborů vyberte v rozevíracím seznamu Add file (Přidat soubor) možnost Create new file (Vytvořit nový soubor).

    Snímek obrazovky znázorňující výběry pro přidání šablony do úložiště

  3. Do pole s názvem souboru zadejte název a příponu šablony. Pro naše cvičení použijte název azuredeploy.json. Zkopírujte a vložte následující šablonu do nového souboru GitHubu.

    {
        "$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. V oddílu Commit new file (Zapsat nový soubor) přidejte popis a kliknutím na Commit new file uložte soubor do úložiště.

    Snímek obrazovky znázorňující uložení nové šablony do úložiště

Konfigurace ověřování mezi GitHub Actions a vaším předplatným Azure

Pokud chcete k nasazení prostředků do Azure použít GitHub Actions, potřebujete vytvořit instanční objekt Azure a udělit mu oprávnění k vytváření prostředků, které jsou definované v šablonách. Tento krok provedete v části Azure Cloud Shell na webu Azure Portal po přihlášení k předplatnému.

Vytvoření instančního objektu

Aby mohl instanční objekt pracovního postupu GitHub Actions nasazovat prostředky Azure, potřebuje správného integrovaného přispěvatele.

V následujícím skriptu Azure CLI je vidět, jak můžete ve skupině prostředků Azure vygenerovat instanční objekt Azure s oprávněními přispěvatele. V této skupině prostředků se nasazují prostředky definované v šabloně ARM.

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

Když jste přihlášeni ke svému předplatnému, vyberte na portálu ikonu Cloud Shell. V dolní části stránky se otevře příkazové prostředí.

Animace, která znázorňuje otevření Cloud Shellu

V tomto prostředí použijte předchozí kód k vytvoření instančního objektu. Zobrazí se následující výsledky. Zkopírujte část výsledků JSON (obsah v červeném rámečku na následujícím snímku obrazovky), protože ho potřebujete při konfiguraci tajného kódu na GitHubu.

Snímek obrazovky znázorňující výsledky vytvoření instančního objektu v Azure

Zkopírujte výstup JSON a uložte ho jako tajný kód GitHubu v úložišti GitHub pomocí následujícího postupu v GitHubu: V úložišti GitHub vyberte kartu Nastavení. V nabídce vlevo vyberte rozevírací seznam Tajné kódy a pak vyberte Codespaces.

Zadejte následující hodnoty a vyberte Add secret (Přidat tajný kód):

  • Název: Zadejte AZURE_CREDENTIALS.
  • Tajný kód: Vložte výstup JSON, který jste zkopírovali dříve.

Snímek obrazovky znázorňující přidání nových tajných informací instančního objektu do tajného kódu GitHubu

Tyto informace potřebujete k zadání ověřování v pracovním postupu.

Vytvoření pracovního postupu

Soubor pracovního postupu musí být uložen ve složce .github/workflows v kořenovém adresáři úložiště. Soubor pracovního postupu může mít příponu .yml nebo .yaml.

Soubor pracovního postupu můžete vytvořit a pak ho nahrát do úložiště. Nebo ho můžete následujícím postupem vytvořit v rozhraní GitHubu:

  1. V úložišti GitHubu vyberte v horní nabídce Actions (Akce) a pak vyberte Set up a workflow yourself (Vytvořit pracovní postup sami).

    Snímek obrazovky znázorňující výběry pro vytvoření pracovního postupu

  2. Pokud chcete použít jiný název než main.yml, přejmenujte soubor pracovního postupu. Použijte například deployARMTemplate.yml.

  3. Obsah tohoto souboru .yml nahraďte následujícím kódem.

    Poznámka:

    GitHub Marketplace obsahuje několik integrovaných akcí, které můžete použít při nasazování šablon ARM. Tento modul používá zprostředkovatele marketplace s názvem Nasazení šablony Azure Resource Manageru (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
    

    Soubor pracovního postupu má tři části.

    • name: Název pracovního postupu.

    • on: Název události GitHubu, která aktivuje pracovní postup. Pracovní postup se aktivuje, když je událost push v hlavní větvi a upraví alespoň jeden soubor v hlavní větvi.

    • jobs: Spuštění pracovního postupu se skládá z jedné nebo více úloh. Jedna z nich má název deploy-virtual-network-template. Tato úloha má tři kroky.

      1. Rezervace zdrojového kódu
      2. Přihlaste se do Azure.
      3. Nasazení šablony ARM

    Důležité

    Ověřte, že název tajného kódu ve výrazu creds: ${{ secrets.AZURE_CREDENTIALS }} se shoduje s názvem tajného kódu, který jste uložili do nastavení úložiště. Rovněž ověřte, že název šablony ARM template: $GITHUB_WORKSPACE/azuredeploy.json v kroku Deploy ARM Template pro se shoduje s šablonou, kterou jste dříve uložili do úložiště.

    Poznámka:

    Pokud jste při konfiguraci přihlašovacích údajů pro nasazení použili předchozí kód Azure CLI, měl by název skupiny být GitHubActionExercise-rg. Vygenerovaný název skupiny prostředků je název projektu, ke kterému se připojí rg.

  4. Vyberte Start commit (Spustit zápis). V případě potřeby přidejte komentář a popis.

  5. Ujistěte se, že je vybráno potvrzení přímo do hlavní větve , a pak vyberte Potvrdit nový soubor (nebo Potvrdit změny).

    Snímek obrazovky znázorňující potvrzení pracovního postupu do hlavní větve

    Po vytvoření a potvrzení souboru pracovního postupu do hlavní větve úložiště se pracovní postup spustí automaticky, protože trigger ve vašem pracovním postupu je potvrzení/nasdílení změn do hlavní větve.

    on:
      push:
        branches:
          - main
    
  6. Přejděte do svého úložiště a zjistěte stav pracovního postupu.

    Snímek obrazovky znázorňující stav pracovního postupu

Kontrola nasazení

Po dokončení pracovního postupu přejděte na Azure Portal a zkontrolujte stav nasazení.

V levém podokně vyberte Skupiny prostředků>GitHubActionExercise-rg. V podokně Nasazení ověřte, že nasazení proběhlo úspěšně.

Snímek obrazovky znázorňující stav nasazení