Continuous integration Chef与CI集成,用于开发和产品部署

Continuous integration Chef与CI集成,用于开发和产品部署,continuous-integration,chef-infra,Continuous Integration,Chef Infra,我们有两个环境,DEV和PROD。每个环境有3个节点: 发展 devapp01(Tomcat) devapp02(Tomcat;与01相同且负载平衡) devdb01(MySQL) 刺激 app01(Tomcat) app02(Tomcat;与01相同且负载平衡) db01(MySQL) Tomcat实例服务于CI构建产生的战争 我们需要所有开发机器上的软件堆栈与PROD上的配置相同。我们已经设置了一个简单的Chef服务器来管理所有节点上的配置,并为app和DB服务器创建了配方 在C

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

  • 发展
    • devapp01
      (Tomcat)
    • devapp02
      (Tomcat;与01相同且负载平衡)
    • devdb01
      (MySQL)
  • 刺激
    • app01
      (Tomcat)
    • app02
      (Tomcat;与01相同且负载平衡)
    • db01
      (MySQL)
Tomcat实例服务于CI构建产生的战争

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

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

为了解决这个问题,我们的主厨制作了一个“干净的板岩”菜谱,首先从Tomcat的webapps目录中删除爆炸战争。因此,只要该配方首先执行,TOMCAT_HOME/webapps就会在TOMCAT检查之前执行;然后,它将自己从Chef runlist中删除。他的理由是,在生产过程中,如果我们 始终删除Tomcat的webapps目录,然后每30分钟重新部署一次prod节点

所以在DEV上,我们确实希望每个CI构建生成一个新的WAR,并部署到我们的Tomcat实例(devapp01/02)。在PROD中,我们希望手动启动部署,这取决于厨师如何配置所有内容,包括手动添加clean slate recipe,以便CI服务器可以部署新的WAR


我想知道过去其他人/团队是如何结合使用CI和Chef的,他们是否遇到过类似的问题。我的具体问题是:我们如何让CI驱动所有开发人员部署,但仍然让产品部署成为一个手动过程?您应该看看CloudMunch,因为这是已经设想过的场景之一

CloudMunch以本机方式集成到chef server中,并提供手动工作流以允许部署到暂存或生产环境中


免责声明:我在CloudMunch工作。

最简单的方法是为开发人员和生产人员建立独立的厨师组织(甚至服务器)。默认情况下,这会使您实现强大的分离。您可以将CI推送到开发人员,产品推送是有目的的

Chef Inc也在开发,这是一个有趣的环境替代品,不应该出现相同的元数据/食谱版本泄漏问题