Ćwiczenie — dodawanie zadania wdrożenia Bicep do potoku

Ukończone

Utworzono podstawowy potok i skonfigurowano środowiska platformy Azure i usługi Azure Pipelines w celu nawiązania połączenia. Teraz możesz wdrożyć plik Bicep witryny internetowej na platformie Azure z potoku.

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

  • Dodaj plik Bicep do repozytorium.
  • Dodaj krok potoku, aby wdrożyć plik Bicep.
  • Uruchom potok ponownie i sprawdź, czy pomyślnie wdrożono witrynę internetową.

Dodawanie pliku Bicep witryny internetowej do repozytorium Git

Masz już przygotowany plik Bicep witryny internetowej. Możesz użyć pliku Bicep, aby wdrożyć różne konfiguracje 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 folderze deploy utwórz nowy plik o nazwie main.bicep. Upewnij się, że plik został utworzony w folderze deploy , a nie w katalogu głównym repozytorium:

    Zrzut ekranu przedstawiający Eksploratora programu Visual Studio Code z wyróżnionym głównym plikiem dot bicep i znajdującym się w folderze deploy.

  3. 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('Indicates whether to deploy the storage account for toy manuals.')
    param deployToyManualsStorageAccount bool
    
    @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 = deployToyManualsStorageAccount ? 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}' : ''
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: environmentConfigurationMap[environmentType].appServicePlan.sku
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
    resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = if (deployToyManualsStorageAccount) {
      name: toyManualsStorageAccountName
      location: location
      kind: 'StorageV2'
      sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku
    }
    
  4. Zapisz zmiany w pliku.

  5. 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 potoku

Następnie zaktualizuj definicję potoku, aby wdrożyć plik Bicep na platformie Azure przy użyciu połączenia z usługą.

  1. W programie Visual Studio Code otwórz plik deploy/azure-pipelines.yml .

  2. Przed wierszem jobs: dodaj variables: , aby zdefiniować zmienną o nazwie deploymentDefaultLocation:

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    
  3. Aby usunąć script krok z definicji potoku, usuń dwa dolne wiersze pliku.

    Napiwek

    Gdy pracujesz w programie Visual Studio Code i zainstalowano rozszerzenie usługi Azure Pipelines, spróbuj użyć kombinacji Ctrl+Spacja . Wyświetla menu kontekstowe z sugerowanymi elementami, które mają zostać dodane w bieżącej pozycji kursora.

  4. W dolnej części pliku dodaj zadanie, które używa AzureResourceManagerTemplateDeployment zadania do wdrożenia pliku Bicep:

    jobs:
    - job:
      steps:
    
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: $(ServiceConnectionName)
          deploymentName: $(Build.BuildNumber)
          location: $(deploymentDefaultLocation)
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep
          overrideParameters: >
            -environmentType $(EnvironmentType)
            -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
    

    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.

    W tym kroku użyto zmiennej systemowej , $(Build.BuildNumber)aby nazwać wdrożenie. Zmienna może ułatwić sprawdzenie, który potok uruchamia wdrożenie odpowiada.

    Właściwość zadania jest wymagana location AzureResourceManagerTemplateDeployment przez zadanie. Określa region platformy Azure, w którym ma zostać utworzona grupa zasobów. W tym ćwiczeniu utworzono już grupę zasobów, więc określona tutaj lokalizacja nie ma znaczenia. Ale musisz mimo to podać wartość. W tym miejscu należy ustawić ją na wartość deploymentDefaultLocation zmiennej ustawionej w poprzednim kroku.

  5. Zapisz zmiany w pliku. Plik powinien wyglądać tak, jak w tym przykładzie:

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    - job:
      steps:
    
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: $(ServiceConnectionName)
          deploymentName: $(Build.BuildNumber)
          location: $(deploymentDefaultLocation)
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep
          overrideParameters: >
            -environmentType $(EnvironmentType)
            -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
    
  6. W terminalu programu Visual Studio Code przygotuj zmiany, zatwierdź je w repozytorium i wypchnij je do usługi Azure Repos:

    git add deploy/azure-pipelines.yml
    git commit -m 'Add deployment task to pipeline'
    git push
    

Dodawanie zmiennych potoku

  1. W przeglądarce wybierz pozycję Potoki.

    Zrzut ekranu usługi Azure DevOps przedstawiający menu z wyróżnioną pozycją Pipelines (Potoki).

  2. Wybierz swój potok.

    Zrzut ekranu usługi Azure DevOps przedstawiający listę potoków z wyróżnionym potokiem toy-website.

  3. Zaznacz Edytuj.

    Zrzut ekranu usługi Azure DevOps przedstawiający potok z wyróżnioną pozycją Edytuj.

  4. Wybierz pozycję Zmienne.

    Zrzut ekranu usługi Azure DevOps przedstawiający edytor potoku z wyróżnionym przyciskiem Zmienne.

  5. Wybierz pozycję Nowa zmienna.

    Zrzut ekranu usługi Azure DevOps przedstawiający edytor zmiennych potoku z wyróżnionym przyciskiem

  6. W polu Nazwa wprowadź wartość ServiceConnectionName. W polu Wartość wprowadź wartość ToyWebsite.

    Pozostaw pola wyboru wyczyszczone, a następnie wybierz przycisk OK.

    Zrzut ekranu usługi Azure DevOps przedstawiający edytor zmiennych potoku z wyróżnionym przyciskiem OK.

  7. Aby utworzyć więcej zmiennych, wybierz pozycję +.

    Zrzut ekranu usługi Azure DevOps przedstawiający listę zmiennych potoku z wyróżnionym przyciskiem plus.

    Utwórz następujące zmienne w taki sam sposób, jak utworzono zmienną ServiceConnectionName :

    Nazwa zmiennej Wartość
    ResourceGroupName Witryna toyWebsite
    Typ środowiska nieprod
  8. Wykonaj ponownie kroki, aby utworzyć zmienną o nazwie DeployToyManualsStorageAccount z wartością true. Dla tej zmiennej zaznacz pole wyboru Zezwalaj użytkownikom na zastąpienie tej wartości podczas uruchamiania tego potoku .

    Zrzut ekranu usługi Azure DevOps przedstawiający edytor zmiennych potoku.

  9. Po utworzeniu wszystkich czterech zmiennych wybierz pozycję Zapisz.

    Zrzut ekranu usługi Azure DevOps przedstawiający edytor zmiennych potoku z wyróżnionym przyciskiem Zapisz.

Uruchamianie potoku

Teraz możesz przystąpić do uruchamiania potoku.

Szablon zawiera konto magazynu używane przez zespół witryny internetowej do przechowywania instrukcji obsługi zabawek. Ponieważ nadal testujesz środowisko, nie musisz wdrażać konta magazynu za każdym razem, gdy wdrażasz witrynę internetową. W związku z tym utworzono parametr Bicep w celu kontrolowania, czy konto magazynu jest wdrożone. W tym miejscu uruchomisz potok i zastąpisz wdrożenie, aby nie wdrożyć konta magazynu tym razem.

  1. Wybierz Uruchom.

    Zrzut ekranu usługi Azure DevOps przedstawiający potok z wyróżnionym przyciskiem Uruchom.

    Zostanie wyświetlone okienko Uruchom potok . W tym okienku można skonfigurować ustawienia dla tego konkretnego uruchomienia potoku.

  2. Wybierz pozycję Zmienne.

    Zrzut ekranu usługi Azure DevOps przedstawiający stronę

  3. Wybierz zmienną DeployToyManualsStorageAccount i zmień jej wartość na false. Następnie wybierz pozycję Aktualizuj.

    Zrzut ekranu usługi Azure DevOps przedstawiający edytor zmiennych

  4. Wybierz strzałkę wstecz.

    Zrzut ekranu usługi Azure DevOps przedstawiający stronę

  5. Aby rozpocząć nowy przebieg potoku, wybierz pozycję Uruchom. Uruchomienie potoku może potrwać kilka minut. Po uruchomieniu potoku wdrożenie może potrwać kilka minut.

  6. Aby otworzyć zadanie, w sekcji Zadania wybierz pozycję Zadanie. Zadanie można monitorować podczas jego uruchamiania lub czekać, aż zadanie zakończy się, aby przejrzeć jego historię.

    Poczekaj na zakończenie zadania.

  7. Wybierz Praca.

    Zrzut ekranu usługi Azure DevOps przedstawiający stronę zadania z wyróżnionym elementem menu Zadanie.

  8. Wybierz 1 użytą zmienną czasu kolejki.

    Zrzut ekranu usługi Azure DevOps przedstawiający dziennik potoku z wyróżnioną pozycją

    Zostanie wyświetlona wartość przesłoniętą dla tego przebiegu potoku. Wartość DeployToyManualsStorageAccount zmiennej jest fałsz , ponieważ przerodzisz oryginalną wartość.

  9. Sprawdź pozostałe dane wyjściowe potoku.

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

    Zrzut ekranu witryny Azure Portal przedstawiający grupę zasobów z jednym pomyślnym wdrożeniem.

  5. Wybierz pozycję 1 udane, aby wyświetlić szczegóły wdrożenia.

    Zrzut ekranu witryny Azure Portal przedstawiający historię wdrażania grupy zasobów z wyróżnionym wdrożeniem.

    Nazwa wdrożenia jest taka sama jak nazwa przebiegu potoku.

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

    Zrzut ekranu witryny Azure Portal przedstawiający szczegóły wdrożenia grupy zasobów z wyróżnionymi zasobami usługi App Service.