当相同的任务在构建管道中可用时,发布管道的目的是什么?

What is the purpose of release pipelines when the same tasks are available in build pipeline?

我正在使用 azure 构建和发布管道。我知道构建管道会产生一个可以被发布管道使用的工件,并且可以将部署组织成具有 deploy/re-deploy 阶段选项的阶段。

但是,我还注意到发布管道中可用的所有任务在构建管道中也可用。构建管道的文档还指出它可用于构建、测试和部署。那么使用发布管道到底有什么好处呢?

原则上没有。只是通常发布管道是为了部署东西和构建管道来构建东西。例如,詹金斯只有构建。你会发布构建。这实际上取决于您使用的解决方案。 octopus 不能真正构建东西,但可以发布东西并获得使发布更容易的工具。

在 ADO 中,您可以在发布管道中设置阶段,这样您就可以轻松地进行推广、获得批准等

"Pipelines -> Releases"下的管道是使用 GUI 制作的经典部署管道。

新的 YAML 管道始终在 "Pipelines -> Pipelines" 下并允许构建和部署作业:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/deployment-jobs?view=azure-devops。 通过使用部署作业而不是经典版本,部署将显示在 "Pipelines -> Environments".

因此,通过这种方式,双方都可以执行相同的任务是有意义的,因为双方都允许定义部署工作流。 YAML 管道不具备与经典发布相同的功能,但我认为发布门仍然缺失。

是相同的任务,但不是相同的流程。

现在我会说Pipelines负责持续集成,而Release Pipelines更多的是关于持续交付。当所有部署功能都到达 YAML 管道时,情况就不会如此了。

如您所说,Azure Release Pipelines 可以使用 YAML 或经典管道的结果并自动触发,您可以使用不同的代理。 YAML 代理或经典管道需要所有工具来编译、测试和组装代码,当代理发布时,需要部署工具和正确的目标环境访问权限。

在发布管道中,您可以通过 environments/stages 更轻松地组织部署,添加可以单独启动的步骤,而无需重新启动整个管道(例如应用程序恢复或切换到生产环境)。

发布管道的工作流程比 YAML 或经典构建管道更直观。

根据我的经验,目前主要区别在于 Approvals and Gates 功能。

您可以尝试仅在 YAML 管道上实施整个 CI/CD 过程,但目前使用 Azure Pipelines 功能来分离 CI 和 CD 的逻辑可能会容易得多,因为 YAML 管道的部署功能仍在开发中。

对于经典 UI 格式构建和发布管道:

通常我们使用 Build Pipeline 来 build/test 我们的项目并输出 tested 软件二进制文件。

然后我们可以使用Release Pipeline将工件从Build Pipeline部署到多个阶段 取决于我们的需要。因此,我们只需要 运行 Build Pipeline 一次 来获取工件(包含软件二进制文件),我们可以使用发布管道以重用工件并将其部署到不同的环境。 (开发、产品...)

当然我们可以使用 Build Pipeline 来 运行 一些部署任务,我们可以使用 Release Pipeline 来 运行 构建和测试任务。我们可以但我们不应该(不推荐),配置构建和发布 UI 管道可以使我们如何 build/test(更多与 CI 相关)=>部署(更多与CD相关)更好。

如果您使用 Multi-stage pipeline,则无需使用 Release(UI) 管道。您可以在一个 xx.yml 个文件中定义 CI/CD 个步骤。