发布管道

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

注意

在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。

注意

本文介绍经典发布管道。 如果要使用 YAML 创作 CI/CD 管道,请参阅创建第一个管道

Azure Pipelines 中的发布管道可帮助你的团队以更快的速度将软件持续交付给客户,同时降低风险 。 可在直到生产的多个阶段中完全实现软件测试和交付自动化。 或者,还可以通过审批和按需部署来设置半自动化流程 。

Release pipeline overview

请参阅 Azure Pipelines 中的发布来了解发布和部署,并观看以下视频来了解发布管道的实际运行。

发布管道的工作方式是什么?

发布管道在 Azure Pipelines 中存储管道、阶段、任务、发布和部署的数据。

Azure release pipeline components

Azure Pipelines 在每个部署过程中运行以下步骤:

  1. 部署前审批:触发新的部署请求时,Azure Pipelines 在将发布部署到某个阶段之前,会检查是否需要部署前审批。 如果需要,它会向相应的审批者发送电子邮件通知。

  2. 队列部署作业:Azure Pipelines 在可用的自动化代理上计划部署作业。 代理是指可运行部署中的任务的软件。

  3. 代理选择:自动化代理会选取作业。 发布管道的代理与 Azure Pipelines 中运行生成的代理是完全相同的。 发布管道可包含用于在运行时选择适当代理的设置。

  4. 下载项目:如果未选择跳过下载,代理会下载该发布中指定的所有项目。 代理当前理解两种类型的项目:Azure Pipelines 项目和 Jenkins 项目。

  5. 运行部署任务:代理随后运行部署作业中的所有任务,以将应用部署到某个阶段的目标服务器。

  6. 生成进度日志:代理在运行部署时为每个步骤创建详细日志,并将这些日志推送回 Azure Pipelines。

  7. 部署后审批:完成到某个阶段的部署后,Azure Pipelines 会检查该阶段是否需要部署后审批。 如果不需要审批,或是完成所需批准后,Azure Pipelines 会继续触发到下一阶段的部署。

发布管道和生成管道具有不同的 UI。 管道的主要区别在于针对不同类型触发器的发布管道中的支持,以及对审批和入口的支持。

如何使用发布管道?

通过为应用程序创作发布管道,即可开始使用 Azure Pipelines 发布。 若要创作发布管道,必须指定构成应用程序和发布管道的项目

“项目”是应用程序的可部署组件。 项目通常通过持续集成或生成管道而生成。 Azure Pipelines 发布可以部署各种项目源生成的项目。 例如 Azure Pipelines 生成、Jenkins 或 Team City。

使用阶段定义发布管道,并使用审批将部署限制到阶段之内或之外。 使用作业任务定义每个阶段的自动化。 使用变量来通用化自动化,使用触发器控制何时应自动启动部署。

请参阅以下示例,了解可通过发布管道建模的发布管道:

release definition

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

请参阅以下示例,了解如何在一个阶段内对部署自动化进行建模:

deployment definition

在此示例中,作业用于以并行方式将应用部署到世界各地的生产环 1 中的网站。 所有这些部署均成功后,将使用另一个作业将流量从以前的版本切换到较新的版本。

下一篇:

查看以下文章,了解如何:

什么是草稿发布?

Azure Pipelines 中已弃用草稿发布,因为可在创建发布时更改变量。

创建草稿发布后将可编辑发布和任务的某些设置,具体取决于你在开始部署之前的角色权限。 更改将仅应用于该发布,不会影响原始管道的设置。

使用发布列表中的“…”省略号链接创建草稿发布:

Create a draft release in the list of releases

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

Create a draft release in the pipeline definition page

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

Start a draft release

创建发布时,如何指定要编辑的变量?

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

Specifying variables to be edited when a release is created and queued

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

Editing variables when a release is created and queued

如何集成和报告发布状态?

通过发布管道集成,可以将部署状态报告给多个源,例如存储库主机、工作项(链接或部署)或 Jira 问题。

若要配置发布管道集成,请选择“选项”选项卡,然后从发布管道定义中选择“集成”。

Screenshot showing how to access release integrations in your release pipeline.

将部署状态报告到存储库主机

如果你的源代码在 Azure Repos 中,选择此选项将在 Azure Repos 页面上显示状态徽章。 该徽章指示特定提交的部署位置以及部署是通过还是失败。 默认情况下,将为发布管道的所有阶段发布部署状态。 也可以选择要显示部署状态的特定阶段。

部署状态显示在 Azure Repos 的下列区域中:

  • 文件:指示所选分支的最新部署的状态。

    Screenshot showing the pipeline status for Files.

  • 提交:指示每个提交的部署状态(需要启用持续集成触发器)。

    Screenshot showing the pipeline status for Commits.

  • 分支:指示每个分支的最新部署的状态。

    Screenshot showing the pipeline status for Branches.

注意

如果源代码不在 Azure Repos 中,则可以使用“启用部署状态徽章”功能在外部存储库中显示部署状态。

将部署状态报告给 Work

如果要将发布管道链接到工作项,请选择此选项。 部署状态将显示在工作项的“链接”选项卡中。

Screenshot showing linked releases in the task tab of a work item.

将部署状态报告给 Boards

如果要将发布管道链接到工作项,并在工作项的“详细信息”选项卡中显示部署状态,请选择此选项。

Screenshot showing linked releases in the details tab of a work item.

启用部署状态徽章

如果想在外部网站上显示部署状态,请选择此选项。 你可以复制阶段徽章,并将其添加到你的网站,以可视化形式显示部署状态:

  1. 选择“启用部署状态徽章”。

  2. 选择要显示其状态的阶段。 默认情况下,所有阶段都会被选中。

  3. 复制徽章 URL 并将其添加到你的网站或 GitHub 自述文件以显示部署状态。

    Screenshot showing the release status badge.

将部署状态报告给 Jira

如果要将发布管道链接到 Jira 问题,请选择此选项。 必须安装适用于 Jira 的 Azure Pipelines,并将 Azure DevOps 组织与 Jira 帐户连接。 有关更多详细信息,请查看 Jira 集成教程。

何时应编辑发布,而不是编辑定义它的管道?

可以编辑以前部署的发布的审批、任务和变量。 执行此操作,而不是在创建发布的管道中编辑这些值。 但这些编辑操作仅会应用于重新部署项目时生成的发布。 如果希望将编辑操作应用于所有将来的发布和部署,请选择该选项以改为编辑发布管道。

何时以及因何原因应放弃发布?

创建发布后,可以将项目重新部署到该发布中定义的任何阶段。 如果想要进行定期手动发布,或者设置一个持续集成阶段触发器来使用此发布重新部署项目,此做法非常有用。

如果不打算重复使用该发布,或者想阻止将其用于重新部署项目,可以使用快捷菜单放弃发布,可通过管道的“管道”视图中的省略号 (…) 图标打开该快捷菜单 。

Abandoning a release

无法在部署正在进行时放弃发布,必须先取消部署。

如何通过电子邮件发送发布摘要?

触发并完成发布后,你可能希望通过电子邮件将摘要发送给利益干系人。 使用从管道的管道视图中的省略号 (...) 图标打开的菜单上的“发送电子邮件”选项。

Emailing a release summary

在“发送发布摘要邮件”窗口中,通过仅选择“发布摘要”中的某些部分,可以进一步自定义电子邮件中发送的信息。

如何管理新发布的名称?

默认情况下,一个发布管道中的发布名称按顺序编号。 第一个发布命名为 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 之间的所有提交(在提交树中)。

有可能出现同一分支上没有上次已知成功生成的情况。 例如,首次在分支上运行生成时,或删除了分支上所有以前的生成时(可能是通过保留策略)。 在这些情况下,此列表可能很长。

获得提交列表后,我们将枚举与其中每个提交关联的所有工作项。 这是将在生成中看到的列表。

立即开始使用!

完成以下步骤:

  1. 设置多阶段托管发布管道

  2. 使用审批和入口管理部署