原来的部署方式
原来我用的部署方案是这样的:
在主机上安装Jenkins,然后在Jenkins的任务中运行docker命令,在主机里部署应用。
基本逻辑如下:
- Jenkins任务通过git更新代码
- 运行docker build,从最新的代码中生成一个image
- 用docker run运行这个image完成一个应用实例的部署
相对来说还是挺简单的。
但是这次整的一个新的服务器,我实在不想再安装Jenkins了,你们懂的,JAVA应用的安装都是很麻烦的。就打算pull一个Jenkins的image来放docker里跑。那么问题来了:如何让一个跑在container里的Jenkins把应用部署到host环境上?总不能在container里创建新的container吧。
解决方案
解决方案就是fabric,本质上是ssh。
方法如下:
- build一个Jenkins image,在其中加入fabric
- 运行这个container的时候加入host机
- 在fabfile.py里加入一个role为host机用户
- 在fabfile.py用这个用户运行部署脚本
- 在Jenkins任务里调用这个fabric部署脚本
参考如下Jenkins Dockerfile,用的基础image是alpine版,这个比较小。
repositories里放的是国内镜像源,比原配的源快很多。
这个Dockerfile主要做的事情就是安装fabric。
FROM jenkins: