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


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

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

Задания 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. Можно указать, какую дополнительную версию использовать, указав полный номер версии задачи после @, например [email protected].

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

Для шагов конвейера 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 если предыдущий шаг завершился ошибкой из-за его успешного состоянияOrFailed .

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, если она еще не включена в агент. Скрипт командной строки записывает установленную версию в командную строку.

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