【问题标题】:Chef integration with CI for DEV and PROD deploymentsChef 与 CI 集成,用于 DEV 和 PROD 部署
【发布时间】:2014-05-31 20:32:15
【问题描述】:

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

  • 开发
    • devapp01 (雄猫)
    • devapp02(Tomcat;与 01 相同且负载均衡)
    • devdb01 (MySQL)
  • 产品
    • app01 (雄猫)
    • app02(Tomcat;与 01 相同且负载均衡)
    • db01 (MySQL)

Tomcat 实例服务于 CI 构建生成的 WAR。

我们需要将所有 DEV 机器上的软件堆栈配置为与 PROD 上的相同。我们设置了一个简单的 Chef 服务器来管理所有节点上的配置,并为应用程序和数据库服务器创建了配方。

在 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 中,我们希望手动启动部署,根据厨师如何配置所有内容,这涉及手动添加 clean slate recipe 以便 CI 服务器可以部署新的 WAR。

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

【问题讨论】:

    标签: continuous-integration chef-infra


    【解决方案1】:

    最简单的方法是为 dev 和 prod 设置单独的 Chef 组织(甚至服务器)。默认情况下,这为您提供了强大的分离。你 CI 推送给 dev,prod 推送是有目的的。

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

    【讨论】:

      【解决方案2】:

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

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

      免责声明:我在 CloudMunch 工作。

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-29
        • 1970-01-01
        • 2014-02-20
        • 2022-12-07
        • 2017-04-17
        相关资源
        最近更新 更多