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

ger*_*lus 10 puppet jenkins docker

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

该应用程序:

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

ENVS:

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

建立:

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

  • 单独的Docker镜像为java + cient side app,postgresql,elasticsearch,neo4j相互通信,并通过Docker卷将数据存储在主机上,或者使用Docker数据容器(尚未确定方法)
  • 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的更新/回滚吗?

欢迎任何建议,谢谢.

Mar*_*nor 11

您正在构建一个容器编排的PAAS.我的建议是查看可能值得模拟的最佳实践的类似系统.

第一个开始的是12因素应用程序站点,由Heroku的一个共同创建者编写.该网站非常有用,描述了现代云规模应用程序的一些理想的操作功能.下一站将是Heroku本身,以了解"现代"开发和部署环境可以/看起来像什么.

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

回答:

  • 是的,这是非常合理的.
  • 像Heroku一样,而不是管理"环境",只为每个版本的应用程序创建一个新的应用程序.这是" 构建,发布,运行 "模式.在您的情况下,Jenkins由新代码触发,创建Docker镜像,可以将其保存到存储库中并用于部署应用程序版本的实例.
  • 数据库将是" 支持服务 "的一个示例,您可以在应用程序创建时连接到您的应用程序.升级将等于停止一个应用程序版本并启动另一个连接到同一数据库的应用程序版本.