Упражнение. Обновление триггера конвейера

Завершено

Коллега просит вас включить функцию Always On для службы приложений на веб-сайте компании, чтобы приложение веб-сайта было постоянно запущено.

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

В процессе вы:

  • Обновите конвейер таким образом, чтобы он автоматически выполнялся при изменении файлов в папке deploy и в главной ветви.
  • Внесите изменения в файл Bicep.
  • Убедитесь, что конвейер выполняется автоматически.

Обновите триггер, чтобы он учитывал ветви

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

  2. Удалите ручной триггер в первой строке.

  3. Добавьте следующее определение триггера в первую строку:

    trigger:
      batch: true
      branches:
        include:
        - main
    

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

  4. Сохраните внесенные в файл изменения.

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

    git add .
    git commit -m 'Add branch trigger'
    

Обновление файла Bicep

  1. В Visual Studio Code откройте файл main.bicep.

  2. В свойстве appServiceApp определения ресурса siteConfig добавьте свойство alwaysOn со значением true:

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: true
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. Сохраните внесенные в файл изменения.

  4. Зафиксируйте изменения и отправьте обе фиксации, выполнив следующий код в терминале Visual Studio Code:

    git add .
    git commit -m 'Configure app Always On setting'
    git push
    

Проверка ошибок конвейера

  1. В браузере выберите Конвейеры, а затем укажите свой конвейер.

  2. Выберите последний запуск, чтобы убедиться, что конвейер был запущен автоматически. Конвейер запустился, потому что вы отправили изменения в ветвь, которая отслеживается триггером ветви. Если конвейер все еще работает, подождите минуту и обновите страницу.

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

    Конвейер возвращает ошибку развертывания.

  3. Чтобы диагностировать ошибку, выберите в разделе Задания нужное задание, а затем выберите задачу AzureResourceManagerTemplateDeployment, которая завершилась сбоем. Прокрутите экран, чтобы увидеть полное сообщение об ошибке. Сообщение об ошибке содержит следующий текст:

    There was a conflict. AlwaysOn cannot be set for this site as the plan does not allow it. For more information on pricing and features, please see: https://aka.ms/appservicepricingdetails

    Это означает, что развертывание завершилось сбоем, так как приложение службы приложений развернуто с использованием бесплатного уровня F1, который не поддерживает функцию Always On.

    Внимание

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

Исправление файла Bicep и контроль за повторным выполнением конвейера

Вы говорите с коллегой о развертывании, которое завершилось ошибкой. Вы принимаете решение о том, что параметр Always On необходимо применять только в рабочей среде. Далее вы устраните проблему, которая вызвала сбой развертывания. Для этого вы примените новое правило, о котором договорились с коллегой.

  1. В Visual Studio Code добавьте в переменную environmentConfigurationMap новые свойства для каждого типа среды:

    var environmentConfigurationMap = {
      nonprod: {
        appServiceApp: {
          alwaysOn: false
        }
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServiceApp: {
          alwaysOn: true
        }
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
  2. Измените параметр приложения alwaysOn, чтобы использовать соответствующее значение сопоставления конфигурации для типа среды:

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. Сохраните внесенные в файл изменения.

  4. В терминале Visual Studio Code зафиксируйте изменения и отправьте их:

    git add .
    git commit -m 'Enable App Service Always On for production environments only'
    git push
    

Проверка успешного выполнения конвейера

  1. В Azure DevOps вернитесь в список Конвейеры и выберите свой конвейер.

  2. Выберите последний запуск. Если конвейер все еще работает, подождите минуту и обновите страницу.

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

    Конвейер успешно выполняет развертывание. В этот раз все получилось, так как вы использовали допустимый файл Bicep.

Очистка ресурсов

Теперь, когда вы завершили упражнение, можно удалить ресурсы, чтобы не оплачивать их.

В окне терминала Visual Studio Code выполните следующую команду.

az group delete --resource-group ToyWebsite --yes --no-wait

Группа ресурсов удалится в фоновом режиме.

Remove-AzResourceGroup -Name ToyWebsite -Force