Ćwiczenie — dodawanie akcji wdrożenia Bicep do przepływu pracy

Ukończone

Utworzono podstawowy przepływ pracy i skonfigurowano środowiska platformy Azure i usługi GitHub w celu nawiązania połączenia. Teraz możesz wdrożyć plik Bicep witryny internetowej na platformie Azure z poziomu przepływu pracy.

W tym ćwiczeniu wykonasz następujące czynności:

  • Dodaj plik Bicep do repozytorium.
  • Dodaj krok przepływu pracy, aby pobrać kod źródłowy repozytorium do systemu plików modułu uruchamiającego.
  • Dodaj krok przepływu pracy, aby zalogować się na platformie Azure.
  • Dodaj krok przepływu pracy, aby wdrożyć plik Bicep.
  • Uruchom ponownie przepływ pracy i sprawdź, czy pomyślnie wdrożono witrynę internetową.

Dodawanie pliku Bicep witryny internetowej do repozytorium GitHub

Masz już przygotowany plik Bicep witryny internetowej, którego można użyć do wdrożenia różnych konfiguracji zasobów witryny internetowej w zależności od środowiska i konfiguracji. W tym miejscu dodasz plik Bicep do repozytorium.

  1. Otwórz Eksploratora programu Visual Studio Code.

  2. W katalogu głównym repozytorium utwórz folder deploy .

  3. W folderze deploy utwórz nowy plik o nazwie main.bicep. Upewnij się, że plik został utworzony w folderze deploy :

    Screenshot of the Visual Studio Code Explorer, with the main dot bicep file highlighted and located in the deploy folder.

  4. Skopiuj następujący kod do pliku main.bicep :

    @description('The Azure region into which the resources should be deployed.')
    param location string = resourceGroup().location
    
    @description('The type of environment. This must be nonprod or prod.')
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    @description('A unique suffix to add to resource names that need to be globally unique.')
    @maxLength(13)
    param resourceNameSuffix string = uniqueString(resourceGroup().id)
    
    var appServiceAppName = 'toy-website-${resourceNameSuffix}'
    var appServicePlanName = 'toy-website-plan'
    var toyManualsStorageAccountName = 'toyweb${resourceNameSuffix}'
    
    // Define the SKUs for each component based on the environment type.
    var environmentConfigurationMap = {
      nonprod: {
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
    var toyManualsStorageAccountConnectionString = 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}'
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: environmentConfigurationMap[environmentType].appServicePlan.sku
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
    resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
      name: toyManualsStorageAccountName
      location: location
      kind: 'StorageV2'
      sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku
    }
    
  5. Zapisz zmiany w pliku.

  6. W terminalu programu Visual Studio Code uruchom ten kod, aby przygotować zmiany, zatwierdzić zmiany i wypchnąć zmiany do repozytorium:

    git add deploy/main.bicep
    git commit -m 'Add Bicep file'
    git push
    

Zastępowanie kroków przepływu pracy

Następnie zaktualizuj definicję przepływu pracy, aby wdrożyć plik Bicep na platformie Azure.

  1. W programie Visual Studio Code otwórz plik .github/workflows/workflow.yml .

  2. W górnej części pliku dodaj sekcję permissions: między on: i jobs:.

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    jobs:
    

    Ta zmiana umożliwia przepływowi pracy używanie tożsamości obciążenia.

  3. Zmień nazwę zadania na say-hello deploy:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
    
  4. Aby usunąć placeholder krok z definicji przepływu pracy, usuń dwa dolne wiersze pliku.

  5. W pierwszym kroku dodasz zadanie w celu wyewidencjonowania kodu w systemie plików modułu uruchamiającego. Dodaj nowy krok w dolnej części pliku:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
    

    Uwaga

    Dobrym pomysłem jest samodzielne wpisanie tego kodu zamiast kopiowania i wklejania go z tego modułu. Zwróć uwagę na wcięcie pliku. Jeśli wcięcie nie jest poprawne, plik YAML nie będzie prawidłowy. Program Visual Studio Code wskazuje błędy, wyświetlając zwijanie wierszy.

  6. Poniżej właśnie dodanego kroku dodaj zadanie, aby zalogować się do środowiska platformy Azure. To zadanie używa wpisów tajnych zdefiniowanych wcześniej do logowania przy użyciu tożsamości obciążenia:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  7. Poniżej właśnie dodanego kroku dodaj kolejny krok, aby wykonać wdrożenie Bicep:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT }}
    

    Zwróć uwagę, że to zadanie używa domyślnej zmiennej środowiskowej github.run_number , aby nazwać wdrożenie na platformie Azure. Używa również zmiennych środowiskowych dla nazwy grupy zasobów i parametru environmentType w pliku Bicep.

  8. Dodaj te zmienne i ich wartości w górnej części pliku przepływu pracy między permissions: i jobs:

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    env:
        AZURE_RESOURCEGROUP_NAME: ToyWebsite
        ENVIRONMENT: nonprod
    
    jobs:
    
  9. Zapisz zmiany w pliku. Plik powinien wyglądać tak, jak w tym przykładzie:

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    env:
        AZURE_RESOURCEGROUP_NAME: ToyWebsite
        ENVIRONMENT: nonprod
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT }}
    
  10. W terminalu programu Visual Studio Code przygotuj zmiany, zatwierdź je w repozytorium i wypchnij je do usługi Azure Repos:

    git add .
    git commit -m 'Add Azure CLI tasks to workflow'
    git push
    

Uruchamianie przepływu pracy

Teraz możesz uruchomić przepływ pracy.

  1. W przeglądarce otwórz przepływ pracy, wybierając pozycję Akcje>deploy-toy-website.

  2. Wybierz pozycję Uruchom przepływ pracy Uruchom przepływ pracy>.

  3. Na liście przebiegów zostanie wyświetlony nowy przebieg przepływu pracy. Jeśli nie zostanie wyświetlona, odśwież stronę przeglądarki.

  4. Wybierz uruchomiony przepływ pracy, aby wyświetlić szczegóły przebiegu.

    Poczekaj na zakończenie przebiegu.

  5. Wybierz zadanie wdrażania.

    Screenshot of the GitHub interface showing the run page, with the deploy job highlighted.

  6. Wybierz pozycję Uruchom azure/arm-deploy@v1. Spowoduje to wyświetlenie szczegółów zadania.

  7. Wybierz pozycję Uruchom azure/arm-deploy@v1 w szczegółach zadania.

    Screenshot of the GitHub interface showing the workflow log, with the 'environment variables' highlighted.

    Zwróć uwagę, że w tym kroku są używane zmienne środowiskowe dodane do pliku przepływu pracy.

  8. Sprawdź pozostałe dane wyjściowe przepływu pracy.

    Przepływ pracy przedstawia pomyślne wdrożenie.

Weryfikowanie wdrożenia

  1. Przejdź do portalu Azure Portal.

  2. W menu po lewej stronie wybierz pozycję Grupy zasobów.

  3. Wybierz pozycję ToyWebsite.

  4. W obszarze Przegląd wyświetl stan wdrożenia. Widać, że jedno wdrożenie zakończyło się pomyślnie.

    Screenshot of the Azure portal that shows the resource group with one successful deployment.

  5. Wybierz link 1 Powodzenie, aby wyświetlić szczegóły wdrożenia.

    Screenshot of the Azure portal that shows the resource group deployment history, with the deployment highlighted.

    Zwróć uwagę, że nazwa wdrożenia jest zgodna z numerem przebiegu przepływu pracy w funkcji GitHub Actions, ponieważ zmienna github.run_number środowiskowa została użyta do nadania nazwy wdrożenia.

  6. Aby sprawdzić, które zasoby zostały wdrożone, wybierz wdrożenie. Aby rozwinąć wdrożenie i wyświetlić więcej szczegółów, wybierz pozycję Szczegóły wdrożenia. W takim przypadku istnieje konto magazynu, plan usługi aplikacja systemu Azure i aplikacja.

    Screenshot of the Azure portal that shows the resource group deployment details, with the App Service resources highlighted.