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


8

(对于这个问题的愚蠢,我们事先道歉。我通常是程序员,而不是系统管理员,但我本人要自己去自动化一些事情,并清理一些自动化的事情,但不是最漂亮的方法。 。:-)

我一直在研究用于将软件自动部署到一堆服务器的各种工具,例如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更新服务器。 .. 也许?(我确定您可以告诉我,这里我有点困惑。)

谢谢!


Puppet旨在与“包,文件,服务”模式一起使用。Puppet非常适合准备您的服务器,但是像Jenkins这样的连续构建服务器可能是此用例的更好工具。
spuder

Answers:


5

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

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

  • 使用puppet可以配置服务器上除应用程序本身以外的所有内容。依赖关系,Web服务器,用户,路径等。
  • 让您的自动构建服务器(竹子,哈德逊,巡航控制等)将已编译的工件放入Nexus等存储库管理器中。
  • 使用capistrano将构建推送到您的服务器。

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


该特定软件未使用Ruby。我给人的印象是Puppet不可知论,但Capistrano的构建与Rails应用程序最兼容。但是自从我使用上限已经有两年了,所以也许它已经改变了,我现在将再次检查。
肯(Ken)

1
Capistrano倾向于Rails,但灵活,可以轻松用于其他语言。只需阅读默认的部署配方并将其覆盖在您自己的配方中即可。这只是编程。我的公司通过Capistrano将数十个PHP应用程序部署到了少数服务器上,尽管我们使用Webistrano前端使其更易于管理。
Martijn Heemels,2010年

2
Capistrano很好,但是MCollective和RunDeck进行了更好的调整以与Puppet集成。
jgoldschrafe 2010年

您也可以看看Fabric。有点像Capistrano,但是在Python中。
熊恰亚诺夫,2011年

1

步骤1至3通常在构建过程中是自动化的。通常,此过程的输出将经过一个测试周期。我打包输出,以便可以将其部署到集成测试环境中。只有通过集成测试,才应执行步骤4和5。

您的第5步意味着部署中断。对于apache之类的问题,可以通过在日志轮换期间关闭并重新启动来解决。一个crontab脚本可以解决这个问题。如果您可以在一个小时左右的时间内处理滚动变更,只需在部署步骤4中包括重新启动即可。Puppet或cfengine是步骤4的适当工具。这可以通过在集成测试通过时更新存储库来触发。


1

搜索木偶食谱,您将找到大量可用于生产的脚本。是的,您将必须手动打包该软件。如果要维护自己的个人存储库,则可以使用sure => latest标志。然后写一个配方告诉木偶安装软件。配方将需要放置在主服务器上,并从那里传播到从属服务器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.