Поделиться через


Типы задач и использование

Сервисы Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Задания Azure Pipelines состоят из шагов, которые могут быть задачами или скриптами. Задача — это предварительно упаковаированный скрипт или процедура, которая выполняет действие или использует набор входных данных для определения автоматизации конвейера. В этой статье описываются задачи конвейера и их использование. Сведения о схеме см. в определении steps.task .

Azure Pipelines включает множество встроенных задач, которые позволяют выполнять основные сценарии сборки и развертывания. Список доступных встроенных задач Azure Pipelines см. в справочнике по задачам Azure Pipelines. Вы также можете установить задачи из Visual Studio Marketplace или создать пользовательские задачи.

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

Управление задачами

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

Вы можете отключить встроенные задачи, задачи Marketplace или оба параметра в Настройках организации>Настройках конвейеров> в разделе Ограничения задач. Если отключить встроенные и marketplace задачи, доступны только задачи, устанавливаемые с помощью интерфейса командной строки Node для Azure DevOps .

Отключение задач Marketplace может помочь улучшить безопасность конвейера. В большинстве случаев вы не должны отключать встроенные задачи. Дополнительные сведения см. в разделе "Управление доступными задачами".

Пользовательские задачи

Visual Studio Marketplace предлагает множество расширений, которые можно установить для расширения каталога задач Azure Pipelines. Вы также можете создавать пользовательские задачи. Для получения дополнительной информации см. статью "Добавление расширения для задачи настраиваемых конвейеров".

В конвейерах YAML вы ссылаетесь на задачи по их имени. Если имя настраиваемой задачи соответствует встроенному имени задачи, конвейер использует встроенную задачу. Чтобы избежать этой ситуации, вы можете ссылаться на настраиваемую задачу с помощью уникального GUID задачи, назначенного при создании задачи. Дополнительные сведения см. в разделе "Общие сведения о компонентах task.json".

Версии задач

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

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

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

В YAML укажите основную версию с помощью @ имени задачи. Например, чтобы использовать версию PublishTestResults 2 задачи, укажите PublishTestResults@2. Можно указать, какую дополнительную версию использовать, указав полный номер версии задачи после @, например GoTool@0.3.1.

Параметры задачи

Для шагов конвейера task YAML доступны следующие свойства. Дополнительные сведения см. в определении steps.task .

Недвижимость Тип Description
task струна Обязательный в качестве первого свойства. Имя выполняемой задачи.
inputs струна Входные данные для задачи в виде пар "имя-значение".
condition струна Условия выполнения задачи.
continueOnError булевый Следует ли продолжать работать даже при сбое.
displayName струна Имя, доступное для чтения человеком для задачи.
enabled булевый Следует ли запускать эту задачу при выполнении задания.
env струна Переменные для сопоставления с средой процесса с помощью пар name/value.
name струна Идентификатор шага.
retryCountOnTaskFailure струна Число повторных попыток, если задача завершается ошибкой.
target струна Среда, в которой можно выполнить эту работу.
timeoutInMinutes струна Максимальное время, в течение которого задача может выполняться до автоматической отмены.

Условия

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

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

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

Примечание.

Условия применяются ко всем предыдущим прямым и косвенным зависимостям с одинаковым пулом агентов. Этапы или задания в разных пулах агентов выполняются одновременно.

Условия, основанные на предыдущем состоянии зависимости, включают:

  • Выполнено: запустите только в том случае, если все предыдущие зависимости выполнены успешно. Это поведение по умолчанию, если условие не задано в YAML. Чтобы применить это условие, укажите condition: succeeded().
  • Выполнено успешно или завершилось сбоем: запуск, даже если предыдущая зависимость завершается ошибкой, если выполнение не отменено. Чтобы применить это условие, укажите condition: succeededOrFailed().
  • Всегда: запуск, даже если предыдущая зависимость завершается ошибкой, даже если выполнение отменено. Чтобы применить это условие, укажите condition: always().
  • Сбой. Запуск выполняется только в том случае, если предыдущая зависимость завершается ошибкой. Чтобы применить это условие, укажите condition: failed().

В следующем примере YAML PublishTestResults@2 выполняется даже в том случае, если предыдущий шаг завершился успехом или ошибкой, благодаря условию succeededOrFailed.

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.x'
    architecture: 'x64'
- task: PublishTestResults@2
  inputs:
    testResultsFiles: "**/TEST-*.xml"
  condition: succeededOrFailed()

Продолжить выполнение при ошибке

Свойство continueOnError сообщает задаче, следует ли продолжать выполнение и сообщать об успешном выполнении независимо от сбоев. Если задано значение true, это свойство сообщает задаче игнорировать failed состояние и продолжить выполнение. Подчиненные шаги и задания обрабатывают результат задачи как success при принятии решений о запуске.

Включен

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

Количество повторных попыток при сбое задачи

Свойство retryCountOnTaskFailure задает количество повторов задачи, если она завершается ошибкой. Значение по умолчанию равно нулю повторных попыток.

  • Максимально допустимое число повторных попыток — 10.
  • Время ожидания перед повтором увеличивается после каждой неудачной попытки, следуя экспоненциальной стратегии отката. Первая повторная попытка происходит через 1 секунду, вторую повторную попытку через 4 секунды и десятую повторную попытку после 100 секунд.
  • Повторная попытка задачи не обеспечивает идемпотентность. Побочные эффекты первой попытки, такие как частичное создание внешнего ресурса, могут привести к сбою повторных попыток.
  • К задаче не предоставляется информация о количестве повторных попыток.
  • Сбой задачи добавляет предупреждение в журналы задач, указывающее, что она завершилась сбоем перед повтором задачи.
  • Все попытки повторных попыток отображаются в пользовательском интерфейсе в составе одного узла задачи.

Примечание.

Для retryCountOnTaskFailure этого свойства требуется агент версии 2.194.0 или более поздней. В Azure DevOps Server 2022 повторные попытки не поддерживаются для задач без агента. Дополнительные сведения см. в обновлении службы Azure DevOps от 16 ноября 2021 г. — автоматический повтор для задачи и обновлении службы Azure DevOps от 14 июня 2025 г. — повторные попытки для серверных задач.

Цель

Задачи выполняются в контексте выполнения, который является узлом агента или контейнером. Задача может переопределить его контекст, указав параметр target. Доступные параметры — это host, чтобы настроить узел агента, и любые контейнеры, определенные в конвейере. В следующем примере SampleTask@1 выполняется на узле и AnotherTask@1 выполняется в контейнере.

resources:
  containers:
  - container: pycontainer
    image: python:3.11

steps:
- task: SampleTask@1
  target: host
- task: AnotherTask@1
  target: pycontainer

Время ожидания

Период времени ожидания начинается при запуске задачи и не включает время, когда задача находится в очереди или ожидает агента.

Примечание.

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

Переменные среды

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

Задача конвейера YAML может указать env свойство, в котором перечислены строки имени и значения, представляющие средовые переменные.

- task: AzureCLI@2
  env:
    ENV_VARIABLE_NAME: value
    ENV_VARIABLE_NAME2: value
  ...

Переменные среды можно задать с помощью шагов script или с помощью скриптов в командной строке, задачах Bash или PowerShell.

В следующем примере выполняется шаг script, который присваивает значение переменной среды ENV_VARIABLE_NAME и выводит значение.

- script: echo "This is " $ENV_VARIABLE_NAME
  env:
    ENV_VARIABLE_NAME: value
  displayName: 'echo environment variable'

Предыдущий сценарий функционально совпадает с выполнением задачи Bash@3 с входными данными script . В следующем примере используется task синтаксис.

- task: Bash@3
  inputs:
    script: echo "This is " $ENV_VARIABLE_NAME
  env:
    ENV_VARIABLE_NAME: value
  displayName: 'echo environment variable'

Задачи установщика средств сборки

Задачи установщика средств сборки позволяют конвейеру сборки устанавливать и управлять зависимостями. Задачи установщика средств сборки можно использовать для:

За список задач установщика инструментов см. в разделе "Задачи инструментов".

Пример. Тестирование и проверка приложения на нескольких версиях Node.js

В следующем примере настраивается конвейер сборки для запуска и проверки приложения в нескольких версиях Node.js.

Создайте файл azure-pipelines.yml , имеющий следующее содержимое в базовом каталоге проекта.

pool:
  vmImage: 'windows-latest'

jobs:
- job: NodeJS
  strategy:
    matrix:
      node14:
        nodeVersion: '14.x'
      node16:
        nodeVersion: '16.x'
    maxParallel: 2
  steps:
    - task: NodeTool@0
      displayName: 'Install Node.js $(nodeVersion)'
      inputs:
        versionSpec: '$(nodeVersion)'
        checkLatest: true

    - script: |
        echo Using Node version $(nodeVersion)
        node --version
      displayName: 'Verify Node Installation'

Сохраните и запустите конвейер. Задание выполняется дважды, по одному для каждой версии Node.js, указанной в переменной nodeVersion .

Установщик инструментов Node.js скачивает версию Node.js, если она еще не включена в агент. Скрипт командной строки записывает установленную версию в командную строку.

Справка и поддержка