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

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

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

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

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

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

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

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

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

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

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

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

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

steps:
- task: myPublisherId.myExtensionId.myContributionId.myTaskName@1 #format example
- task: qetza.replacetokens.replacetokens-task.replacetokens@3 #working example

Чтобы найти myPublisherId и myExtensionIdвыбрать команду "Получить на задаче" в Marketplace. Значения после itemName строки URL-адреса и myPublisherIdmyExtensionId. Вы также можете найти полное имя, добавив задачу в конвейер выпуска и выбрав просмотр YAML при редактировании задачи.

Версии задач

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

При выпуске новой дополнительной версии (например, 1.2–1.3) конвейер автоматически использует новую версию. Однако если выпущена новая основная версия (например, 2.0), конвейер продолжает использовать основную версию, указанную до тех пор, пока не измените конвейер и вручную не измените новую основную версию. Журнал будет содержать предупреждение о доступности новой основной версии.

Можно задать, какую дополнительную версию используется, указав полный номер версии задачи после @ знака (например: GoTool@0.3.1). Вы можете использовать только версии задач, которые существуют для вашей организации.

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

steps:
- task: PublishTestResults@2

Конвейеры YAML недоступны в TFS.

Параметры управления задачами

Каждая задача предлагает некоторые параметры управления.

Параметры управления доступны в качестве ключей в task разделе.

- task: string # Required as first property. Name of the task to run.
  inputs: # Inputs for the task.
    string: string # Name/value pairs
  condition: string # Evaluate this condition expression to determine whether to run this task.
  continueOnError: boolean # Continue running even on failure?
  displayName: string # Human-readable name for the task.
  enabled: boolean # Run this task when the job runs?
  env: # Variables to map into the process's environment.
    string: string # Name/value pairs
  name: string # ID of the step.
  timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.

Параметры управления доступны в качестве ключей в task разделе.

- task: string # Required as first property. Name of the task to run.
  inputs: # Inputs for the task.
    string: string # Name/value pairs
  condition: string # Evaluate this condition expression to determine whether to run this task.
  continueOnError: boolean # Continue running even on failure?
  displayName: string # Human-readable name for the task.
  target: string | target # Environment in which to run this task.
  enabled: boolean # Run this task when the job runs?
  env: # Variables to map into the process's environment.
    string: string # Name/value pairs
  name: string # ID of the step.
  timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.
  retryCountOnTaskFailure: string # Number of retries if the task fails.

Параметры управления доступны в качестве ключей в task разделе.

- task: string # Required as first property. Name of the task to run.
  inputs: # Inputs for the task.
    string: string # Name/value pairs
  condition: string # Evaluate this condition expression to determine whether to run this task.
  continueOnError: boolean # Continue running even on failure?
  displayName: string # Human-readable name for the task.
  target: string | target # Environment in which to run this task.
  enabled: boolean # Run this task when the job runs?
  env: # Variables to map into the process's environment.
    string: string # Name/value pairs
  name: string # ID of the step.
  timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.
  retryCountOnTaskFailure: string # Number of retries if the task fails.

Примечание.

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

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

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

Примечание.

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

В этом YAML выполняется, PublishTestResults@2 даже если предыдущий шаг завершается ошибкой из-за успешного условияOrFailed().

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

Условия

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

  • Даже если предыдущая зависимость не завершилась ошибкой, если выполнение не было отменено. Используйте succeededOrFailed() в YAML для этого условия.

  • Даже если предыдущая зависимость завершилась ошибкой, даже если выполнение было отменено. Используйте always() в YAML для этого условия.

  • Только при сбое предыдущей зависимости. Используйте failed() в YAML для этого условия.

Целевой объект шага

Задачи выполняются в контексте выполнения, который является узлом агента или контейнером. Отдельный шаг может переопределить его контекст, указав параметр target. Доступные варианты — это слово host , предназначенное для узла агента, а также всех контейнеров, определенных в конвейере. Например:

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

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

SampleTask Здесь выполняется на узле и AnotherTask выполняется в контейнере.

Количество повторов, если задача завершилась сбоем

Используется retryCountOnTaskFailure для указания количества повторных попыток, если задача завершается ошибкой. По умолчанию используется значение 0. Дополнительные сведения о свойствах задачи см . в разделе steps.task в схеме YAML.

- task: <name of task>
  retryCountOnTaskFailure: <max number of retries>
   ...

Примечание.

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

Конвейеры YAML недоступны в TFS.

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

Каждая задача имеет env свойство, которое является списком строковых пар, представляющих переменные среды, сопоставленные с процессом задачи.

task: AzureCLI@2
displayName: Azure CLI
inputs: # Specific to each task
env:
  ENV_VARIABLE_NAME: value
  ENV_VARIABLE_NAME2: value
  ...

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

# Using the script shortcut syntax
- script: az pipelines variable-group list --output table
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
  displayName: 'List variable groups using the script step'

# Using the task syntax
- task: CmdLine@2
  inputs:
    script: az pipelines variable-group list --output table
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
  displayName: 'List variable groups using the command line task'

Установщики средств сборки (Azure Pipelines)

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

  • Установите средство или среду выполнения на лету (даже в размещенных майкрософт агентах) только вовремя для сборки CI.

  • Проверьте приложение или библиотеку в нескольких версиях зависимости, например Node.js.

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

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

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

pool:
  vmImage: ubuntu-latest

steps:
# Node install
- task: UseNode@1
  displayName: Node install
  inputs:
    version: '16.x' # The version we're installing
# Write the installed version to the command line
- script: which node

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

Конвейеры YAML недоступны в TFS.

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

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

Отключение встроенных задач и задач Marketplace

На странице параметров организации можно отключить задачи Marketplace, встроенные задачи или оба варианта. Отключение задач Marketplace может помочь повысить безопасность конвейеров. Если вы отключаете как встроенные, так и задачи Marketplace, доступны только те задачи, которые tfx вы устанавливаете.

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