Chef与DEV集成,用于DEV和PROD部署

时间:2014-04-16 19:25:35

标签: continuous-integration chef

我们有两个环境,DEV和PROD。每个环境都有3个节点:

  • DEV
    • devapp01(Tomcat)
    • devapp02(Tomcat;与01相同且​​负载均衡)
    • devdb01(MySQL)
  • PROD
    • app01(Tomcat)
    • app02(Tomcat;与01相同且​​负载均衡)
    • db01(MySQL)

Tomcat实例提供由CI构建生成的WAR。

我们需要在所有DEV机器上配置与PROD上相同的软件堆栈。我们已经设置了一个简单的Chef服务器来管理所有节点上的配置,并为app和DB服务器创建了配方。

在Chef服务器上,我们目前有一个自动更新功能,每30分钟运行一次,检查所有节点并确保它们与各自的配方保持同步。我们的内部“厨师”(系统管理员)设置一切的方式,有一个配方的一部分,对Tomcat的webapps目录进行存在性检查,以确定是否应该执行更新。换句话说,如果Tomcat的webapp目录中已经有一个WAR,那么当自动更新每隔30分钟运行一次,因为webapps不为空,Chef将不会去CI服务器并拉在新的战争中。

为了解决这个问题,我们的厨师制作了一个“ clean slate ”食谱,它将首先从Tomcat的webapps目录中删除爆炸的WAR。因此,只要该配方首先执行,TOMCAT_HOME / webapps将在Tomcat检查之前执行;然后它将自己从Chef运行列表中删除。他去除这个问题的理由是 - 在生产中 - 如果我们这样做的话 总是删除Tomcat的webapps目录,然后我们将每30分钟重新部署一次prod节点。

所以在DEV上,我们确实希望每个CI构建都生成一个新的WAR部署到我们的Tomcat实例(devapp01 / 02)。在PROD中,我们希望手动启动部署,根据此主厨如何配置所有内容,包括手动添加清洁平板配方,以便CI服务器可以部署新WAR。

我想知道其他人/团队过去如何使用CI和Chef,以及他们是否遇到过类似的问题。我的具体问题是:我们如何才能让CI驱动所有DEV部署,但仍然使PROD部署成为手动过程?

2 个答案:

答案 0 :(得分:0)

您应该看看CloudMunch,因为这是已经设想过的场景之一。

CloudMunch本地集成到Chef服务器中,并提供手动工作流程以允许部署到登台或生产环境。

免责声明:我在CloudMunch工作。

答案 1 :(得分:0)

最简单的方法是为dev和prod创建单独的Chef组织(甚至是服务器)。默认情况下,这会给您强烈的分离。你CI推动dev,prod推是有目的地完成的。

Chef Inc也在致力于Policyfiles,这是一个有趣的环境替代品,不应该遭受相同的元数据/烹饪书版本泄漏问题。