从 XAML 生成迁移到新生成
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
注意
在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。
我们在 Team Foundation Server (TFS) 2010 中引入了基于 Windows Workflow Foundation 的 XAML 生成自动化功能。 我们在 TFS 2013 中发布了另一个版本的 XAML 版本 。
之后,我们试图超越 .NET 和Windows,并添加对基于 macOS 和 Linux 等操作系统的其他应用的支持。 很明显,我们需要为生成自动化引擎切换到更开放、更灵活、基于 Web 的基础。 在 2015 年初,Azure Pipelines,然后在 TFS 2015 中,我们引入了更简单的任务和脚本驱动的跨平台生成系统。
由于系统是如此不同,因此没有将 XAML 生成管道迁移到新生成管道的自动化或常规方法。 迁移过程是手动创建新的生成管道,以复制 XAML 生成执行的操作。
如果要构建标准 .NET 应用程序,则可能使用现成提供的默认模板。 在这种情况下,该过程应相当容易。
如果已自定义 XAML 模板或添加了自定义任务,则还需要执行其他步骤,包括编写脚本、安装扩展或创建自定义任务。
迁移工作概述
下面是从 XAML 生成迁移到较新版本的步骤:
如果使用专用 TFS 服务器, 请设置代理 以运行生成。
若要熟悉新的生成系统,请创建 “Hello world”生成管道。
创建一个新的生成管道,用于替换其中一个 XAML 生成管道。
创建新的生成管道。
移植 XAML 设置。
在 “常规”选项卡上,禁用 XAML 生成管道。
对每个 XAML 生成管道重复上述两个步骤。
利用新的生成功能,详细了解可以构建的应用类型。
了解如何自定义并在必要时扩展系统。
不再需要 XAML 生成中的历史记录和项目时,请删除 XAML 生成,然后删除 XAML 生成管道。
警告
删除 XAML 生成和管道后,无法将其恢复。
创建新的生成管道
如果要生成标准 .NET 应用,则可能使用的是现成的生成模板之一,例如 TfvcTemplate.12.xaml 或 GitTemplate.12.xaml。 在这种情况下,可能只需单击几下即可在新生成系统中创建生成管道。
在 Web 浏览器中打开项目
(如果主页上未列出项目,请选择 “Browse.)
- 本地 TFS:
http://{your_server}:8080/tfs/DefaultCollection/{your_project} - Azure Pipelines:
https://dev.azure.com/{your_organization}/{your_project}
- 本地 TFS:
创建生成管道 (Pipelines选项卡>“生成”)
- 选择要将常用任务添加到生成管道的模板。
- 对生成管道进行任何必要的更改,以复制 XAML 生成管道。 模板添加的任务在许多情况下应正常工作。 但是,如果更改了 XAML 生成管道中的进程参数或其他设置,下面是一些指针,可帮助你开始复制这些更改。
移植 XAML 设置
在以下每个部分中,我们将显示 XAML 用户界面,然后提供指向可以将设置移植到新生成管道的位置的指针。
“常规”选项卡

| XAML 设置 | TFS 2017 等效项 | Azure Pipelines和 TFS 2018 及较新的等效项 |
|---|---|---|
| 生成管道名称 | 只要保存管道,就可以更改它。 | 编辑管道时:在 “任务 ”选项卡上,在左窗格中单击“ 管道”,“ 名称 ”字段显示在右窗格中。 在 “生成 中心” (“挖掘 ”或“ 所有管道 ”选项卡) 中,打开操作菜单,然后选择“ 重命名”。 |
| 描述(可选) | 不支持。 | 不支持。 |
| 队列处理 | 尚不支持。 作为部分替代方法,请禁用触发器。 | 尚不支持。 作为替代方法,请禁用触发器。 |
“源设置”选项卡
TFVC

| XAML 设置 | TFS 2017 和较新的等效项 | Azure Pipelines等效项 |
|---|---|---|
| “源设置”选项卡 | 在“ 存储库 ”选项卡上,将活动路径指定为 映射 ,将隐藏路径指定为 Cloak。 | 在“ 任务 ”选项卡上,在左窗格中单击“ 获取源”。 将活动路径指定为 映射 的工作区映射,将隐藏路径指定为 Cloak。 |
新的生成管道提供了一些新选项。 你将看到的特定额外选项取决于使用 TFS 或Azure Pipelines的版本。 如果使用Azure Pipelines,请先确保显示高级设置。 请参阅 生成 TFVC 存储库。
Git

| XAML 设置 | TFS 2017 和较新的等效项 | Azure Pipelines等效项 |
|---|---|---|
| “源设置”选项卡 | 在“ 存储库 ”选项卡上指定存储库和默认分支。 | 在“ 任务 ”选项卡上,在左窗格中单击“ 获取源”。 指定存储库和默认分支。 |
新的生成管道提供了一些新选项。 你将看到的特定额外选项取决于使用 TFS 或Azure Pipelines的版本。 如果使用Azure Pipelines,请先确保显示高级设置。 请参阅 Git 存储库的管道选项。
“触发器”选项卡

| XAML 设置 | TFS 2017 及更新版本,Azure Pipelines等效项 |
|---|---|
| “触发器”选项卡 | 在 “触发器 ”选项卡上,选择要使用的触发器:CI、计划或封闭。 |
新的生成管道提供了一些新选项。 例如:
可以创建更少的生成管道来替换大量 XAML 生成管道。 这是因为可以使用具有多个触发器的单个新生成管道。 如果使用Azure Pipelines,则可以添加多个计划时间。
“滚动生成”选项将替换为“批处理更改”选项。 不能指定生成之间的最短时间。 但是,如果使用Azure Pipelines,则可以指定每个分支的最大并行作业数。
如果代码位于 TFVC 中,则可以添加文件夹路径筛选器,以包含或排除某些文件集以触发 CI 生成。
如果代码位于 TFVC 中,并且使用的是封闭签入触发器,则可以选择同时运行 CI 生成。 还可以使用与存储库设置相同的工作区映射,或指定不同的映射。
如果代码位于 Git 中,则直接在 “触发器 ”选项卡上指定分支筛选器。你可以添加文件夹路径筛选器,以包含或排除某些文件集,以触发 CI 生成。
你将看到的特定额外选项取决于使用 TFS 或Azure Pipelines的版本。 请参阅 生成管道触发器
即使自 上一个生成选项以来没有任何更改 ,我们也不支持生成。
“生成默认值”选项卡

| XAML 进程参数 | TFS 2017 和较新的等效项 | Azure Pipelines等效项 |
|---|---|---|
| 生成控制器 | 在 “常规 ”选项卡上,选择默认代理池。 | 在 “选项” 选项卡上,选择默认代理池。 |
| 暂存位置 | 在“任务”选项卡上,指定复制文件和发布生成Artifacts任务的参数。 请参阅 生成项目。 | 在“任务”选项卡上,指定复制文件和发布生成Artifacts任务的参数。 请参阅 生成项目。 |
新的生成管道提供了一些新选项。 例如:
“处理”选项卡
TF 版本控制

| XAML 进程参数 | TFS 2017 和较新的等效项 | Azure Pipelines等效项 |
|---|---|---|
| 清理工作区 | 在 “存储库 ”选项卡上,打开“ 清理 ”菜单,然后选择 true。 | 在“ 任务 ”选项卡上的左窗格中,单击“ 获取源”。 显示 “高级”设置,然后选择“ 清理”。 (我们计划将此选项移出高级设置。) |
| 获取版本 | 不能在生成管道中指定更改集,但可以在手动排队生成时指定一个更改集。 | 不能在生成管道中指定更改集,但可以在手动排队生成时指定一个更改集。 |
| 标签源 | 在 “存储库 ”选项卡上,从 “标签源” 菜单中选择一个选项。 | “任务 ”选项卡,在左窗格中单击“ 获取源”。 选择其中一个 标记源 选项。 (我们计划将此名称更改为 Label sources.) |
新的生成管道提供了一些新选项。 请参阅 生成 TFVC 存储库。
Git

| XAML 进程参数 | TFS 2017 和较新的等效项 | Azure Pipelines等效项 |
|---|---|---|
| 清理存储库 | “存储库 ”选项卡,打开“ 清理 ”菜单,选择 true。 | 在“ 任务 ”选项卡上的左窗格中,单击“ 获取源”。 显示 “高级设置”,然后选择“ 清理”。 (我们计划将此选项移出高级设置。) |
| 签出替代 | 无法在生成管道中指定提交,但可以在手动排队生成时指定提交。 | 无法在生成管道中指定提交,但可以在手动排队生成时指定提交。 |
新的生成管道提供了一些新选项。 请参阅 Git 存储库的管道选项。
生成

在“生成”选项卡上 (TFS 2017 和较新的) 或“任务”选项卡 (Azure Pipelines) ,选择Visual Studio生成任务后,你将看到等效于 XAML 生成参数的参数。
| XAML 进程参数 | TFS 2017 及较新,Azure Pipelines等效参数 |
|---|---|
| 项目 | 解决方案 |
| 配置 | 平台、配置。 请参阅Visual Studio生成:如何实现为多个平台生成多个配置? |
| 清理生成 | clean |
| 输出位置 | Visual Studio生成任务生成和输出文件的方式与在本地工作区中的开发计算机上执行相同的操作。 我们让你完全控制从代理上的本地工作区发布项目。 请参阅Azure Pipelines中的Artifacts。 |
| 高级、MSBuild参数 | MSBuild参数 |
| 高级、MSBuild平台 | 高级、MSBuild体系结构 |
| 高级,执行代码分析 | 使用MSBuild参数,例如/p:RunCodeAnalysis=true |
| 高级、后期和预生成脚本 | 可以通过添加 PowerShell、Batch 和命令任务的一个或多个实例,在生成管道中的任何点运行一个或多个脚本。 例如,请参阅 使用 PowerShell 脚本自定义生成管道。 |
重要
在Visual Studio生成参数的“Visual Studio版本”菜单上,确保选择所使用的Visual Studio版本。
新的生成管道提供了一些新选项。 请参阅Visual Studio生成。
了解详细信息:Visual Studio生成任务 (用于生成解决方案) ,MSBuild用于生成单个项目的任务 () 。
测试

发布符号

| XAML 进程参数 | TFS 2017 及更新版本,Azure Pipelines等效项 |
|---|---|
| 发布符号的路径 | 单击“发布符号”任务,然后将路径复制到 Path 中以发布符号 参数。 |
高级

| XAML 进程参数 | TFS 2017 和较新的等效项 | Azure Pipelines等效项 |
|---|---|---|
| 代理执行时间上限 | 无 | 在“ 选项 ”选项卡上,可以指定 “生成作业超时”(以分钟为单位)。 |
| 最大代理预留等待时间 | 无 | 无 |
| 名称筛选器、标记比较运算符、标记筛选器 | 生成管道断言与代理功能匹配的要求。 请参阅 代理功能。 | 生成管道断言与代理功能匹配的要求。 请参阅 代理功能。 |
| 内部版本号格式 | 在“ 常规 ”选项卡上,将内部版本号格式复制到 “内部版本号格式 ”字段中。 | 在“ 常规 ”选项卡上,将内部版本号格式复制到 “内部版本号格式 ”字段中。 |
| 在失败时创建工作项 | 在“ 选项 ”选项卡上,选中此复选框。 | 在“ 选项 ”选项卡上,启用此选项。 |
| 使用内部版本号更新工作项 | 无 | 在“ 选项 ”选项卡上,可以启用 在此版本中自动链接新工作。 |
新的生成管道提供了一些新选项。 请参阅:
“保留策略”选项卡

| XAML 进程参数 | TFS 2017 及更新版本,Azure Pipelines等效项 |
|---|---|
| “保留策略”选项卡 | 在“ 保留 期”选项卡上指定要实现的策略。 |
新的生成管道提供了一些新选项。 请参阅 生成和发布保留策略。
生成和发布不同类型的应用
在 XAML 版本中,必须创建自己的自定义模板来生成不同类型的应用。 在新生成系统中,可以从一组预定义模板中进行选择。 Azure Pipelines和最新版本的 TFS 中提供了最大和最新的模板集。
生成
下面是可以构建的应用类型的几个示例:
生成 ASP.NET Core应用
发布
新的生成系统与Azure Pipelines紧密集成。 因此,在成功生成后,可以更轻松地自动启动部署。 了解详细信息:
一些示例包括:
其他应用和任务
有关可以生成和部署的应用的更多示例,请参阅 生成和部署应用。
有关生成、测试和部署任务的完整列表,请参阅 生成和发布任务。
自定义任务
在 XAML 版本中,你创建了自定义 XAML 任务。 在新版本中,有一系列选项,从更轻松、更轻的方法开始。
从市场获取任务
Visual Studio市场提供了数百个扩展,你可以安装这些扩展来添加扩展生成和部署功能的任务。
编写脚本
新生成系统的一个主要功能是强调使用脚本自定义生成管道。 可以使用以下任一方法将脚本签入版本控制并自定义生成:
- PowerShell 脚本 (Windows)
- 批处理脚本 (Windows)
- 命令提示符
- (macOS 和 Linux) Shell 脚本
提示
如果使用的是 TFS 2017 或更高版本,可以直接在生成管道中编写短 PowerShell 脚本。
TFS 2017 或更高版本内联 PowerShell 脚本
对于所有这些任务,我们提供了一组内置变量,如有必要,可以定义自己的变量。 请参阅 生成变量。
编写自定义任务
如有必要,可以将自己的 自定义扩展 写入生成和版本的 自定义任务 。
重复使用模式
在 XAML 版本中,你创建了自定义 XAML 模板。 在新版本中,创建可重用模式更容易。
创建模板
如果看不到应用类型的模板,可以从空管道开始 并添加所需的任务。 获得喜欢的模式后,可以直接在 Web 浏览器中克隆或将其另存为模板。 请参阅 创建第一个管道。
任务组 (TFS 2017 或更高版本)
在 XAML 版本中,如果更改模板,则还会根据模板更改所有管道的行为。 在新生成系统中,模板无法正常工作。 相反,模板的行为是传统的模板。 创建生成管道后,对模板的后续更改不会影响生成管道。
如果要创建可重用且自动更新的逻辑片段,请 创建一个任务组。 然后,可以在一个位置修改任务组,并导致使用该任务组的所有管道自动更改。
常见问题解答
我看不到 XAML 生成。 我该怎么办?
XAML 生成已弃用。 强烈建议你按照上述说明迁移到新版本。
如果尚未准备好迁移,则必须将 XAML 生成控制器连接到组织,才能启用 XAML 生成。 请参阅 配置和管理生成系统。
如果尚未准备好迁移,请启用 XAML 生成:
安装 TFS 2018.2。
连接 XAML 生成服务器到 TFS 实例。 请参阅 配置和管理生成系统。
如何实现向生成管道添加条件逻辑?
尽管新的生成管道本质上是线性的,但我们确实可以控制任务运行的条件。
在 TFS 2015 及更新版上:可以选择“已启用”、“继续出错”或“始终运行”。
在Azure Pipelines,可以指定四个内置选项之一,以控制任务何时运行。 如果需要更多控制,可以指定自定义条件。 例如:
and(failed(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'), startsWith(variables['Build.SourceBranch'], 'refs/heads/features/'))
请参阅 指定运行任务的条件。