VSTS +八达通部署?为什么我看到很多 CI/CD 设置都包含这两者?

VSTS + Octopus Deploy? Why do I see a lot of CI/CD setups with both?

我是一名正在过渡到 Devops 的开发人员。通过观察,我注意到很多开发商店已经开始使用 Octopus Deploy 和 Azure Devops Services(AzDo,以前称为 VSTS),或者他们正在开始新项目来设置 devops ci/cd 管道,并且他们指定同时使用这两者工具。

我已经对这两种工具进行了一些快速培训,虽然它们并不完全相同,但 AzDo 似乎提供了与 Octopus Deploy 相同的所有功能。

所以,我的问题是,如果一家公司已经在使用 AzDo 进行大部分版本控制,或者任何 CI/CD 管道相关的东西,您为什么要使用 Octopus?使用 Octopus 进行构建并部署到 AzDo 有什么好处?

请注意,我对 Devops 非常非常陌生。我只是在问,因为在“10,000 英尺的视野”下,如果您已经在使用 AzDo,那么 Octopus 似乎没有任何理由。我提到 Octopus Deploy 的名字是因为我经常看到它出现。但是,我认为可能还有其他工具可以实现自动构建和部署的相同目的,也可以与 AzDo 集成。但是,AzDo 提供内置的构建和部署功能。为什么要拆分工作?

你今天在 VSTS 中看到的功能在几年前是不存在的,因此可能有历史原因。 但我想在这里陈述一些可能建议组织选择不同工具而不是一个的非固执己见的原因。

  • 分离责任和访问级别
  • 开发团队中的多个 CI 工具(也使用 Jenkins 或 TeamCity 或其他的组织)并且需要标准化和控制部署
  • 组织需要仅在八达通中可用的功能(可能是多租户)

过去的主要原因是 TFS On prem 和早期的 VSTS 不能很好地支持非 Microsoft (.Net) 代码(如果有的话)。您可以利用 TFS 的源代码控制和工作功能,然后使用 octopus/Jenkins 等...作为构建版本部分来覆盖 TFS 并不真正知道如何处理的代码。

此外,发布管道过去非常简单,并且在其他产品都是基于插件的情况下没有那么有用,并且可以(几乎)完成您需要它们做的任何事情。其中大部分都发生了变化,因此 VSTS 比以前更擅长处理非 Microsoft 代码库。随着时间的推移,集成会在公司内部创建,撤销这些决定可能比仅使用 "too many" 工具更痛苦。此外,我觉得有更多的人熟悉这些工具,因为它们比 VSTS 过去成熟的时间更长,并且覆盖了开发世界的更大部分。

Octopus 在专注于部署方面做得很好。功能在 vsts 之前达到章鱼,支持是本地的和响应的。那,你永远不会 运行 build/release 分钟!

说真的,我只是喜欢尽可能支持较小的公司,如果所有功能都相同,我仍然会选择它们。

让我先说明一下为什么我喜欢使用 VSTS 进行构建和部署:

  • 相同的端到端权限
  • 从端到端构建和部署的视线

我喜欢 Octopus Deploy 而不是 VSTS 版本的原因:

  • 能够上传packages/artifacts
    • 外部的可能是为特定版本部署的一次性软件包
  • 目标定义
    • 当您创建要部署到的目标或服务器时,您可以将一个目标添加到一个或多个环境并将 tags/roles 分配给一个目标。这是什么意思?更灵活的服务器定义,而不是将严格的代理程序定义为池或将服务器定义为部署组,您可以允许目标跨越多个(即:跨越您的开发和测试环境的测试服务器,并且仅在为定义的步骤上触发那个角色)。我知道您可以在 VSTS 中完成 类似 的事情,但我认为它要麻烦得多。
  • 变量定义
    • 变量可以在全局级别分组,也可以按特定pipeline/process分组(这部分类似于VSTS)。变量也可以按环境或角色分组或scoped(上文),因此您可以为每个环境的每个角色设置不同的变量值;既超细又灵活。这会派上用场的地方是,如果您有一个带有连接字符串的后端服务器,并且可能有 2 个内容交付节点(角色 - content delivery)与后端服务器的值略有 不同 .目前,我不知道(除了创建新环境)如何在 VSTS 中完成同样的工作。
  • 进程定义
    • 以上所有内容都包含在 Octopus Deploy 的流程定义中。超级灵活和精细的变量和目标定义允许您专注于 实际 部署过程,而不是挂在 UI 的细微差别及其限制上。一个例子是定义一个过程,其中第一步是从中央服务器的负载均衡器中取出一些东西,第二步将代码部署到交付服务器一,第三步放回 lb,第四步从 lb 中取出节点二称为从中央服务器,第 5 步将代码部署到节点二,最后一步,返回到负载均衡器。我意识到这是一个非常简单的假设,但在 Octopus Deploy 中,它是一个稳定的过程,经过过滤以在特定角色上执行,在 VSTS 中,您必须将其分解为不同的代理阶段和可能的管道。

以上是我看到的使用 Octopus Deploy over VSTS Release 的最大要点。现在为什么有人会使用 VSTS 来构建和 OD 到 release/deploy?有很多不同的因素,其中一些是企业驱动因素,比如拥有一个企业 git 客户端,该客户端具有通过 MSDN 处理的权限。有时它是一个项目管理驱动程序,将工作项与提交和构建紧密相关,但 OD 为 table 带来了额外的灵活性 free/minimal 成本。

希望这有助于阐明为什么有些人正在交叉流并同时使用 VSTS 和 OD。

要完全实施 CD,两者都需要。 VSTS 运行测试并且是一个构建服务器。外径不是。 VSTS 轻于复杂的应用程序安装。如果您正在供应 IaC 风格的环境,您还需要 Terraform。不要试图将所有东西硬塞进一个工具中。 DevOps 需要一个完整的生态系统。原因不是历史原因。

已经提出了很多好的观点,但这实际上归结为您需要什么。我敢打赌,我们中的很多人在发布管理真正成为现实之前就开始使用 Octopus。

我们使用 VSTS 进行所有源代码控制和构建,然后我们所有的部署都通过 Octopus 处理。

当我们开始评估工具时,VSTS 没有任何部署工具。即使是现在,他们仍在追赶八达通的功能集。

如果您正在进行真正的多租户和多环境部署,我认为 VSTS 真的无法与之相比。我们与大约 30 个租户一起使用八达通,一些在 Azure 上,一些在内部部署。我们混合部署了 Web 和桌面应用程序。我们甚至使用 Octopus 来部署一些遗留的 VB6 和 winforms 应用程序。

  • 多租户(对我们至关重要)

    • VSTS 不久前添加了部署组,这听起来与实施多租户之前的章鱼环境非常相似。在 Octopus 拥有真正的多租户之前(它已经存在了一段时间),人们会通过为每个租户创建不同的环境来解决它,比如 "CustomerA - Dev"、"CustomerA - Prod" 等。现在你只需要 Dev/Test/Prod 环境,每个租户都可以拥有针对这些单独环境的变量。
  • 支持

    • 文档非常好,起床真的很容易运行。
    • 有几次我需要联系 Octopus 的人,他们的回答非常迅速且知识渊博。
  • 可用性

    • 让 Octopus 仪表板为我们提供所有项目的概览真是太棒了。我不知道如何在 VSTS 中执行此操作,而不进入每个单独的项目。
    • Octopus 在移动设备上运行良好,可用于检查部署状态甚至开始新部署。
  • 社区

    • Octopus 与客户合作以了解他们的需求,他们经常发布 RFC 草案,并根据客户反馈多次完全改变路线。

如果我们知道您正在部署哪种类型的应用程序以及部署到哪种类型的环境,我们将能够更好地调整我们的响应。