Запуски конвейера
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
В этой статье объясняется последовательность действий в конвейере Azure Pipelines. Выполнение представляет одно выполнение конвейера. Конвейеры непрерывной интеграции (CI) и непрерывной доставки (CD) состоят из запусков. Во время выполнения Azure Pipelines обрабатывает конвейер и агенты обрабатывают одно или несколько заданий, шагов и задач.
Для каждого запуска Azure Pipelines:
- Обрабатывает конвейер.
- Запрашивает один или несколько агентов для выполнения заданий.
- Передает задания агентам и собирает результаты.
Для каждого задания агент:
- Готовится к заданию.
- Выполняет каждый шаг задания.
- Сообщает результаты.
Задания могут выполняться успешно, завершаются сбоем, отменяются или не завершаются. Общие сведения об этих результатах помогут вам устранить неполадки.
В следующих разделах подробно описан процесс выполнения конвейера.
Обработка конвейера
Чтобы обработать конвейер для выполнения, сначала Azure Pipelines:
- Расширяет шаблоны и оценивает выражения шаблонов.
- Оценивает зависимости на уровне этапа , чтобы выбрать первый этап для запуска.
Для каждого этапа, который он выбирает для запуска, Azure Pipelines:
- Собирает и проверяет все ресурсы задания для авторизации .
- Вычисляет зависимости на уровне задания, чтобы выбрать первое задание для выполнения.
Azure Pipelines выполняет следующие действия для каждого задания, выбранного для выполнения:
- Развертывает YAML
strategy: matrix
илиstrategy: parallel
мультикон конфигурации в несколько заданий среды выполнения. - Оценивает условия, чтобы определить, имеет ли задание право на выполнение.
- Запрашивает агент для каждого соответствующего задания.
По завершении заданий среды выполнения Azure Pipelines проверяет наличие новых заданий для выполнения. Аналогичным образом, как этапы завершены, Azure Pipelines проверяет наличие дополнительных этапов.
Переменные
Понимание порядка обработки объясняет, почему нельзя использовать определенные переменные в параметрах шаблона. Первый шаг расширения шаблона работает только в тексте YAML-файла. Переменные среды выполнения еще не существуют во время этого шага. После этого параметры шаблона уже разрешаются.
Кроме того, нельзя использовать переменные для разрешения имен подключения службы или среды, так как конвейер авторизует ресурсы до запуска этапа. Переменные уровня этапов и заданий пока недоступны. Группы переменных сами по себе являются объектом авторизации, поэтому их данные недоступны при проверке авторизации ресурсов.
Можно использовать переменные уровня конвейера, которые явно включены в определение ресурса конвейера. Дополнительные сведения см. в разделе Метаданные ресурса конвейера в виде предопределенных переменных.
Агенты
Когда Azure Pipelines необходимо запустить задание, он запрашивает агент из пула. Процесс работает по-разному для пулов агентов, размещенных корпорацией Майкрософт, и для локально размещенных пулов агентов.
Примечание.
Задания сервера не используют пул, так как они выполняются на самом сервере Azure Pipelines.
Параллельные задания
Во-первых, Azure Pipelines проверяет параллельные задания вашей организации. Служба добавляет все выполняемые задания для всех агентов и сравнивает количество параллельных заданий, предоставленных или приобретенных.
Если нет доступных параллельных слотов, задание придется ждать в слоте, чтобы освободиться. После того как параллельный слот будет доступен, задание направляется к соответствующему типу агента.
Размещенные агенты Microsoft
Концептуально, размещенный корпорацией Майкрософт пул является одним глобальным пулом компьютеров, хотя это физически разные пулы, разделенные по географическому и операционному типу. На основе запрошенного имени пула YAML vmImage
или классического редактора Azure Pipelines выбирает агент.
Все агенты в пуле Майкрософт являются свежими, новыми виртуальными машинами, которые никогда не запускали конвейеры. После завершения задания виртуальная машина агента удаляется.
Локальные агенты
После того как параллельный слот будет доступен, Azure Pipelines проверяет автономный пул для совместимого агента. Возможности локально размещенных агентов предоставляют возможности, указывающие, что определенное программное обеспечение установлено или настроено параметров. Конвейер имеет требования, которые являются возможностями, необходимыми для выполнения задания.
Если Azure Pipelines не может найти бесплатный агент, возможности которого соответствуют требованиям конвейера, задание продолжает ждать. Если в пуле нет агентов, возможности которых соответствуют требованиям, задание завершается ошибкой.
Локальные агенты обычно повторно используются при выполнении. Для локальных агентов задание конвейера может иметь побочные эффекты, такие как потепление кэшей или наличие большинства фиксаций, уже доступных в локальном репозитории.
Подготовка задания
После принятия задания агент выполняет следующую подготовку:
- Скачивает все задачи, необходимые для выполнения задания, и кэширует их для дальнейшего использования.
- Создает рабочее пространство на диске для хранения исходного кода, артефактов и выходных данных, используемых в выполнении.
Выполнение шага
Агент выполняет шаги последовательно. Прежде чем шаг может начаться, все предыдущие шаги должны быть завершены или пропущены.
Шаги реализуются задачами, которые могут быть Node.js, PowerShell или других скриптов. Система задач направляет входные и выходные данные в скрипты резервного копирования. Задачи также предоставляют общие службы, такие как изменение системного пути и создание новых переменных конвейера.
Каждый шаг выполняется в собственном процессе, изолируя среду от предыдущих шагов. Из-за этой модели на шаг переменные среды не сохраняются между шагами. Однако задачи и скрипты могут использовать механизм, называемый командами ведения журнала, для обратного взаимодействия с агентом. Когда задача или скрипт записывает команду ведения журнала в стандартные выходные данные, агент выполняет все действия, выполняемые командой.
Для создания переменных конвейера можно использовать команду ведения журнала. Переменные конвейера автоматически преобразуются в переменные среды на следующем шаге. Скрипт может задать новую переменную myVar
со следующим значением myValue
:
echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"
Отчеты и сбор результатов
Каждый шаг может сообщать о предупреждениях, ошибках и сбоях. Шаг сообщает об ошибках и предупреждениях на странице сводки конвейера, помечая задачи как успешные с проблемами или сообщает о сбоях, помечая задачу как сбой. Шаг завершается ошибкой, если он либо явным образом сообщает о сбое ##vso
с помощью команды, либо заканчивается скриптом ненулевого кода выхода.
По мере выполнения действий агент постоянно отправляет выходные строки в Azure Pipelines, чтобы увидеть динамический веб-канал консоли. В конце каждого шага все выходные данные из шага передаются в виде файла журнала. Журнал можно скачать после завершения конвейера.
Агент также может отправлять артефакты и результаты теста, которые также доступны после завершения конвейера.
Состояние и условия
Агент отслеживает успешность или сбой каждого шага. По мере успешного выполнения действий с проблемами или сбоем состояние задания обновляется. Задание всегда отражает худший результат каждого из его шагов. Если шаг завершается ошибкой, задание также завершается ошибкой.
Перед выполнением шага агент проверяет условие этого шага, чтобы определить, должен ли выполниться шаг. По умолчанию шаг выполняется только в том случае, если состояние задания выполнено успешно или успешно с проблемами, но можно задать другие условия.
Многие задания имеют шаги очистки, которые должны выполняться независимо от того, что происходит, поэтому они могут указать условие always()
. Очистка или другие действия также можно настроить для выполнения только при отмене.
Шаг успешной очистки не может сохранить задание от сбоя. Задания никогда не могут вернуться к успешному выполнению после ввода отказа.
Время ожидания и отключения
Каждое задание имеет время ожидания. Если задание не завершено в указанное время, сервер отменяет задание. Сервер пытается сообщить агенту остановиться и помечает задание как отмененное. На стороне агента отмена означает отмену всех оставшихся шагов и отправку оставшихся результатов.
Задания имеют льготный период, называемый временем ожидания отмены, в котором выполняется любая работа по отмене. Вы также можете пометить шаги для выполнения даже при отмене. После истечения времени ожидания задания и времени ожидания отмены, если агент не сообщает об остановке работы, сервер помечает задание как сбой.
Компьютеры агентов могут перестать отвечать на сервер, если хост-компьютер агента теряет мощность или отключается, или если произошел сбой сети. Чтобы помочь обнаружить эти условия, агент отправляет сообщение пульса один раз в минуту, чтобы сообщить серверу, что он по-прежнему работает.
Если сервер не получает пульс в течение пяти последовательных минут, он предполагает, что агент не возвращается. Задание помечается как сбой, позволяя пользователю знать, что он должен повторить конвейер.
Управление запуском с помощью интерфейса командной строки Azure DevOps
Вы можете управлять выполнением конвейера с помощью az pipelines, выполняемого в Azure DevOps CLI. Сведения о начале работы см. в статье "Начало работы с Azure DevOps CLI". Полный справочник по команде см . в справочнике по команде Azure DevOps CLI.
В следующих примерах показано, как использовать Интерфейс командной строки Azure DevOps для перечисления запусков конвейера в проекте, просмотра сведений о конкретном запуске и управления тегами для выполнения конвейера.
Необходимые компоненты
- Azure CLI с расширением Azure DevOps CLI, установленным, как описано в статье "Начало работы с Azure DevOps CLI". Войдите в Azure с помощью
az login
. - Организация по умолчанию, заданная с помощью
az devops configure --defaults organization=<YourOrganizationURL>
.
Вывод списка запусков конвейера
Перечислите выполнение конвейера в проекте с помощью команды az pipelines list .
Следующая команда содержит список первых трех запусков конвейера с состоянием завершения и результатом успешного выполнения и возвращает результат в формате таблицы.
az pipelines runs list --status completed --result succeeded --top 3 --output table
Run ID Number Status Result Pipeline ID Pipeline Name Source Branch Queued Time Reason
-------- ---------- --------- --------- ------------- -------------------------- --------------- -------------------------- ------
125 20200124.1 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 18:56:10.067588 manual
123 20200123.2 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 11:55:56.633450 manual
122 20200123.1 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 11:48:05.574742 manual
Отображение сведений о выполнении конвейера
Отображение сведений о выполнении конвейера в проекте с помощью команды az pipelines show .
Следующая команда содержит сведения о выполнении конвейера с идентификатором 123, возвращает результаты в формате таблицы и открывает веб-браузер на странице результатов сборки Azure Pipelines.
az pipelines runs show --id 122 --open --output table
Run ID Number Status Result Pipeline ID Pipeline Name Source Branch Queued Time Reason
-------- ---------- --------- --------- ------------- -------------------------- --------------- -------------------------- --------
123 20200123.2 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 11:55:56.633450 manual
Добавление тега к выполнению конвейера
Добавьте тег в запуск конвейера в проекте с помощью команды добавления тега az pipelines.
Следующая команда добавляет тег YAML в конвейер выполнения с идентификатором 123 и возвращает результат в формате JSON.
az pipelines runs tag add --run-id 123 --tags YAML --output json
[
"YAML"
]
Вывод списка тегов запуска конвейера
Вывод списка тегов для запуска конвейера в проекте с помощью команды az pipelines выполняет команду списка тегов. Следующая команда содержит теги для запуска конвейера с идентификатором 123 и возвращает результат в формате таблицы.
az pipelines runs tag list --run-id 123 --output table
Tags
------
YAML
Удаление тега из запуска конвейера
Удалите тег из конвейера, выполняемого в проекте, с помощью команды az pipelines выполняет команду delete тега. Следующая команда удаляет тег YAML из конвейера с идентификатором 123.
az pipelines runs tag delete --run-id 123 --tag YAML