Общие сведения об этапах конвейера

Завершено

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

Что такое этапы конвейера?

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

Схема: конвейер с этапом, содержащим одно задание. Задание состоит из четырех шагов.

Этапы в конвейере можно использовать для разделения задач. Например, при работе с кодом Bicep проверка кода выполняется отдельно от развертывания файла Bicep. При использовании автоматизированного конвейера сборку и тестирование кода часто называют непрерывной интеграцией, или CI. Развертывание кода в автоматизированном конвейере часто называется непрерывным развертыванием (CD).

На этапах CI вы проверяете допустимость изменений, внесенных в код. Этапа CI обеспечивают контроль качества. Их запуск не влияет на рабочую среду.

Во многих языках программирования код необходимо собрать, прежде чем запускать. При развертывании файла Bicep он преобразуется из Bicep в JSON. Инструментарий выполняет этот процесс автоматически. В большинстве случаев вам не нужно вручную создавать код Bicep для шаблонов JSON в конвейере. Однако мы используем термин непрерывная интеграция, когда говорим о коде Bicep, поскольку другие части CI по-прежнему применимы, например проверка кода.

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

Этапы выполняются по очереди. Вы можете управлять тем, как и когда выполняется каждый этап. Например, можно настроить этапы CD, чтобы они выполнялись только после успешного выполнения этапов CI. Кроме того, можно создать несколько этапов CI, которые должны выполняться последовательно, например для создания кода и его последующего тестирования. Вы также можете включить этап отката, который выполняется только в случае сбоя предыдущего этапа развертывания.

Сдвиг влево

С помощью этапов можно проверить качество кода перед его развертыванием. Эти этапы иногда называются сдвигом влево.

Рассмотрим временную шкалу действий, выполняемых при написании кода. Временная шкала начинается с этапов планирования и проектирования. Затем вы переходите к этапам сборки и тестирования. Наконец, вы развертываете решение и поддерживаете его.

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

Это хорошо понятное правило в разработке программного обеспечения, что ранее в процессе, который вы найдете ошибку (ближе к левой части временной шкалы), проще, быстрее и дешевле это исправить. Чем позже в процессе вы поймаете ошибку, тем труднее исправить.

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

Можно даже добавить проверку перед началом развертывания. При работе с такими инструментами, как Azure DevOps, запросы на вытягивание обычно представляют изменения, которые кто-то из вашей команды хочет внести в код в основной ветви. Полезно создать еще один конвейер, который автоматически выполняет шаги CI во время проверки запроса на вытягивание. Этот метод позволяет проверить, что код по-прежнему работает, даже с предложенными изменениями. Если проверка прошла успешно, вы повысите вероятность того, что изменение не вызовет проблем при слиянии с основной ветвью. Если проверка завершается неудачно, то нужно что-то изменить перед слиянием запроса на вытягивание.

Внимание

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

Определение этапа конвейера

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

Представьте, что вы создали файл Bicep, который нужно развернуть дважды: в инфраструктуре в США и в инфраструктуре в Европе. Перед развертыванием вы проверяете код Bicep. Ниже приведена схема конвейера из нескольких этапов, которая определяет этот процесс.

Схема: конвейер с этапом проверки, этапом развертывания в США и этапом развертывания в Европе, выполняемыми последовательно.

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

Ниже описана процедура определения этапов в файле конвейера YAML.

stages:

- stage: Test
  jobs:
  - job: Test

- stage: DeployUS
  jobs: 
  - job: DeployUS

- stage: DeployEurope
  jobs: 
  - job: DeployEurope

Управление последовательностью этапов

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

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

Схема: конвейер с этапом проверки, этапом развертывания в США и этапом развертывания в Европе, где два этапа развертывания выполняются параллельно.

Зависимости между этапами можно указать с помощью ключевого слова dependsOn:

stages:

- stage: Test
  jobs:
  - job: Test

- stage: DeployUS
  dependsOn: Test
  jobs: 
  - job: DeployUS

- stage: DeployEurope
  dependsOn: Test
  jobs: 
  - job: DeployEurope

При использовании ключевого слова dependsOn Azure Pipelines ожидает успешного завершения зависимого этапа перед началом следующего этапа. Если Azure Pipelines обнаруживает, что все зависимости для нескольких этапов выполнены, они могут выполняться параллельно.

Примечание.

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

Иногда требуется выполнить этап при сбое предыдущего этапа. Например, вот другой конвейер. Если развертывание завершается неудачно, сразу запускается этап отката:

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

Ключевое condition слово можно использовать для указания условия, которое должно выполняться перед выполнением этапа:

stages:

- stage: Test
  jobs:
  - job: Test

- stage: Deploy
  dependsOn: Test
  jobs: 
  - job: Deploy

- stage: Rollback
  condition: failed('Deploy')
  jobs: 
  - job: Rollback

В предыдущем примере, если все идет хорошо, Azure Pipelines сначала запускает этап проверки, а затем развертывания. Этап отката пропускается. Однако при сбое этапа развертывания Azure Pipelines выполняет этап отката. Мы поговорим об откате подробнее далее в этом модуле.

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

Этапы развертывания Bicep

Типичный конвейер развертывания Bicep содержит несколько этапов. Ваша цель — повышать уверенность в успехе последующих этапов конвейера по мере их выполнения. Ниже приведены общие этапы для конвейера развертывания Bicep.

Схема: конвейер развертывания Bicep с пятью этапами: анализ кода, проверка, предварительный просмотр, развертывание и тест состояния.

  1. Анализ кода. Используйте анализатор кода Bicep, чтобы убедиться, что файл Bicep имеет корректный формат и не содержит очевидных ошибок.
  2. Проверка. Используйте предварительную проверку Azure Resource Manager, чтобы выявить проблемы, которые могут возникнуть при развертывании.
  3. Предварительный просмотр. Используйте команду "что если", чтобы проверить список изменений, которые будут применены к среде Azure. Пользователь должен сам изучить результаты команды "что, если" и разрешить дальнейшее выполнение конвейера.
  4. Развертывание. Отправьте развертывание в Resource Manager и дождитесь его завершения.
  5. Тест состояния. Выполните базовые проверки после развертывания для некоторых важных развернутых ресурсов. Эти проверки называются тестами дыма инфраструктуры.

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

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

  • Как конвейеры останавливают процесс развертывания при возникновении непредвиденных действий в любом из предыдущих этапов.
  • Как настроить приостановку конвейера до тех пор, пока вы вручную не проверите, что произошло на предыдущем этапе.