Последовательность выполнения конвейера

Azure DevOps Services | Azure DevOps Server 2022 г. - Azure DevOps Server 2019 г.

Запуски представляют одно выполнение конвейера. Во время выполнения конвейер обрабатывается, а агенты обрабатывают одно или несколько заданий. Выполнение конвейера включает задания, шаги и задачи. Запускает конвейеры непрерывной интеграции (CI) и непрерывной поставки (CD).

Обзор конвейера

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

На стороне агента для каждого задания агент будет:

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

Давайте разберем каждое действие по одному.

Обработка конвейера

Развертывание шаблонов YAML

Чтобы превратить конвейер в выполнение, Azure Pipelines выполняет несколько шагов в следующем порядке:

  1. Сначала разверните шаблоны и оцените выражения шаблонов.
  2. Затем оцените зависимости на уровне этапа , чтобы выбрать первый этап для выполнения.
  3. Для каждого этапа, выбранного для выполнения, происходят две вещи:
  4. Для каждого задания, выбранного для выполнения, разверните несколько конфигураций (strategy: matrix или strategy: parallel в YAML) в несколько заданий среды выполнения.
  5. Для каждого задания среды выполнения оцените условия , чтобы решить, подходит ли это задание для выполнения.
  6. Запросите агент для каждого подходящего задания среды выполнения.

По завершении заданий среды выполнения Azure Pipelines будет видеть, есть ли новые задания, которые могут выполняться. Если это так, шаги 4–6 повторяют с новыми заданиями. Аналогичным образом, по мере завершения этапов шаги 2–6 будут повторяться для всех новых этапов.

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

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

Запрос агента

Всякий раз, когда Azure Pipelines требуется выполнить задание, он запрашивает у пулаагент. (Задания сервера являются исключением, так как они выполняются на самом сервере Azure Pipelines.) Пулы агентов , размещенные в Майкрософт и локальные , работают немного иначе.

Запросы пула агентов, размещенных в Майкрософт

Сначала служба проверяет параллельные задания вашей организации. Он суммирует все выполняемые задания на всех агентах, размещенных в Майкрософт, и сравнивает их с количеством приобретенных параллельных заданий. Если доступных параллельных слотов нет, задание придется дождаться слота, чтобы освободиться.

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

Выбор пула

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

Запросы пула локальных агентов

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

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

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

Подготовка к выполнению задания

После того как агент принял задание, ему нужно выполнить некоторые подготовительные работы. Агент скачивает (и кэширует для следующего раза) все задачи , необходимые для запуска задания. Он создает рабочее пространство на диске для хранения исходного кода, артефактов и выходных данных, используемых в выполнении. Затем начинается выполнение шагов.

Выполнение каждого шага

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

Выполнение каждой задачи

Шаги реализуются задачами. Сами задачи реализуются в виде Node.js или сценариев PowerShell. Система задач направляет входные и выходные данные в резервные скрипты. Он также предоставляет некоторые общие службы, такие как изменение системного пути и создание новых переменных конвейера.

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

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

echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"

Создание отчетов и сбор результатов

Каждый шаг может сообщать о предупреждениях, ошибках и сбоях. Сообщения об ошибках и предупреждениях передаются на страницу сводки конвейера, помечая задачу как "выполненную с проблемами". Сбои также передаются на страницу сводки, но они помечают задачу как "сбой". Шаг является ошибкой, если он либо явным образом сообщает о сбое (с помощью ##vso команды), либо завершает скрипт с ненулевым кодом выхода.

Поток журналов и результатов от агента к службе

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

Состояние и условия

Агент отслеживает успешность или неудачу каждого шага. По мере успешного выполнения шагов с проблемами или сбоя состояние задания будет обновлено. Задание всегда отражает "худший" результат каждого из его шагов: если шаг завершается сбоем, задание также завершается сбоем.

Перед выполнением шага агент проверка условие этого шага, чтобы определить, должен ли он выполняться. По умолчанию шаг выполняется только в том случае, если состояние задания выполнено успешно или с проблемами. Многие задания имеют шаги очистки, которые необходимо выполнять независимо от того, что еще произошло, поэтому они могут указать условие "always()". Действия по очистке также могут выполняться только при отмене. Успешный шаг очистки не может спасти задание от сбоя; Задания никогда не могут вернуться к успеху после сбоя.

Время ожидания и отключения

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

Задания имеют льготный период, известный как время ожидания отмены, в течение которого можно завершить любые работы по отмене. (Помните, что шаги можно пометить для выполнения даже при отмене.) По истечении времени ожидания плюс время ожидания отмены, если агент не сообщил о том, что работа остановлена, сервер пометит задание как сбой.

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

Управление запусками с помощью ИНТЕРФЕЙСА командной строки

С помощью Azure DevOps CLI можно получить список выполнений конвейера в проекте и просмотреть сведения о конкретном запуске. Вы также можете добавлять и удалять теги в выполнении конвейера.

Предварительные требования

  • Необходимо установить расширение Azure DevOps CLI, как описано в статье Начало работы с Azure DevOps CLI.
  • Войдите в Azure DevOps с помощью az login.
  • Для примеров в этой статье задайте организацию по умолчанию с помощью az devops configure --defaults organization=YourOrganizationURL.

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

Выведите список выполнений конвейера в проекте с помощью команды az pipelines runs list . Чтобы приступить к работе, см. статью Начало работы с Azure DevOps CLI.

az pipelines runs list [--branch]
                       [--org]
                       [--pipeline-ids]
                       [--project]
                       [--query-order {FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc, StartTimeDesc}]
                       [--reason {all, batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated, validateShelveset}]
                       [--requested-for]
                       [--result {canceled, failed, none, partiallySucceeded, succeeded}]
                       [--status {all, cancelling, completed, inProgress, none, notStarted, postponed}]
                       [--tags]
                       [--top]

Необязательные параметры

  • branch: фильтрация по сборкам для этой ветви.
  • org: URL-адрес организации Azure DevOps. Вы можете настроить организацию по умолчанию с помощью az devops configure -d organization=ORG_URL. Требуется, если не настроено по умолчанию или выбрано с помощью git config. Например, --org https://dev.azure.com/MyOrganizationName/.
  • pipeline-ids: разделенные пробелами идентификаторы определений, для которых требуется получить список сборок.
  • project: имя или идентификатор проекта. Проект по умолчанию можно настроить с помощью az devops configure -d project=NAME_OR_ID. Требуется, если не настроено по умолчанию или выбрано с помощью git config.
  • query-order: определите порядок, в котором перечислены запуски конвейера. Допустимые значения: FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc и StartTimeDesc.
  • reason: перечисление только сборок по указанной причине. Допустимые значения: batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated и validateShelveset.
  • requested-for: ограничение до сборок, запрошенных для указанного пользователя или группы.
  • result: ограничение до сборок с указанным результатом. Допустимые значения: отмена, сбой, none, partiallySucceeded и succeeded.
  • status: ограничение до сборок с указанным состоянием. Допустимые значения: все, отмена, завершение, inProgress, none, notStarted и отложенные.
  • tags: ограничьте сборками с каждым из указанных тегов. Пробелы разделены.
  • top: максимальное число сборок для перечисления.

Пример

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

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 runs show . Чтобы приступить к работе, см. статью Начало работы с Azure DevOps CLI.

az pipelines runs show --id
                       [--open]
                       [--org]
                       [--project]

Параметры

  • id: обязательный аргумент. Идентификатор выполнения конвейера.
  • open: необязательный. Открывает страницу результатов сборки в веб-браузере.
  • org: URL-адрес организации Azure DevOps. Вы можете настроить организацию по умолчанию с помощью az devops configure -d organization=ORG_URL. Требуется, если не настроено по умолчанию или выбрано с помощью git config. Например, --org https://dev.azure.com/MyOrganizationName/.
  • project: имя или идентификатор проекта. Проект по умолчанию можно настроить с помощью az devops configure -d project=NAME_OR_ID. Требуется, если не настроено по умолчанию или выбрано с помощью git config.

Пример

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

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 run tag add . Чтобы приступить к работе, см. статью Начало работы с Azure DevOps CLI.

az pipelines runs tag add --run-id
                          --tags
                          [--org]
                          [--project]

Параметры

  • run-id: обязательный аргумент. Идентификатор выполнения конвейера.
  • tags: обязательный аргумент. Теги, добавляемые в выполнение конвейера (значения, разделенные запятыми).
  • org: URL-адрес организации Azure DevOps. Вы можете настроить организацию по умолчанию с помощью az devops configure -d organization=ORG_URL. Требуется, если не настроено по умолчанию или выбрано с помощью git config. Например, --org https://dev.azure.com/MyOrganizationName/.
  • project: имя или идентификатор проекта. Проект по умолчанию можно настроить с помощью az devops configure -d project=NAME_OR_ID. Требуется, если не настроено по умолчанию или выбрано с помощью git config.

Пример

Следующая команда добавляет тег YAML в выполнение конвейера с идентификатором 123 и возвращает результат в формате JSON.

az pipelines runs tag add --run-id 123 --tags YAML --output json

[
  "YAML"
]

Вывод списка тегов выполнения конвейера

Выведите список тегов для запуска конвейера в проекте с помощью команды az pipelines run tag list . Чтобы приступить к работе, см. статью Начало работы с Azure DevOps CLI.

az pipelines runs tag list --run-id
                           [--org]
                           [--project]

Параметры

  • run-id: обязательный аргумент. Идентификатор выполнения конвейера.
  • org: URL-адрес организации Azure DevOps. Вы можете настроить организацию по умолчанию с помощью az devops configure -d organization=ORG_URL. Требуется, если не настроено по умолчанию или выбрано с помощью git config. Например, --org https://dev.azure.com/MyOrganizationName/.
  • project: имя или идентификатор проекта. Проект по умолчанию можно настроить с помощью az devops configure -d project=NAME_OR_ID. Требуется, если не настроено по умолчанию или выбрано с помощью git config.

Пример

Следующая команда выводит список тегов для выполнения конвейера с идентификатором 123 и возвращает результат в табличном формате.

az pipelines runs tag list --run-id 123 --output table

Tags
------
YAML

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

Удалите тег из конвейера, выполняемого в проекте, с помощью команды az pipelines выполняет тег delete . Сведения о начале работы см. в статье Начало работы с Azure DevOps CLI.

az pipelines runs tag delete --run-id
                             --tag
                             [--org]
                             [--project]

Параметры

  • run-id: обязательный. Идентификатор выполнения конвейера.
  • tag: обязательный аргумент. Тег для удаления из выполнения конвейера.
  • org: URL-адрес организации Azure DevOps. Вы можете настроить организацию по умолчанию с помощью az devops configure -d organization=ORG_URL. Требуется, если не настроено по умолчанию или выбрано с помощью git config. Например, --org https://dev.azure.com/MyOrganizationName/.
  • project: имя или идентификатор проекта. Проект по умолчанию можно настроить с помощью az devops configure -d project=NAME_OR_ID. Требуется, если не настроено по умолчанию или выбрано с помощью git config.

Пример

Следующая команда удаляет тег YAML из запуска конвейера с идентификатором 123.

az pipelines runs tag delete --run-id 123 --tag YAML