(在这个问题上,我很抱歉,我通常是一个程序员,而不是系统pipe理员,但是我自己做了一些事情的自动化,并且清理了一些其他自动化的东西,但是没有以最漂亮的方式。:-)
我一直在环顾各种各样的工具,将软件部署自动化到cfengine,Puppet和Chef等一堆服务器上。 到目前为止,木偶看起来是最有吸引力的,但我当然还没有承诺任何东西。
这些工具看起来像是可以很好地保持一堆服务器与预先打包的软件的最新状态。
我没有得到的是:如何使用工具(如Puppet)来pipe理我们自己的内部软件的部署? 我觉得我很茫然,因为我看过一千个教程展示了如何让Apache ensure => latest (这非常酷),但是没有什么和我今天的用例相对应,这更像是:
木偶听起来不错,我完全看到声明式,幂等configuration优于一些shell脚本的优点,但我还没有看到任何教程“你想更新你的shell脚本到Puppet(或厨师,或cfengine),所以这就是你应该做”。 有这样的事吗? 其他人是否明白如何把Puppet文档中提供的内容复制到我想要的行为上? 我只是没有得到它?
到目前为止,听起来对于我来说,人类(#1)会手动打包Puppet外部的软件(#2和#3),手动更新Puppetconfiguration,这将触发Puppet更新服务器。 .. 也许? (我在这里有点困惑,因为我敢肯定你可以告诉。)
谢谢!
我们使用puppet,但是我们不使用它来进行应用程序部署。 正如你所说,你可以将你的软件打包成DEB或RPM,在任何地方configuration你的私有存储库,并使用puppet来控制版本,但是你仍然可以等待所有服务器上的下一个30分钟刷新。
我会做什么(这接近我们所做的,但我们使用钢轨,所以没有编译步骤):
厨师可能有更多的实时推送function; 我不是很熟悉它。
步骤1到3在构build过程中通常是自动的。 通常,这个过程的输出将经历一个testing周期。 我打包输出,以便它可以部署到集成testing环境。 只有在集成testing通过的情况下,才会出现步骤4和5。
你的第5步意味着部署中断。 对于像apache这样的东西,这可以通过closures并在日志旋转过程中重新启动来处理。 一个crontab脚本可以处理这个。 如果您可以在一个小时左右的时间内处理滚动更改,请在部署步骤4中包括重新启动。Puppet或cfengine是步骤4的适当工具。这可以通过集成testing通过时更新存储库来触发。
search木偶食谱,你会发现吨生产准备脚本。 是的,你将不得不手动打包软件。如果你正在维护自己的个人存储库,那么你可以使用确保=>最新的标志。 然后写一个配方告诉傀儡安装软件。 配方需要放在主服务器上,从那里传播到从服务器。