使用docker、puppet和jenkins进行连续交付和产品部署
需要为新项目设置基础设施。以前我在jenkins中使用了puppet standalone,但现在我考虑合并docker构建,这样我就可以在不触发构建的情况下从开发阶段推进到生产阶段,而只需获取已经构建的docker现有docker映像 应用程序:使用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存储库中的代码 环境: 开发服务器(构建、
- 由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一起投入生产
- 大开发机器-可以轻松运行我的应用程序的多个Instance,而无需虚拟化(可能有不稳定的开发、稳定的开发、sit等)
- 易于部署(使用docker和puppet docker模块)和回滚(只需从docker存储库检索以前的版本)
- 快速迁移和生成新实例的能力
- 准备方便地扩展系统的不同部分(例如,群集elasticsearch)
- 这看起来合理吗
- 我正在考虑使用这个木偶模块。如何通过it更新我的环境?我必须停止docker容器,执行docker rm,然后docker运行
- 我们正在使用liquibase进行数据库更新管理。我猜这应该与docker分开进行更新/回滚
- 是的,这很合理李>
- 不要像Heroku那样管理“环境”,而是为应用程序的每个版本创建一个新的应用程序。这是“”模式。在您的例子中,Jenkins由新代码触发,创建Docker映像,这些映像可以保存到存储库中,并用于部署应用程序版本的实例
- 数据库将是“”的一个示例,您可以在应用程序创建时将其连接到应用程序。升级相当于停止一个应用程序版本并启动另一个应用程序版本,两者都连接到同一数据库