Упражнение. Добавление задачи развертывания Bicep в конвейер

Завершено

Вы создали базовый конвейер и настроили среды Azure и Azure Pipelines для связи между собой. Теперь вы готовы к развертыванию файла Bicep для веб-сайта в Azure из конвейера.

В этом упражнении вы выполните следующие действия.

  • Добавьте файл Bicep в репозиторий.
  • Добавьте шаг конвейера для развертывания файла Bicep.
  • Снова запустите конвейер и убедитесь, что он успешно развернул веб-сайт.

Добавление файла Bicep веб-сайта в репозиторий Git

Вы уже подготовили файл Bicep для веб-сайта, который можно использовать для развертывания различных конфигураций ресурсов веб-сайта в зависимости от среды и конфигурации. Далее нужно добавить файл Bicep в репозиторий.

  1. Откройте Visual Studio Code Explorer.

  2. В папке deploy создайте новый файл с именем main.bicep. Убедитесь, что файл создан в папке deploy, а не в корне репозитория:

    Снимок экрана с открытым Проводником в Visual Studio Code, в котором в папке deploy выделен файл main.bicep.

  3. Скопируйте следующий код в файл 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. Сохраните внесенные в файл изменения.

  5. В терминале Visual Studio Code выполните приведенный ниже код, чтобы подготовить изменения, зафиксировать их и отправить в репозиторий:

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

Замена шагов конвейера

Далее необходимо обновить определение конвейера, чтобы развернуть файл Bicep в Azure с помощью служебного подключения.

  1. Откройте в Visual Studio Code файл deploy/azure-pipelines.yml.

  2. jobs: Перед строкой добавьте variables: для определения переменной с именемdeploymentDefaultLocation:

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    
  3. Уберите шаг script из определения конвейера, удалив две нижние строки файла.

    Совет

    При работе в Visual Studio Code и установке расширения Azure Pipelines попробуйте использовать сочетание клавиш Ctrl + пробел. В нем отображается контекстное меню с предлагаемыми элементами для добавления в текущую позицию курсора.

  4. В нижней части файла добавьте задачу, которая использует задачу AzureResourceManagerTemplateDeployment для развертывания файла 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)
    

    Примечание.

    В этом модуле рекомендуется задать ее вручную, а не методом копирования и вставки. Обратите особое внимание на отступы в файле. Если отступы указаны неправильно, использование файла YAML будет невозможно. В Visual Studio Code ошибки отмечены волнистыми линиями.

    На этом шаге для присвоения имени развертыванию используется системная переменная $(Build.BuildNumber). Переменная помогает легко увидеть, какому выполнению конвейера соответствует развертывание.

    Свойство задачи location является обязательным для задачи AzureResourceManagerTemplateDeployment. Оно указывает регион Azure, в котором должна быть создана группа ресурсов. В этом упражнении вы уже создали группу ресурсов, поэтому этот выбор расположения ни на что не повлияет. Но это значение в любом случае является обязательным. Здесь вы присвоите ему значение переменной deploymentDefaultLocation, которую вы задали на предыдущем шаге.

  5. Сохраните внесенные в файл изменения. Файл должен выглядеть так, как показано в этом примере.

    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. В терминале Visual Studio Code внесите изменения, зафиксируйте их в репозитории и отправьте в Azure Repos:

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

Добавление переменных конвейера

  1. В браузере выберите Конвейеры.

    Снимок экрана: интерфейс Azure DevOps, в котором отображается меню с выделенным пунктом Pipelines.

  2. Выберите конвейер.

    Снимок экрана: интерфейс Azure DevOps со списком конвейеров и выделенным конвейером веб-сайта по продаже игрушек.

  3. Выберите Изменить.

    Снимок экрана: интерфейс Azure DevOps, на котором показан конвейер с выделенным полем

  4. Выберите Переменные.

    Снимок экрана: интерфейс Azure DevOps с редактором конвейеров и выделенной кнопкой

  5. Выберите новую переменную.

    Снимок экрана: интерфейс Azure DevOps с редактором переменных конвейера и выделенной кнопкой

  6. В окне Имя введите ServiceConnectionName. В списке Значение введите ToyWebsite.

    Не устанавливая флажки, нажмите кнопку ОК.

    Снимок экрана: интерфейс Azure DevOps с редактором переменных конвейера и выделенной кнопкой

  7. Чтобы создать дополнительные переменные, выберите +.

    Снимок экрана: интерфейс Azure DevOps, на котором показан список переменных конвейера, с выделенной кнопкой

    Создайте следующие переменные так же, как вы создали переменную ServiceConnectionName:

    Имя переменной Значение
    ResourceGroupName ToyWebsite
    EnvironmentType nonprod
  8. Выполните действия, чтобы создать переменную с именем DeployToyManualsStorageAccount со значением true. Для этой переменной установите флажок Разрешить пользователям переопределять это значение при выполнении этого конвейера.

    Снимок экрана: интерфейс Azure DevOps, на котором показан редактор переменных конвейера.

  9. После создания всех четырех переменных нажмите кнопку Сохранить.

    Снимок экрана: интерфейс Azure DevOps с редактором переменных конвейера и выделенной кнопкой

Выполнение конвейера

Теперь вы готовы к запуску конвейера!

Шаблон включает учетную запись хранения, где команда веб-сайта хранит руководства по использованию игрушек. Так как вы пока только тестируете среду, вам не нужно развертывать учетную запись хранения при каждом развертывании веб-сайта. Поэтому вы создали параметр Bicep для управления развертыванием учетной записи хранения. Далее необходимо выполнить конвейер и переопределить развертывание, чтобы не развертывать в этот раз учетную запись хранения.

  1. Выберите Выполнить.

    Снимок экрана: интерфейс Azure DevOps, на котором показан конвейер с выделенной кнопкой

    Появится панель Запуск конвейера. Эту панель можно использовать для настройки параметров конкретного выполнения конвейера.

  2. Выберите Переменные.

    Снимок экрана: интерфейс Azure DevOps со страницей

  3. Выберите переменную DeployToyManualsStorageAccount и измените ее значение на false. После этого нажмите кнопку Обновить.

    Снимок экрана: интерфейс Azure DevOps с редактором переменных выполнения конвейера и выделенной кнопкой

  4. Выберите стрелку назад.

    Снимок экрана: интерфейс Azure DevOps со страницей

  5. Выберите Выполнить, чтобы запустить выполнение конвейера. Запуск конвейера может занять несколько минут. После запуска конвейера развертывание может занять несколько минут.

  6. Чтобы открыть задание, в разделе "Задания " выберите задание. Вы можете отслеживать процесс выполнения задания или дождаться его завершения и просмотреть журнал.

    Дождитесь остановки задания.

  7. Выберите Должность.

    Снимок экрана: интерфейс Azure DevOps, на котором отображается страница задания с выделенным пунктом меню

  8. Выберите 1 используемая переменная времени очереди.

    Снимок экрана: интерфейс Azure DevOps с журналом конвейера и выделенным элементом

    Отображается переопределенное значение для этого запуска конвейера. Переменная DeployToyManualsStorageAccount имеет значение false, так как вы переопределили ее исходную величину.

  9. Проверьте остальные выходные данные конвейера.

    Конвейер успешно выполняет развертывание.

Проверка развертывания

  1. Переход на портал Azure.

  2. В меню слева выберите Группа ресурсов.

  3. Выберите ToyWebsite.

  4. В разделе Обзор можно отслеживать состояние развертывания. Здесь можно увидеть, что успешно выполнено одно развертывание.

    Снимок экрана портала Azure: группа ресурсов с одним успешным развертыванием.

  5. Щелкните ссылку 1 Succeeded (1 успешное), чтобы просмотреть сведения об этом развертывании.

    Снимок экрана портала Azure, где показан журнал развертывания группы ресурсов с выделенным именем развертывания.

    Имя развертывания совпадает с именем выполнения конвейера.

  6. Чтобы увидеть, какие ресурсы были развернуты, выберите нужное развертывание. Чтобы просмотреть дополнительную информацию, выберите Сведения о развертывании. В этом случае отобразятся план Службы приложений Azure и приложение.

    Снимок экрана портала Azure: сведения о развертывании группы ресурсов с выделенными ресурсами службы приложений.