自动部署CI / CD的大型分布式客户端服务器应用程序部分

时间:2015-05-25 14:31:44

标签: jenkins continuous-deployment distributed-system continuous-delivery automated-deployment

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

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

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

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

由于

2 个答案:

答案 0 :(得分:1)

我将这两个方面分开:

  1. 在大量服务器上部署(如果要部署的工件来自CI,则无关紧要)
  2. 将此类部署连接到CI以执行CD
  3. 对于#1 - 我确信有专业的IT工具可供使用。请咨询您的IT部门。如果部署不需要超级用户权限,或者您拥有此类权限(和知识),那么您也可以编写自己的自定义部署/管理工具。

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

答案 1 :(得分:0)

  1. 持续部署中的关键要求(IMHO)是流程编排,jenkins并不是理想的工具,但您可以编写自己的groovy脚本包装器或从另一个编排工具远程调用作业。詹金斯的另一个问题,至少对我而言,是追踪进展的困难。
  2. 我会将其建模如下:

    • 将部署过程划分为逻辑级别,例如数据中心 - >应用程序 - >池并为每个级别创建一个包装器。它将允许您在主包装中查看最高级别的进度,并在需要时向下钻取
    • 仅当所有下游作业为SUCCESS时,每个包装都应以SUCCESSFUL结束,否则应为UNSTABLEFAILURE。在这种情况下,您不可能错过低级别的工作。
    • 每件产品/应用/包装1件作业
    • 控制单个序列运行的1个作业。例如,我将使用mcollective在所选服务器上顺序/并行运行安装作业
    • 每个逻辑级别的1个包装作业
  3. 我会用:

    • mcollective - 如上所述
    • foreman查询puppet以选择每个序列运行的服务器列表
    • 服务器上的软件包/应用程序/工件安装我更喜欢使用本机操作系统软件,例如yum上的linux服务。它将允许您依赖其安装验证机制
  4. 我确信我错过了一些东西,但我希望它会给你一个可接受的起点