发布管道
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
注意
在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。
注意
本文介绍经典发布管道。 如果要使用 YAML 创作 CI/CD 管道,请参阅创建第一个管道。
Azure Pipelines 中的发布管道可帮助你的团队以更快的速度将软件持续交付给客户,同时降低风险 。 可在直到生产的多个阶段中完全实现软件测试和交付自动化。 或者,还可以通过审批和按需部署来设置半自动化流程 。

请参阅 Azure Pipelines 中的发布来了解发布和部署,并观看以下视频来了解发布管道的实际运行。
发布管道的工作方式是什么?
发布管道在 Azure Pipelines 中存储管道、阶段、任务、发布和部署的数据。

Azure Pipelines 在每个部署过程中运行以下步骤:
部署前审批:触发新的部署请求时,Azure Pipelines 在将发布部署到某个阶段之前,会检查是否需要部署前审批。 如果需要,它会向相应的审批者发送电子邮件通知。
队列部署作业:Azure Pipelines 在可用的自动化代理上计划部署作业。 代理是指可运行部署中的任务的软件。
代理选择:自动化代理会选取作业。 发布管道的代理与 Azure Pipelines 中运行生成的代理是完全相同的。 发布管道可包含用于在运行时选择适当代理的设置。
下载项目:如果未选择跳过下载,代理会下载该发布中指定的所有项目。 代理当前理解两种类型的项目:Azure Pipelines 项目和 Jenkins 项目。
运行部署任务:代理随后运行部署作业中的所有任务,以将应用部署到某个阶段的目标服务器。
生成进度日志:代理在运行部署时为每个步骤创建详细日志,并将这些日志推送回 Azure Pipelines。
部署后审批:完成到某个阶段的部署后,Azure Pipelines 会检查该阶段是否需要部署后审批。 如果不需要审批,或是完成所需批准后,Azure Pipelines 会继续触发到下一阶段的部署。
发布管道和生成管道具有不同的 UI。 管道的主要区别在于针对不同类型触发器的发布管道中的支持,以及对审批和入口的支持。
如何使用发布管道?
通过为应用程序创作发布管道,即可开始使用 Azure Pipelines 发布。 若要创作发布管道,必须指定构成应用程序和发布管道的项目。
“项目”是应用程序的可部署组件。 项目通常通过持续集成或生成管道而生成。 Azure Pipelines 发布可以部署各种项目源生成的项目。 例如 Azure Pipelines 生成、Jenkins 或 Team City。
使用阶段定义发布管道,并使用审批将部署限制到阶段之内或之外。 使用作业和任务定义每个阶段的自动化。 使用变量来通用化自动化,使用触发器控制何时应自动启动部署。
请参阅以下示例,了解可通过发布管道建模的发布管道:

在此示例中,通过收集来自不同生成管道的两个生成(项目)的特定版本来创建网站的发布。 该发布首先部署到开发阶段,然后并行分支到两个 QA 阶段。 如果两个 QA 阶段的部署均成功,则发布将先部署到生产环 1,然后部署到生产环 2。 每个生产环代表在世界各地的不同位置部署的同一网站的多个实例。
请参阅以下示例,了解如何在一个阶段内对部署自动化进行建模:

在此示例中,作业用于以并行方式将应用部署到世界各地的生产环 1 中的网站。 所有这些部署均成功后,将使用另一个作业将流量从以前的版本切换到较新的版本。
下一篇:
查看以下文章,了解如何:
什么是草稿发布?
Azure Pipelines 中已弃用草稿发布,因为可在创建发布时更改变量。
创建草稿发布后将可编辑发布和任务的某些设置,具体取决于你在开始部署之前的角色权限。 更改将仅应用于该发布,不会影响原始管道的设置。
使用发布列表中的“…”省略号链接创建草稿发布:

…或通过管道定义页的“发布”下拉菜单进行创建:

编辑完草稿发布后,从草稿发布工具栏中选择“启动”。

创建发布时,如何指定要编辑的变量?
添加新变量时,如果发布已创建且已排队,在发布管道的“变量”选项卡中,为要编辑的变量设置“在发布时可设置” 。

之后,可在创建新发布时编辑这些变量的值。

如何集成和报告发布状态?
通过发布管道集成,可以将部署状态报告给多个源,例如存储库主机、工作项(链接或部署)或 Jira 问题。
若要配置发布管道集成,请选择“选项”选项卡,然后从发布管道定义中选择“集成”。
将部署状态报告到存储库主机
如果你的源代码在 Azure Repos 中,选择此选项将在 Azure Repos 页面上显示状态徽章。 该徽章指示特定提交的部署位置以及部署是通过还是失败。 默认情况下,将为发布管道的所有阶段发布部署状态。 也可以选择要显示部署状态的特定阶段。
部署状态显示在 Azure Repos 的下列区域中:
文件:指示所选分支的最新部署的状态。
提交:指示每个提交的部署状态(需要启用持续集成触发器)。
分支:指示每个分支的最新部署的状态。
注意
如果源代码不在 Azure Repos 中,则可以使用“启用部署状态徽章”功能在外部存储库中显示部署状态。
将部署状态报告给 Work
如果要将发布管道链接到工作项,请选择此选项。 部署状态将显示在工作项的“链接”选项卡中。
将部署状态报告给 Boards
如果要将发布管道链接到工作项,并在工作项的“详细信息”选项卡中显示部署状态,请选择此选项。
启用部署状态徽章
如果想在外部网站上显示部署状态,请选择此选项。 你可以复制阶段徽章,并将其添加到你的网站,以可视化形式显示部署状态:
选择“启用部署状态徽章”。
选择要显示其状态的阶段。 默认情况下,所有阶段都会被选中。
复制徽章 URL 并将其添加到你的网站或 GitHub 自述文件以显示部署状态。
将部署状态报告给 Jira
如果要将发布管道链接到 Jira 问题,请选择此选项。 必须安装适用于 Jira 的 Azure Pipelines,并将 Azure DevOps 组织与 Jira 帐户连接。 有关更多详细信息,请查看 Jira 集成教程。
何时应编辑发布,而不是编辑定义它的管道?
可以编辑以前部署的发布的审批、任务和变量。 执行此操作,而不是在创建发布的管道中编辑这些值。 但这些编辑操作仅会应用于重新部署项目时生成的发布。 如果希望将编辑操作应用于所有将来的发布和部署,请选择该选项以改为编辑发布管道。
何时以及因何原因应放弃发布?
创建发布后,可以将项目重新部署到该发布中定义的任何阶段。 如果想要进行定期手动发布,或者设置一个持续集成阶段触发器来使用此发布重新部署项目,此做法非常有用。
如果不打算重复使用该发布,或者想阻止将其用于重新部署项目,可以使用快捷菜单放弃发布,可通过管道的“管道”视图中的省略号 (…) 图标打开该快捷菜单 。

无法在部署正在进行时放弃发布,必须先取消部署。
如何通过电子邮件发送发布摘要?
触发并完成发布后,你可能希望通过电子邮件将摘要发送给利益干系人。 使用从管道的管道视图中的省略号 (...) 图标打开的菜单上的“发送电子邮件”选项。

在“发送发布摘要邮件”窗口中,通过仅选择“发布摘要”中的某些部分,可以进一步自定义电子邮件中发送的信息。
如何管理新发布的名称?
默认情况下,一个发布管道中的发布名称按顺序编号。 第一个发布命名为 Release-1,下一个发布为 Release-2,依此类推 。 可以通过编辑发布名称格式掩码来更改此命名方案。 在发布管道的“选项”选项卡中,编辑“常规”页中的“发布名称格式”属性 。
指定格式掩码时,可以使用以下预定义变量。
| 变量 | 描述 |
|---|---|
| Rev: rr | 至少具有指定位数的自动递增数字。 |
| Date / Date: MMddyy | 当前日期,默认格式为 MMddyy。 支持 M/MM/MMM/MMMM、d/dd/ddd/dddd、y/yy/yyyy/yyyy、h/hh/H/HH、m/mm、s/ss 的任意组合。 |
| System.TeamProject | 生成所属的项目的名称。 |
| Release.ReleaseId | 发布的 ID,在该项目的所有发布中唯一。 |
| Release.DefinitionName | 当前发布所属的发布管道的名称。 |
| Build.BuildNumber | 发布中包含的生成的编号。 如果发布有多个生成,则它是主生成的编号。 |
| Build.DefinitionName | 发布中包含的生成的管道名称。 如果发布有多个生成,则它是主生成的管道名称。 |
| Artifact.ArtifactType | 与发布关联的项目源的类型。 例如,这可以是 Azure Pipelines 或 Jenkins 。 |
| Build.SourceBranch | 主项目源的分支。 对于 Git,如果分支是 refs/heads/main,则其形式为 main 。 对于 Team Foundation 版本控制,如果工作区的根服务器路径为 $/teamproject/branch,则其形式为 branch 。 Jenkins 或其他项目源未设置此变量。 |
| 自定义变量 | 在发布管道中定义的全局配置属性的值。 可以使用发布日志记录命令,用自定义变量更新发布名称 |
例如,采用发布名称格式 Release $(Rev:rrr) for build $(Build.BuildNumber) $(Build.DefinitionName) 将创建名称类似于“生成 20170213.2 MySampleAppBuild 的发布 002”的发布。
如何指定发布的保留期?
可以自定义必须保留此管道的发布的时长。 有关详细信息,请参阅发布保留。
如何使用和管理发布历史记录?
每次保存发布管道时,Azure Pipelines 都会保留更改的副本。 此副本可用于在以后对比更改,尤其是在调试部署故障时。
如何设置为自动链接生成中的新工作?
在工作项与生成/发布之间建立可跟踪性时,需完成以下两个方面的任务:
- 列出生成中新生成的工作项。 可以在查看生成实例时找到此类工作项。
- 列出内置此工作项的生成。 可以在工作项表单的“开发”部分中找到该列表。 “自动链接此生成中的新工作”设置对于计算第一个项目符号项的方式没有影响。 它仅影响计算第二个项目符号项的方式。
生成的第一个项目符号的计算如下所示:例如,假设你启动了新的生成。 无论设置如何,我们都计算生成的新提交列表。 我们执行下列任务:
- 找到现在正在生成的提交 c2。
- 找到在同一分支 (Build.SourceBranch) 的上一次成功生成中生成的提交 c1。
- 找到 c1 和 c2 之间的所有提交(在提交树中)。
有可能出现同一分支上没有上次已知成功生成的情况。 例如,首次在分支上运行生成时,或删除了分支上所有以前的生成时(可能是通过保留策略)。 在这些情况下,此列表可能很长。
获得提交列表后,我们将枚举与其中每个提交关联的所有工作项。 这是将在生成中看到的列表。
立即开始使用!
完成以下步骤: