经典发布管道
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
经典发布管道为开发人员提供了一个框架,用于高效安全地将应用程序部署到多个环境。 使用经典的发布管道,可以自动化测试和部署流程、设置灵活的部署策略、合并审批工作流程,并确保应用程序在各个阶段平滑过渡。
发布管道的工作方式
Azure Pipelines 会在每次部署中执行以下步骤:
部署前审批:
触发新的部署请求时,Azure Pipelines 会在将版本部署到某个阶段之前验证是否需要预部署审批。 如果需要,它会向相关的审批者发送电子邮件通知。
将部署作业加入队列:
Azure Pipelines 在可用的代理上安排部署作业。
代理选择:
可用的代理会选取部署作业。 可以将发布管道配置为在运行时动态选择合适的代理。
下载项目:
代理将检索并下载发布中指定的所有项目。
运行部署任务:
代理将执行部署作业中的所有任务。
生成进度日志:
代理将为每个部署步骤生成全面的日志,并将其发送回 Azure Pipelines。
部署后审批:
部署到某个阶段后,Azure Pipelines 将验证该特定阶段是否需要部署后审批。 如果不需要审批,或者获得所需的审批后,它将继续启动到下一阶段的部署。
部署模型
Azure 发布管道支持各种项目源,包括 Jenkins、Azure Artifacts 和 Team City。 以下示例演示了使用 Azure 发布管道的部署模型:
在以下示例中,管道由两个源自独立生成管道的生成工件组成。 该应用程序首先部署到“开发”阶段,然后部署到两个独立的 QA 阶段。 如果两个 QA 阶段的部署均成功,应用程序将先部署到生产环 1,然后部署到生产环 2。 每个生产环代表同一 Web 应用部署在世界各地不同位置的多个实例。
版本与部署
发布是一个构造,用于保存 CI/CD 管道中指定的一组已进行版本控制的工件。 它包括在发布管道中执行所有任务和操作所需的所有信息的快照,例如阶段、任务、策略(如触发器和审批者),以及部署选项。 一个发布管道可以有多个发布,有关每个发布的信息都会在指定的保留期内存储并显示在 Azure Pipelines 中。
部署是为一个阶段运行任务的操作,其中可能包括运行自动化测试、部署生成工件,以及为该阶段指定的任何其他操作。 启动发布后,将根据原始发布管道中定义的设置和策略启动每个部署。 即使只针对一个阶段,每个发布也可以有多个部署。 如果某个阶段的发布部署失败,可以针对该阶段重新部署同一个发布。 若要重新部署发布,只需导航到要部署的版本并选择“部署”。
下图显示了发布、发布管道和部署之间的关系。
常见问题解答
问:为什么我的部署未触发?
答:创建发布管道不会自动启动部署。 下面是可能发生这种情况的几个原因:
部署触发器:定义的部署触发器可能会导致部署暂停。 这可能发生在计划触发器中,或者在部署到另一个阶段之前出现延迟的情况。
队列策略:这些策略决定了执行顺序,以及发布排队进行部署的时间。
预部署审批或入口:特定阶段可能需要预先部署审批或入口,防止部署,直到满足所有定义的条件。
问:如何在发布时编辑变量?
答:在发布管道的“变量”选项卡中,针对要在发布加入队列后编辑的变量选择“在发布时可设置”选项。
随后,在生成最新发布时,可以修改这些变量的值。
问:何时更适合修改版本而不是定义它的管道?
答:你可以编辑发布实例的审批、任务和变量。 但是,这些编辑将仅适用于该实例。 如果希望更改应用到所有将来的发布,需改为编辑发布管道。
问:“放弃发布”功能适用于哪些应用场景?
答:如果不打算重复使用该发布,或者想要阻止它被使用,可以按如下所示放弃发布:“管道> (...)”>“放弃”。 无法在部署正在进行时放弃发布,必须先取消部署。
问:如何管理最新发布的名称?
答:版本管道的默认命名约定是按顺序编号,其中版本被命名为 Release-1、Release-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 或其他项目源未设置此变量。 |
自定义变量 | 在发布管道中定义的全局配置属性的值。 可以使用发布日志记录命令,用自定义变量更新发布名称 |
问:如何指定发布的保持期?
答:请参阅保留策略,了解如何为发布管道设置保留策略。