Типы задач и использование задач
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-адреса и myPublisherId
myExtensionId
. Вы также можете найти полное имя, добавив задачу в конвейер выпуска и выбрав просмотр 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.
Параметры управления доступны в качестве ключей в 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
для указания количества повторных попыток, если задача завершается ошибкой. Значение по умолчанию равно нулю повторных попыток. Дополнительные сведения о свойствах задачи см . в разделе steps.task в схеме YAML.
- task: <name of task>
retryCountOnTaskFailure: <max number of retries>
...
Примечание.
- Требуется агент версии 2.194.0 или более поздней. В Azure DevOps Server 2022 повторные попытки не поддерживаются для задач без агента. Дополнительные сведения см. в обновлении службы Azure DevOps 16 ноября 2021 г. — автоматическое повторение для задачи и обновление службы Azure DevOps 14 июня 2025 г. — повторная попытка для задач сервера.
- Время ожидания между каждой повторной попыткой увеличивается после каждой неудачной попытки. Первая повторная попытка происходит в секундах.
- Нет предположений об идемпотентности задачи. Если задача имеет побочные эффекты (например, если она частично создала внешний ресурс), она может завершиться сбоем во второй раз при запуске.
- Нет сведений о количестве повторных попыток, доступных для задачи.
- Предупреждение добавляется в журналы задач, указывающее, что он завершился сбоем перед повторным выполнением.
- Все попытки повторить задачу отображаются в пользовательском интерфейсе в составе одного узла задачи.
Конвейеры 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'
- task: Bash@3
inputs:
targetType: # specific to each task
env:
ENV_VARIABLE_NAME: value
ENV_VARIABLE_NAME2: value
...
В следующем примере выполняется script
шаг, который является ярлыком для Bash@3, а затем эквивалентным синтаксисом задачи. В этом примере присваивается значение переменной ENV_VARIABLE_NAME
среды и выполняется эхо значения.
# Using the script shortcut syntax
- script: echo "This is " $ENV_VARIABLE_NAME
env:
ENV_VARIABLE_NAME: "my value"
displayName: 'echo environment variable'
# Using the task syntax
- task: Bash@2
inputs:
script: echo "This is " $ENV_VARIABLE_NAME
env:
ENV_VARIABLE_NAME: "my value"
displayName: 'echo environment variable'
Установщики средств сборки (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
вы устанавливаете.
Связанные статьи
Справка и поддержка
- Ознакомьтесь с советами по устранению неполадок.
- Получите советы по Stack Overflow.
- Опубликуйте свои вопросы, найдите ответы или предложите функцию в Сообщество разработчиков Azure DevOps.
- Получите поддержку Azure DevOps.