Ćwiczenie — wdrażanie szablonów usługi ARM w ramach ciągłej integracji/ciągłego wdrażania za pomocą funkcji GitHub Actions

Ukończone

W tym miejscu wdrożysz szablon usługi Azure Resource Manager (ARM) z przepływu pracy funkcji GitHub Actions.

Ważne

To ćwiczenie wykonasz poza środowiskiem Microsoft Learn. Do wykonania tego ćwiczenia potrzebna jest własna subskrypcja platformy Azure. Ponadto mogą zostać naliczone opłaty. Jest to wymagane, ponieważ konieczne jest utworzenie jednostki usługi, co nie jest obsługiwane w ramach subskrypcji piaskownicy. Jeśli nie masz jeszcze subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Tworzenie konta i repozytorium usługi GitHub

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

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ę New repository (Nowe repozytorium). Możesz też wybrać zielony przycisk Utwórz repozytorium, jeśli jest widoczny.

    Zrzut ekranu przedstawiający opcje dostępne podczas tworzenia repozytorium GitHub.

  2. Wpisz krótką, łatwą do zapamiętania nazwę dla swojego repozytorium. Na przykład użyj nazwy Deploy-ARM-Template. Opcjonalnie dodaj opis repozytorium. Opisem może być na przykład Wdrażanie mojego pierwszego szablonu usługi ARM za pomocą funkcji GitHub Actions.

  3. Wybierz ustawienie widoczności repozytorium. Publiczne repozytoria są dostępne dla wszystkich użytkowników Internetu. Prywatne repozytoria są dostępne tylko dla Ciebie i osób, którym jawnie przyznasz dostęp. (Jedną z tych czynności działa w tym ćwiczeniu).

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

  5. Kliknij przycisk Create repository (Utwórz repozytorium).

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

Utworzono repozytorium i zainicjowano je za pomocą pliku README. Czas zatwierdzić w repozytorium szablon i plik parametrów szablonu.

Uwaga

W plikach README można opisywać szczegóły projektu lub dodawać składniki dokumentacji, takie jak instrukcja instalowania projektu. Zawartość pliku README jest automatycznie wyświetlana na pierwszej stronie repozytorium.

Zatwierdzanie pliku szablonu usługi ARM w repozytorium

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

  2. Powyżej listy plików na liście rozwijanej Dodaj plik wybierz pozycję Utwórz nowy plik.

    Zrzut ekranu przedstawiający opcje dostępne podczas dodawania szablonu do repozytorium.

  3. W polu nazwy pliku wpisz nazwę i rozszerzenie szablonu. W naszym ćwiczeniu użyjemy 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. W sekcji Commit new file (Zatwierdzanie nowego pliku) dodaj opis i wybierz przycisk Commit new file (Zatwierdź nowy plik), aby zapisać plik 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ć dowolne zasoby na platformie Azure przy użyciu funkcji GitHub Actions, musisz utworzyć jednostkę usługi platformy Azure i udzielić jej uprawnień 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 mogła wdrażać zasoby platformy Azure, potrzebuje odpowiedniego wbudowanego współautora.

W poniższym skrypcie interfejsu wiersza polecenia platformy Azure pokazano, jak można wygenerować jednostkę usługi platformy Azure z uprawnieniami współautora w grupie zasobów platformy Azure. Ta grupa zasobów służy do wdrażania zasobów zdefiniowanych w szablonie usługi 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, po zalogowaniu się do swojej subskrypcji, wybierz ikonę Cloud Shell, aby otworzyć powłokę w dolnej części strony.

Animacja pokazująca otwieranie usługi Cloud Shell.

W powłoce użyj powyższego kodu, aby utworzyć jednostkę usługi. Uzyskasz następujące wyniki. Skopiuj część wyników JSON (zawartość w czerwonym polu na poniższym zrzucie ekranu), ponieważ jest ona potrzebna podczas konfigurowania wpisu tajnego w usłudze GitHub.

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

Skopiuj dane wyjściowe JSON i zapisz je jako wpis tajny usługi GitHub w repozytorium GitHub, wykonując następujące kroki w witrynie GitHub: W repozytorium GitHub wybierz kartę Ustawienia. Z menu po lewej stronie wybierz listę rozwijaną Wpisy tajne, a następnie wybierz pozycję Codespaces.

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

  • Nazwa: wprowadź AZURE_CREDENTIALS.
  • Wpis tajny: wklej skopiowane wcześniej dane wyjściowe JSON.

Zrzut ekranu przedstawiający dodawanie nowych informacji tajnych jednostki usługi do wpisu tajnego usługi 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 katalogu głównego repozytorium. Plik przepływu pracy może mieć rozszerzenie yml lub yaml.

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

  1. W repozytorium GitHub wybierz pozycję Actions (Akcje) z górnego menu, a następnie wybierz pozycję Set up a workflow yourself (Skonfiguruj przepływ pracy samodzielnie).

    Zrzut ekranu przedstawiający opcje dostępne podczas konfigurowania przepływu pracy.

  2. Zmień nazwę pliku przepływu pracy, jeśli wolisz inną nazwę niż main.yml. Może to być na przykład nazwa deployARMTemplate.yml.

  3. Zastąp zawartość pliku yml poniższym kodem.

    Uwaga

    W witrynie GitHub Marketplace można znaleźć niestandardowe wbudowane akcje, których można użyć do wdrażania szablonów usługi ARM. W tym module jest używany dostawca witryny Marketplace o nazwie Wdrażanie szablonu usługi 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 znajduje się w gałęzi głównej i modyfikuje co najmniej jeden plik w gałęzi głównej.

    • jobs: Przebieg przepływu pracy składa się z co najmniej jednego zadania. Tylko jedno zadanie jest nazywane deploy-virtual-network-template. To zadanie ma trzy kroki.

      1. Sprawdź kod źródłowy.
      2. Zaloguj się do Azure.
      3. Wdróż szablon usługi ARM.

    Ważne

    Sprawdź, czy nazwa wpisu tajnego w wyrażeniu creds: ${{ secrets.AZURE_CREDENTIALS }} jest zgodna z nazwą wpisu tajnego zapisanego w ustawieniach Twojego repozytorium. Sprawdź również, czy nazwa szablonu usługi ARM template: $GITHUB_WORKSPACE/azuredeploy.json podana w kroku Deploy ARM Template jest zgodna z nazwą zapisaną wcześniej w repozytorium.

    Uwaga

    Nazwa grupy zasobów powinna brzmieć GitHubActionExercise-rg, jeśli podczas konfigurowania poświadczeń wdrożenia użyto powyższego kodu interfejsu wiersza polecenia platformy Azure. Wygenerowana nazwa grupy zasobów jest nazwą projektu z dołączonym ciągiem rg.

  4. Wybierz pozycję Start commit (Rozpocznij zatwierdzanie). W razie konieczności dodaj komentarz i opis.

  5. Upewnij się, że wybrano opcję Zatwierdź bezpośrednio w gałęzi głównej, a następnie wybierz pozycję 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ż wyzwalacz w przepływie pracy jest zatwierdzeniem/wypchnięciem do gałęzi głównej.

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

    Zrzut ekranu przedstawiający stan przepływu pracy.

Sprawdzanie wdrożenia

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

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

Zrzut ekranu przedstawiający stan wdrożenia.