背景和意义
在软件开发过程中,常常会遇到开发环境和生产环境不一致,导致软件部署失败。环境不一致体现在操作系统,软件版本和第三方库版本不一致,为了解决这个问题,考虑使用docker部署软件,将开发环境的代码和docker整体打包上传到docker repositry 部署到生产环境,可以避免环境不一致导致的问题;同时为了简化环境部署,使用jekins + ansible 将代码发布到生产环境
组件建和流程
开发和部署流程如下:
- 本地开发django 项目,运行pip3 install pipreqs,生成requirment文件
- 代码上传到git
- jenkinsfile 定义持续集成和部署步骤,本例中包括1.登录docker registry;2.使用dockerfile将最新代码添加到docker制作成新镜像;3.将新镜像推送到docker registry;4.将最新代码部署到生产环境;
- 本项目使用ansible对生产环境进行操作,包括安装必要的包,获取最新镜像和创建新container。
项目链接
https://gitee.com/ethanzhaorenyu/django/tree/prod
优化方向
- 持续集成中还可以包括软件测试的步骤,才算真正意义上的持续集成;
- 部署代码和项目代码分开,这样在部署代码更新时,不需要制作新镜像,当然这样也增加了jekinfile的复杂度;
- 部署docker时,当前流行的方案是使用K8S,也可以考虑添加到持续集成中。
参考资料
《Continuous Delivery with Docker and Jenkins》