0

对于我们的一个应用程序,我们正在尝试自动化部署过程。我们为此应用程序实施了端到端的持续集成(构建/测试/打包/报告)。现在我们正在尝试实现自动化部署。这个应用需要部署在2000台服务器上,每台服务器下有50个客户端。一些组件将安装在服务器上,其中一些组件将安装在客户端上。
用于 CI 的工具:Jenkins、Github、msbuild、nunit、specflow、wix。

我已经阅读了持续交付和持续部署之间的区别,并理解持续交付意味着代码/更改被证明可以在任何时间点生效,持续部署意味着经过验证的代码/更改将自动部署到生产服务器。

网络上的大多数文章都解释了我们如何将持续交付/部署到其中一台服务器(DEV/Staging/Preproduction/production)的部署部分自动化。没有一篇文章谈到将应用程序部署到大量服务器和客户端。

现在我的问题是 1) 将应用程序部署到 2000 多个服务器和客户端是持续部署的一部分,还是应该在 CI/CD 之外处理?2)如果它可以在 CI/CD 中处理,那么我如何在 Jenkins 交付管道中对此进行建模并从 CI 工具触发所有服务器的部署?3) 是否有任何工具可以与 CI 工具集成以自动化部署?

谢谢

4

2 回答 2

1

我会把这两个方面分开:

  1. 在大量服务器上部署(无论要部署的工件是否来自 CI)
  2. 将此类部署连接到 CI 以执行 CD

对于#1 - 我确信那里有可以使用的专业 IT 工具。请咨询您的 IT 部门。如果部署不需要超级用户权限,或者您拥有此类权限(和知识),您还可以编写自己的自定义部署/管理工具。

对于 #2 - CD 并没有真正指定您是否应该部署到单个服务器、一定百分比的生产服务器或所有这些服务器)。您的选择应该基于什么是有意义的或更适合您的特定环境。如果你决定走那条路,它到底是怎么做的?这真的取决于#1 - 你只需要从你的 CI 触发这个过程。使用自定义部署工具应该轻而易举:)

于 2015-05-26T13:08:05.190 回答
0
  1. 持续部署中的关键要求(恕我直言)是流程编排,jenkins 不是这方面的理想工具,但您可以编写自己的 groovy 脚本包装器或从另一个编排工具远程调用作业。至少对我而言,jenkins 的另一个问题是难以跟踪进度。
  2. 我将其建模如下:

    • 将部署过程划分为逻辑级别,例如数据中心->应用程序->池,并为每个级别创建一个包装器。它将允许您在主包装器中查看最高级别的进度,并在需要时根据需要向下钻取
    • 每个包装器都应该像所有下游作业一样完成SUCCESS否则应该SUCCESSFULUNSTABLEor FAILURE。在这种情况下,您不会错过低级别工作的某些内容。
    • 每个产品/应用程序/包装每 1 个工作
    • 1 个作业来控制单序列运行。例如,我将使用mcollective在选定的服务器上按顺序/并行运行安装作业
    • 每个逻辑级别 1 个包装作业
  3. 我会使用:

    • mcollective - 如上所述
    • 工头查询puppet为每个序列运行选择服务器列表
    • 服务器上的包/应用程序/工件安装我更喜欢使用本机操作系统软件,例如yum在服务器上linux。它将允许您依赖他们的安装验证机制

我确定我错过了一些东西,但我希望它会给你一个可以接受的起点

于 2015-05-25T21:14:02.583 回答