使用docker,puppet和jenkins进行持续交付和PROD部署

时间:2014-02-02 17:10:54

标签: jenkins puppet docker

需要为新项目设置基础架构。以前我用jenkins单独使用puppet,但是现在我正在考虑使用docker构建,这样我就可以从开发阶段推进到阶段化到生产而不触发构建,但是通过简单地获取已经存在的docker现有docker图像建。

该应用:

  • 使用postgresql支持的rest api的Java Web应用程序,neo4j,elasticsearch
  • 使用angular编写的客户端应用程序通过rest api
  • 与java对话
  • 存储在git存储库中的代码

ENVS:

  • 开发服务器(构建,开发+测试环境) - 32GB linux机器
  • 测试服务器(AWS)
  • 生产(AWS)

设定:

所以基本上我在想这样的事情:

  • java + cient side app,postgresql,elasticsearch,neo4j的独立Docker镜像,它们相互通信并通过Docker卷将数据存储在主机上,或者使用Docker数据容器(尚未确定方法)< / LI>
  • Jenkins构建所有代码并创建将被推送到私有内部存储库的Docker镜像
  • 与DEV服务器上的Puppet docker模块一起运行集成测试
  • 使用Docker
  • 通过puppet推送到jenkins生产

我为什么要使用泊坞窗?

  • 大型开发机器 - 可以轻松运行我的应用程序的多个实例而无需虚拟化(可能有不稳定的开发,稳定的开发,坐等)。
  • 易于部署(使用docker和puppet docker模块)和回滚(只需从Docker存储库中检索以前的版本)
  • 快速迁移和生成新实例的能力
  • 准备轻松扩展系统的不同部分(例如,群集弹性搜索)

问题

  • 这看起来合理吗?
  • 我正在考虑使用这个木偶模块https://github.com/garethr/garethr-docker。如何通过它更新我的环境?我必须以某种方式停止docker容器,做一个docker rm,然后docker run?
  • 我们正在使用liquibase进行数据库更新管理。猜猜这应该来自docker的更新/回滚吗?

欢迎任何建议,谢谢。

1 个答案:

答案 0 :(得分:11)

您正在构建container orchestrated PAAS。我的建议是查看可能值得模拟的最佳实践的类似系统。

第一个开始的地方是12 factor app网站,由Heroku的联合创始人之一撰写。该网站非常有用,描述了现代云规模应用程序的一些理想的操作功能。下一站将是Heroku本身,以了解“现代”开发和部署环境可以/看起来像什么。

我还建议您查看一些新兴的开源PAAS平台。大型供应商支持的系统如Cloud FoundryOpenshift目前风靡一时,但更简单的解决方案(基于docker构建)也正在出现。 其中一个Deis使用了相关技术Chef,因此可能会对如何使用puppet来管理运行时docker容器提供一些见解。(Modern {{3不再使用Chef)

数目:

  • 是的,这是非常合理的。
  • 不像管理“环境”,而是像Heroku一样,只为每个版本的应用程序创建一个新的应用程序。这是“Deis”模式。在您的情况下,Jenkins由新代码触发,创建Docker镜像,可以将其保存到存储库中并用于部署应用程序版本的实例。
  • 数据库将是“Build, Release, Run”的示例,您可以在应用程序创建时连接到您的应用程序。升级将相当于停止一个应用程序版本并启动另一个应用程序版本连接到同一个数据库。