使用docker、puppet和jenkins进行连续交付和产品部署

使用docker、puppet和jenkins进行连续交付和产品部署,jenkins,puppet,docker,Jenkins,Puppet,Docker,需要为新项目设置基础设施。以前我在jenkins中使用了puppet standalone,但现在我考虑合并docker构建,这样我就可以在不触发构建的情况下从开发阶段推进到生产阶段,而只需获取已经构建的docker现有docker映像 应用程序: 由postgresql、neo4j和elasticsearch支持的Java web应用程序,带有rest api 使用angular编写的客户端应用程序,通过RESTAPI与java对话 存储在git存储库中的代码 环境: 开发服务器(构建、

需要为新项目设置基础设施。以前我在jenkins中使用了puppet standalone,但现在我考虑合并docker构建,这样我就可以在不触发构建的情况下从开发阶段推进到生产阶段,而只需获取已经构建的docker现有docker映像

应用程序:

  • 由postgresql、neo4j和elasticsearch支持的Java web应用程序,带有rest api
  • 使用angular编写的客户端应用程序,通过RESTAPI与java对话
  • 存储在git存储库中的代码
环境:

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

所以基本上我是这样想的:

  • 针对java+cient端应用程序、postgresql、elasticsearch和neo4j的单独Docker映像,这些映像通过Docker卷或使用Docker数据容器相互通信并将其数据存储在主机上(尚未决定方法)
  • Jenkins构建所有代码并创建Docker映像,这些映像将被推送到私有内部存储库
  • 集成测试在DEV服务器上使用Puppet docker模块运行
  • 使用Docker通过puppet与jenkins一起投入生产
我为什么要使用docker?

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

  • 这看起来合理吗
  • 我正在考虑使用这个木偶模块。如何通过it更新我的环境?我必须停止docker容器,执行docker rm,然后docker运行
  • 我们正在使用liquibase进行数据库更新管理。我猜这应该与docker分开进行更新/回滚
欢迎提出任何建议,谢谢。

您正在构建一个新的应用程序。我的建议是,在类似的系统中寻找可能值得效仿的最佳实践

第一个开始的地方是该网站,由该网站的联合创始人之一撰写。该网站非常有用,描述了现代云计算应用程序的一些理想操作特性。下一站将是Heroku本身,以了解“现代”开发和部署环境可以是什么样子

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

答案:
  • 是的,这很合理
  • 不要像Heroku那样管理“环境”,而是为应用程序的每个版本创建一个新的应用程序。这是“”模式。在您的例子中,Jenkins由新代码触发,创建Docker映像,这些映像可以保存到存储库中,并用于部署应用程序版本的实例
  • 数据库将是“”的一个示例,您可以在应用程序创建时将其连接到应用程序。升级相当于停止一个应用程序版本并启动另一个应用程序版本,两者都连接到同一数据库