Ćwiczenie – Wdrażaj szablony ARM jako część ciągłej integracji i ciągłego wdrażania za pomocą GitHub Actions

Ukończone

Wdrażasz tutaj szablon Azure Resource Manager (ARM) z przepływu pracy w GitHub Actions.

Ważny

To ćwiczenie wykonasz poza środowiskiem Microsoft Learn. To ćwiczenie wymaga posiadania własnej subskrypcji Azure i mogą być naliczane opłaty. Jest to wymagane, ponieważ należy utworzyć jednostkę usługi, która nie jest obsługiwana w subskrypcji piaskownicy. Jeśli nie masz jeszcze subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto .

Utwórz konto i repozytorium GitHub.

Najpierw, jeśli nie masz konta usługi GitHub, utwórz je teraz na stronie tworzenia konta usługi GitHub. (Jest bezpłatny).

Zrzut ekranu przedstawiający stronę tworzenia konta usługi GitHub.

Po utworzeniu konta zaloguj się i utwórz nowe repozytorium, w którym możesz przechowywać szablony w ramach modelu infrastruktury jako kodu (IaC). Aby utworzyć repozytorium (powszechnie znane jako repozytorium w branży), wykonaj następujące kroki:

  1. W prawym górnym rogu dowolnej strony w witrynie GitHub użyj menu rozwijanego + i wybierz pozycję Nowe repozytorium. Możesz też wybrać zielony przycisk Utwórz repozytorium, jeśli tam jest.

    Zrzut ekranu przedstawiający opcje tworzenia repozytorium GitHub.

  2. Wprowadź krótką, pamiętną nazwę repozytorium. Na przykład użyj Deploy-ARM-Template. Opcjonalnie dodaj opis repozytorium. Na przykład użyj Wdrażanie mojego pierwszego szablonu ARM za pomocą GitHub Actions.

  3. Wybierz ustawienie widoczności repozytorium. Repozytoria publiczne są dostępne dla wszystkich użytkowników w Internecie. Repozytoria prywatne są dostępne tylko dla Ciebie i osób, którym jawnie udostępniasz dostęp. (Obie opcje pasują do tego ćwiczenia.)

  4. W obszarze Zainicjuj to repozytorium za pomocą polecenia:wybierz pozycję Dodaj plik README.

  5. Wybierz pozycję Utwórz repozytorium.

    Zrzut ekranu przedstawiający tworzenie szczegółów nowego repozytorium.

Utworzono repozytorium i zainicjowano je za pomocą pliku README. Nadszedł czas, aby zatwierdzić szablon i plik parametrów szablonu w repozytorium.

Notatka

Pliki README to doskonałe miejsce do opisania projektu bardziej szczegółowo lub dodania dokumentacji, takiej jak instalowanie lub używanie projektu. Zawartość pliku README jest automatycznie wyświetlana na pierwszej stronie repozytorium.

Zatwierdź plik szablonu ARM do repozytorium

  1. W usłudze GitHub przejdź do strony głównej repozytorium.

  2. Nad listą plików na liście rozwijanej Dodaj plik wybierz pozycję Utwórz nowy plik.

    Zrzut ekranu przedstawiający opcje dodawania szablonu do repozytorium.

  3. W polu nazwa pliku wprowadź nazwę i rozszerzenie szablonu. W naszym ćwiczeniu użyj nazwy azuredeploy.json. Skopiuj i wklej następujący szablon do nowego pliku GitHub.

    {
        "$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. Dodaj opis w sekcji Commit new file (Zatwierdź nowy plik) i wybierz pozycję Commit new file (Zatwierdź nowy plik), aby zapisać go w repozytorium.

    Zrzut ekranu przedstawiający zapisywanie nowego szablonu w repozytorium.

Konfigurowanie uwierzytelniania między funkcją GitHub Actions i subskrypcją platformy Azure

Aby wdrożyć wszystkie zasoby na platformie Azure przy użyciu funkcji GitHub Actions, musisz utworzyć jednostkę usługi platformy Azure i nadać jej uprawnienia do tworzenia zasobów zdefiniowanych w szablonach. Ten krok należy wykonać w sekcji usługi Azure Cloud Shell w witrynie Azure Portal po zalogowaniu się do subskrypcji.

Tworzenie jednostki usługi

Aby jednostka przepływu pracy funkcji GitHub Actions wdrażała zasoby platformy Azure, potrzebuje odpowiedniego wbudowanego współautora.

Poniższy skrypt interfejsu wiersza polecenia platformy Azure pokazuje, jak można wygenerować jednostkę usługi platformy Azure z uprawnieniami współautora w grupie zasobów platformy Azure. Ta grupa zasobów to miejsce, w którym przepływ pracy wdraża zasoby zdefiniowane w szablonie 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

W portalu, będąc zalogowanym do swojej subskrypcji, wybierz ikonę Cloud Shell, aby otworzyć powłokę na dole strony.

Animacja przedstawiająca otwarcie usługi Cloud Shell.

W powłoce użyj poprzedniego kodu, aby utworzyć głównego użytkownika usługi. Uzyskasz następujące wyniki. Skopiuj część wyników JSON (zawartość w czerwonym polu na zrzucie ekranu poniżej), ponieważ jest ona potrzebna podczas konfigurowania sekretu w GitHub.

Zrzut ekranu przedstawiający wyniki tworzenia jednostki usługi na platformie Azure.

Skopiuj dane wyjściowe JSON i zapisz je jako sekret GitHub w repozytorium GitHub, wykonując następujące kroki: W repozytorium GitHub wybierz kartę Ustawienia. W menu po lewej stronie wybierz menu rozwijane Wpisy tajne, a następnie wybierz pozycję Codespaces.

Wprowadź następujące wartości, a następnie wybierz Dodaj tajny wpis:

  • Nazwa: wprowadź AZURE_CREDENTIALS.
  • Tajny: Wklej wcześniej skopiowane dane JSON.

Zrzut ekranu przedstawiający dodawanie nowych informacji tajnych dotyczących zasad dostępu do tajemnicy GitHub.

Te informacje są potrzebne do określenia uwierzytelniania w przepływie pracy.

Tworzenie przepływu pracy

Plik przepływu pracy musi być przechowywany w folderze .github/workflows w katalogu głównym repozytorium. Rozszerzenie pliku przepływu pracy może być .yml lub yaml.

Możesz utworzyć plik przepływu pracy, a następnie wypchnąć/przekazać plik do repozytorium. Możesz też użyć następującej procedury, aby utworzyć ją w interfejsie usługi GitHub:

  1. W repozytorium GitHub wybierz pozycję Actions z górnego menu, a następnie wybierz pozycję Skonfiguruj przepływ pracy samodzielnie.

    Zrzut ekranu przedstawiający opcje konfigurowania przepływu pracy.

  2. Zmień nazwę pliku przepływu pracy, jeśli wolisz inną nazwę zamiast main.yml. Na przykład użyj deployARMTemplate.yml.

  3. Zastąp zawartość pliku .yml następującym kodem.

    Notatka

    Na witrynie GitHub Marketplace dostępnych jest kilka działań niestandardowych, których można użyć do wdrażania szablonów ARM. W tym module używany jest dostawca usług marketplace o nazwie Wdrażanie szablonu 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
    

    Plik przepływu pracy zawiera trzy sekcje.

    • name: nazwa przepływu pracy.

    • on: nazwa zdarzenia usługi GitHub, które wyzwala przepływ pracy. Przepływ pracy jest wyzwalany, gdy zdarzenie wypychania występuje na gałęzi głównej i modyfikuje co najmniej jeden plik.

    • jobs: Uruchomienie przepływu pracy składa się z jednego lub więcej zadań. Tylko jedno zadanie jest nazywane deploy-virtual-network-template. To zadanie ma trzy kroki.

      1. Zapoznaj się z kodem źródłowym.
      2. Zaloguj się do platformy Azure.
      3. Wdróż szablon ARM.

    Ważny

    Sprawdź, czy nazwa tajna w wyrażeniu creds: ${{ secrets.AZURE_CREDENTIALS }} odpowiada nazwie tajnej zapisanej w ustawieniach repozytorium. Sprawdź również, czy nazwa szablonu usługi ARM w kroku Deploy ARM Templatetemplate: $GITHUB_WORKSPACE/azuredeploy.json jest zgodna z nazwą zapisaną wcześniej w repozytorium.

    Notatka

    Nazwa grupy zasobów powinna być GitHubActionExercise-rg, jeśli podczas konfigurowania poświadczeń wdrożenia użyto poprzedniego kodu interfejsu wiersza polecenia platformy Azure. Wygenerowana nazwa grupy zasobów to nazwa projektu z dołączonym rg.

  4. Wybierz pozycję Rozpocznij zatwierdzanie. W razie potrzeby dodaj komentarz i opis.

  5. Upewnij się, że opcja Zatwierdź bezpośrednio do gałęzi głównej jest zaznaczona, a następnie wybierz Zatwierdź nowy plik (lub Zatwierdź zmiany).

    Zrzut ekranu przedstawiający zatwierdzanie przepływu pracy w gałęzi głównej.

    Po utworzeniu i zatwierdzeniu pliku przepływu pracy w głównej gałęzi repozytorium, przepływ pracy zostanie uruchomiony automatycznie, ponieważ wyzwalaczem w przepływie pracy jest zatwierdzenie lub wypchnięcie do gałęzi głównej.

    on:
      push:
        branches:
          - main
    
  6. Przejdź do repozytorium i sprawdź stan przepływu pracy.

    Zrzut ekranu przedstawiający stan przepływu pracy.

Sprawdź swoje wdrożenie

Po zakończeniu przepływu pracy przejdź do witryny Azure Portal, aby sprawdzić stan wdrożenia.

W okienku po lewej stronie wybierz pozycję Grupy zasobów>GitHubActionExercise-rg. W panelu wdrożenia sprawdź, czy wdrożenie zakończyło się pomyślnie.

Zrzut ekranu przedstawiający stan wdrożenia.