任务类型 使用情况
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
注意
在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。
任务是在管道中定义自动化的构建基块。 任务只是使用一组输入抽象的打包脚本或过程。
将任务添加到管道时,它还可能会向管道添加一组 需求 。 要求定义必须在 代理 上安装的必备组件才能运行任务。 运行生成或部署时,将选择满足这些需求的代理。
运行 作业时,所有任务都按顺序运行,一个接一个。 若要在多个代理上并行运行同一组任务,或者在不使用代理的情况下运行某些任务,请参阅 作业。
默认情况下,所有任务都在同一上下文中运行,无论是在 主机上 还是在 作业容器中。 可以选择使用 步骤目标 来控制单个任务的上下文。
详细了解如何使用 内置任务指定任务的属性。
自定义任务
我们提供一些 内置任务 来启用基本的生成和部署方案。 我们还提供了 创建自己的自定义任务的指南。
此外,Visual Studio市场提供了许多扩展;每个扩展在安装到订阅或集合时,都会使用一个或多个任务扩展任务目录。 此外,可以编写自己的自定义扩展,将任务添加到Azure Pipelines或 TFS。
在 YAML 管道中,按名称引用任务。 如果名称同时与内置任务和自定义任务匹配,则即用任务优先。 可以使用自定义任务的任务 GUID 或完全限定的名称来避免此风险:
steps:
- task: myPublisherId.myExtensionId.myContributionId.myTaskName@1 #format example
- task: qetza.replacetokens.replacetokens-task.replacetokens@3 #working example
若要查找 myPublisherId 并选择 myExtensionId“ 获取 ”市场中的任务。 URL 字符串中的 itemName 值和 myPublisherIdmyExtensionId。 还可以通过在编辑任务时将任务添加到 发布管道 并选择 “查看 YAML ”来查找完全限定的名称。
任务版本
任务已进行版本控制,必须指定管道中使用的任务的主版本。 这有助于防止发布新版本的任务时出现问题。 任务通常向后兼容,但在某些情况下,在自动更新任务时可能会遇到不可预知的错误。
(发布新的次要版本(例如 1.2 到 1.3) )时,生成或发布将自动使用新版本。 但是,如果 (发布新的主版本(例如 2.0) ),则生成或发布将继续使用指定的主版本,直到编辑管道并手动更改为新的主版本。 生成或发布日志将包含一个警报,指出有新的主版本可用。
可以通过在签名 (示例后 @ 指定任务的完整版本号来设置使用哪个次要版本: GoTool@0.3.1) 。 只能使用 组织存在的任务版本。
在 YAML 中,使用任务名称指定主版本 @ 。
例如,若要固定到任务的版本 2 PublishTestResults ,
steps:
- task: PublishTestResults@2
TFS 中不提供 YAML 管道。
任务控件选项
每个任务都提供一些 控制选项。
控件选项作为节上的 task 键提供。
- task: string # reference to a task and version, e.g. "VSBuild@1"
condition: expression # see below
continueOnError: boolean # 'true' if future steps should run even if this step fails; defaults to 'false'
enabled: boolean # whether or not to run this step; defaults to 'true'
timeoutInMinutes: number # how long to wait before timing out the task
控件选项作为节上的 task 键提供。
- task: string # reference to a task and version, e.g. "VSBuild@1"
condition: expression # see below
continueOnError: boolean # 'true' if future steps should run even if this step fails; defaults to 'false'
enabled: boolean # whether or not to run this step; defaults to 'true'
timeoutInMinutes: number # how long to wait before timing out the task
target: string # 'host' or the name of a container resource to target
控件选项作为节上的 task 键提供。
- task: string # reference to a task and version, e.g. "VSBuild@1"
condition: expression # see below
continueOnError: boolean # 'true' if future steps should run even if this step fails; defaults to 'false'
enabled: boolean # whether or not to run this step; defaults to 'true'
retryCountOnTaskFailure: number # Max number of retries; default is zero
timeoutInMinutes: number # how long to wait before timing out the task
target: string # 'host' or the name of a container resource to target
注意
给定的任务或作业不能单方面决定作业/阶段是否继续。 它可以执行的操作是提供 成功 或 失败的状态,下游任务/作业都有一个条件计算,允许他们决定是否运行。 如果处于成功状态,则有效运行的默认条件。
继续错误 会以微妙的方式更改这一点。 它有效地“欺骗”所有下游步骤/作业,将任何结果视为“成功”,以便做出该决定。 或者说另一种方式,它说“当你决定包含结构的条件时,不要考虑此任务的失败”。
超时期限从任务开始运行时开始。 它不包括任务排队或正在等待代理的时间。
在此 YAML 中, PublishTestResults@2 即使上一步由于 成功OrFailed () 条件而失败,也会运行。
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.7'
architecture: 'x64'
- task: PublishTestResults@2
inputs:
testResultsFiles: "**/TEST-*.xml"
condition: succeededOrFailed()
条件
仅当具有相同代理池的所有以前的依赖项都成功时。 如果你有不同的代理池,这些阶段或作业将同时运行。 如果 YAML 中没有条件集,则这是默认值。
即使以前的依赖项失败,除非运行已取消。 在此
succeededOrFailed()条件的 YAML 中使用。即使以前的依赖项失败,即使运行已取消。 在此
always()条件的 YAML 中使用。仅当以前的依赖项失败时。 在此
failed()条件的 YAML 中使用。
步骤目标
任务在执行上下文中运行,该上下文是代理主机或容器。
单个步骤可以通过指定 a target.
可用选项是面向代理主机以及管道中定义的任何容器的单词 host 。
例如:
resources:
containers:
- container: pycontainer
image: python:3.8
steps:
- task: SampleTask@1
target: host
- task: AnotherTask@1
target: pycontainer
在这里,在 SampleTask 主机上运行并在 AnotherTask 容器中运行。
如果任务失败,重试次数
用于 retryCountOnTaskFailure 指定任务失败时的重试次数。 默认值为零。
- task: <name of task>
retryCountOnTaskFailure: <max number of retries>
...
注意
- 需要代理版本 2.194.0 或更高版本。 不支持无代理任务。
- 将立即重试失败的任务。
- 没有关于任务的幂等性的假设。 例如,如果任务 (有副作用,如果它) 部分创建了外部资源,则它可能会在第二次运行时失败。
- 没有有关任务可用的重试计数的信息。
- 将警告添加到任务日志中,指示在重试之前失败。
- 重试任务的所有尝试都显示在 UI 中,作为同一任务节点的一部分。
TFS 中不提供 YAML 管道。
环境变量
Azure DevOps Server 2019 及更高版本支持 YAML 管道。
每个任务都有一个 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)
工具安装程序使生成管道能够安装和控制依赖项。 具体而言,您可以:
(实时安装工具或运行时,即使在 Microsoft 托管的代理 上) 恰时进行 CI 生成。
针对多个版本的依赖项(例如Node.js)验证应用或库。
例如,可以设置生成管道来运行和验证应用的多个版本的Node.js。
示例:在多个版本的 Node.js 上测试和验证应用
在项目的基目录中创建包含以下内容的 azure-pipelines.yml 文件。
pool:
vmImage: 'Ubuntu 16.04'
steps:
# Node install
- task: NodeTool@0
displayName: Node install
inputs:
versionSpec: '6.x' # The version we're installing
# Write the installed version to the command line
- script: which node
创建新的生成管道 并运行它。 观察生成是如何运行的。 Node.js工具安装程序下载Node.js版本(如果尚未在代理上)。 命令行脚本记录磁盘上Node.js版本的位置。
TFS 中不提供 YAML 管道。
工具安装程序任务
有关工具安装程序任务的列表,请参阅 工具安装程序任务。
相关文章
帮助和支持
- 请查看疑难解答页面
- 在 Stack Overflow 上获取建议,还可随时在 Azure DevOps 开发者社区发布问题、搜索答案或提供功能建议。 支持页面。

工具:Node.js安装程序
实用工具:命令行