使用 Puppet 部署我们自己的软件?

Ken*_*Ken 8 automation deployment puppet

(提前为这个问题的愚蠢道歉。我通常是一名程序员,而不是系统管理员,但我已经承担起自动化一些事情,并清理其他一些自动化但不是最漂亮的方式的东西.:-)

我一直在寻找用于将软件部署自动化到一堆服务器的各种工具,例如 cfengine、Puppet 和 Chef。到目前为止,Puppet 看起来最吸引人,但我当然还没有承诺过任何事情。

这些工具看起来都可以很好地使用预先打包的软件使一堆服务器保持最新状态。

我不明白的是:如何使用工具(如 Puppet)来管理我们自己内部软件的部署?我想我不知所措我,因为我已经看到了一千教程展示了如何保持阿帕奇ensure => latest(这很酷的),但是没有一个相当相当于我用例的今天,这是更多的东西一样:

  1. 当一个人按下按钮时,
  2. 从版本控制存储库 B 中拉取分支 A
  3. 运行命令 C 来编译它
  4. 将二进制文件 D 复制到服务器 E1 到 E10
  5. 在每台服务器上,运行命令 F 使所有更改生效

Puppet 听起来很棒,我完全看到了声明式、幂等配置相对于某些 shell 脚本的优势,但我还没有看到任何关于“您想将 shell 脚本更新为 Puppet(或 Chef 或 cfengine)的教程,所以这就是您应该做”。有这样的事情吗?对于其他人来说,如何使用 Puppet 文档中提供的内容并复制我想要的行为是否显而易见?我只是没有得到它吗?

到目前为止,在我看来,人类(#1)会手动打包 Puppet 外部的软件(#2 和 #3),手动更新 Puppet 配置,这将触发 Puppet 更新服务器。 .. 也许?(我在这里有点困惑,因为我相信你能看出来。)

谢谢!

Ben*_*cks 5

我们使用 puppet,但不将其用于我们的应用程序部署。正如您所说,您可以将您的软件打包成 debs 或 rpms,在任何地方配置您的私有存储库,并使用 puppet 来控制版本,但您仍然需要等待下 30 分钟所有服务器的刷新。

我会做什么(这与我们所做的很接近,但我们使用 rails 所以没有编译步骤):

  • 使用 puppet 配置服务器上除应用程序本身之外的所有内容。依赖项、Web 服务器、用户、路径等。
  • 让您的自动构建服务器(bamboo、hudson、cruise control 等)将编译后的人工制品放入像 Nexus 这样的存储库管理器中。
  • 使用 capistrano 将构建推送到您的服务器。

Chef 可能有更多的实时推送功能;我对它不是很熟悉。

  • Capistrano 很好,但 MCollective 和 RunDeck 更适合与 Puppet 集成。 (2认同)