经典发布管道

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

经典发布管道为开发人员提供了一个框架,用于高效安全地将应用程序部署到多个环境。 使用经典的发布管道,可以自动化测试和部署流程、设置灵活的部署策略、合并审批工作流程,并确保应用程序在各个阶段平滑过渡。

发布管道的工作方式

Azure Pipelines 会在每次部署中执行以下步骤:

  1. 部署前审批

    触发新的部署请求时,Azure Pipelines 会在将版本部署到某个阶段之前验证是否需要预部署审批。 如果需要,它会向相关的审批者发送电子邮件通知。

  2. 将部署作业加入队列

    Azure Pipelines 在可用的代理上安排部署作业。

  3. 代理选择

    可用的代理会选取部署作业。 可以将发布管道配置为在运行时动态选择合适的代理。

  4. 下载项目

    代理将检索并下载发布中指定的所有项目。

  5. 运行部署任务

    代理将执行部署作业中的所有任务。

  6. 生成进度日志

    代理将为每个部署步骤生成全面的日志,并将其发送回 Azure Pipelines。

  7. 部署后审批

    部署到某个阶段后,Azure Pipelines 将验证该特定阶段是否需要部署后审批。 如果不需要审批,或者获得所需的审批后,它将继续启动到下一阶段的部署。

显示 Azure Pipelines 中的部署步骤的屏幕截图。

部署模型

Azure 发布管道支持各种项目源,包括 Jenkins、Azure Artifacts 和 Team City。 以下示例演示了使用 Azure 发布管道的部署模型:

在以下示例中,管道由两个源自独立生成管道的生成工件组成。 该应用程序首先部署到“开发”阶段,然后部署到两个独立的 QA 阶段。 如果两个 QA 阶段的部署均成功,应用程序将先部署到生产环 1,然后部署到生产环 2。 每个生产环代表同一 Web 应用部署在世界各地不同位置的多个实例。

显示发布管道部署步骤的屏幕截图。

版本与部署

发布是一个构造,用于保存 CI/CD 管道中指定的一组已进行版本控制的工件。 它包括在发布管道中执行所有任务和操作所需的所有信息的快照,例如阶段、任务、策略(如触发器和审批者),以及部署选项。 一个发布管道可以有多个发布,有关每个发布的信息都会在指定的保留期内存储并显示在 Azure Pipelines 中。

部署是为一个阶段运行任务的操作,其中可能包括运行自动化测试、部署生成工件,以及为该阶段指定的任何其他操作。 启动发布后,将根据原始发布管道中定义的设置和策略启动每个部署。 即使只针对一个阶段,每个发布也可以有多个部署。 如果某个阶段的发布部署失败,可以针对该阶段重新部署同一个发布。 若要重新部署发布,只需导航到要部署的版本并选择“部署”。

下图显示了发布、发布管道和部署之间的关系。

说明发布和部署之间的差异的关系图。

常见问题解答

问:为什么我的部署未触发?

答:创建发布管道不会自动启动部署。 下面是可能发生这种情况的几个原因:

  • 部署触发器:定义的部署触发器可能会导致部署暂停。 这可能发生在计划触发器中,或者在部署到另一个阶段之前出现延迟的情况。

  • 队列策略:这些策略决定了执行顺序,以及发布排队进行部署的时间。

  • 预部署审批或入口:特定阶段可能需要预先部署审批或入口,防止部署,直到满足所有定义的条件。

问:如何在发布时编辑变量?

答:在发布管道的“变量”选项卡中,针对要在发布加入队列后编辑的变量选择“在发布时可设置”选项。

显示如何启用可在发布时设置功能的屏幕截图。

随后,在生成最新发布时,可以修改这些变量的值。

屏幕截图显示如何在发布时编辑变量。

问:何时更适合修改版本而不是定义它的管道?

答:你可以编辑发布实例的审批、任务和变量。 但是,这些编辑将仅适用于该实例。 如果希望更改应用到所有将来的发布,需改为编辑发布管道。

问:“放弃发布”功能适用于哪些应用场景?

答:如果不打算重复使用该发布,或者想要阻止它被使用,可以按如下所示放弃发布:“管道> (...)”>“放弃”。 无法在部署正在进行时放弃发布,必须先取消部署。

屏幕截图显示如何放弃发布。

问:如何管理最新发布的名称?

答:版本管道的默认命名约定是按顺序编号,其中版本被命名为 Release-1Release-2 等。 但是,可以通过修改版本名称格式掩码来灵活地自定义命名方案。 在发布管道的“选项”选项卡中,导航到“常规”页面并调整“发布名称格式”属性以适合的偏好设置。

指定格式掩码时,可以使用以下预定义变量。 示例:以下发布名称格式:Release $(Rev:rrr) for build $(Build.BuildNumber) $(Build.DefinitionName) 将会创建以下发布:Release 002 for build 20170213.2 MySampleAppBuild.

变量 说明
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 或其他项目源未设置此变量。
自定义变量 在发布管道中定义的全局配置属性的值。 可以使用发布日志记录命令,用自定义变量更新发布名称

问:如何指定发布的保持期?

答:请参阅保留策略,了解如何为发布管道设置保留策略。