最近开发docker的caas平台,目前已经开发完成,在优化性能与套模板。对于docker最近是很好,很多人把docker做为vm来使用,当然作为测试来说是没问题,但我感觉docker本身在做沙箱、自动化部署与回滚方面更适合,下面介绍一下我这里是如何通过docker实现代码半自动化部署。

目前我这里已经实现能结合svn或者git代码库,对node、php、java代码进行半自动化部署,先给大家截图看效果,感觉满意在继续细看。

总界面如下

wKiom1XRPnSCzFhnAACVPlgUGPw688.jpg

点击左上角的“新增开放项目”就可以新建立测试,下面是功能截图:

wKiom1XRPpaQ1FitAAFlOy9N24c284.jpg

默认情况下,这个操作跟容器创建类似,后期我也打算把容器管理跟程序开发管理合并。

代码存放支持2种,分别是svn存放:

wKiom1XRPraiu7YaAAE837fMEck639.jpg

以及git存放:

wKioL1XRQOPwYZxZAAFMc7DOtrE934.jpg

平台支持PHP、node、java这3中代码类型,默认类型为PHP。

接下来我们进入实测演练即如何使用平台进行快速代码更新:

我将通过2个测试实例来帮助大家理解。

测试需求一:对基于存放svn库的java代码进行快速的部署与测试

假如当前当前SVN库版本为13,文件内容如下:

wKioL1XRQSDD_C6tAAHI_rImW6M823.jpg

test6.jsp文件内容如下:

wKiom1XRPzujYnulAAEDafe3ZgA604.jpg

接下来选择镜像(java代码,当然选CentOS6系统 + Tomcat镜像,然后输入好SVN信息)来创建测试:

wKiom1XRP2HCV_yrAAHbvgOSQrM066.jpg

鉴于Tomcat比较费内存,所以选择1G的内存,ssh密码验证方式,然后创建测试:

wKioL1XRQY-g9JoRAAFKt1YbHJw480.jpg

创建成功后,右侧会有弹框提示:

wKioL1XRQa2zkdu0AAE1kiQH1To455.jpg

下一步就是设置防火墙,或者绑定公网IP后再做防火墙。我们使用空闲IP xxx.xxx.57.182来设置:

wKioL1XRQdORxv6bAACoo5YK28E328.jpg

绑定成功之后,设置防火墙:

wKioL1XRQfLg_e9JAAB60_FXOf4177.jpg

默认是没有规则,所以规则一栏显示红色的无。

wKioL1XRQhSAJycoAAEShlJ1lBo800.jpg

新增完成后,再点击Apply(点击这个主要是防止修改错规则)生效。当前的防火墙规则为:

wKiom1XRQDmwBq5MAACjelnB89w353.jpg

如此,我们可以通过xxx.xxx.57.182:8080/container_name/file/filename来访问(由于是tomcat业务,代码是java,我容器里把代码自动打成了war包,所以访问的格式是这样,并且能在web直接访问):

wKiom1XRQIWxeI3VAAC1x9pnoIA946.jpg

可以看到,使用xxx.xxx.57.182:8080/container_name/file/filename访问的内容,就是svn根目录里的内容。

登陆容器,在代码目录下可以看到一个以container_name命名的war包,里面包含SVN库中所有的文件。

wKioL1XRQr_QGrmwAABt45JO1P4451.jpg

修改一下SVN里test6.jsp文件内容如下,并且提交之后当前版本是14:

wKioL1XRQuHC-PG5AAG0nng_zpU690.jpg

然后,进入程序开发模块,并选择update把14版本内容发布:

wKiom1XRQPezAVumAACIPeI8kEE402.jpg

wKioL1XRQxmDBRggAAD8TzSoSQg913.jpg

点击确定等待结果:

wKioL1XRQ0eCPRfIAAEdrlHXRk4407.jpg

登录WEB界面查看,结果有了相应的变化:

wKioL1XRQ2LzshiPAACuju62qZI686.jpg

自然,平台也提供了代码回滚功能,即如果我想将代码回滚到版本13,步骤如下:

wKiom1XRQXjCDB4RAAEI7BK5Tf4389.jpg

点击确认后,再回到WEB界面查看,代码已经回到先前的版本13:

wKioL1XRQ6LzPyXqAAC5Pe9fKfA244.jpg

测试需求二:对基于存放git库的php代码进行快速部署与测试

首先查看一下git库信息:

wKioL1XRQ8OzSKQcAACntUQ_55E941.jpg

这个是一个gitlab服务,里面有几个文件,先看看test3.html内容:

wKioL1XRQ-DiEUqIAAB-Rco3pQg301.jpg

接下来,利用我们的CaaS平台来构建PHP模式的测试项目:

wKiom1XRQfvx2ATmAAHXCGjY-BA483.jpg

选择好Nginx-php的镜像,然后输入git信息,之后就可以直接创建了:

wKioL1XRRCbiV772AAB1WkeHd9E177.jpg

这次不使用公网IP,直接使用防火墙,通过宿主机IP+自动生成的端口进行外网访问,并允许我公司的公网IPxxx.xxx.170.157/32访问容器的80端口:

wKiom1XRQjuSNZQRAADBBkpS8fY841.jpg

wKioL1XRRFqgihcHAAB12KRtblA133.jpg

这个规则就是允许外部访问端口为40005,因此我们通过宿主机ip+40005端口访问查看结果:

wKioL1XRRHvSTjCkAADFqM6xv58753.jpg

浏览器中返回的内容便是先前在git库中查看内容。接着我修改git代码信息如下:

wKiom1XRQqHg-cvRAAF5PMG_D-I360.jpg

wKioL1XRRMTgYT8eAAEVSRtg6uU040.jpg

返回平台,更新代码:

wKioL1XRROTjSfVfAAD9ZjrsJXI338.jpg

wKioL1XRRPjxXBtyAACMgoo1nak620.jpg

再通过WEB页面访问,会看到返回已经有了相应的变化:

wKiom1XRQwvA5B5BAACboOWLXAk936.jpg

同理,我们来进行一次回滚测试。我们使用git log 查询到之前版本的hash:

wKiom1XRQyyREQURAAI-yaBODM4924.jpg

回滚到上图选定的版本,可以在平台如下配置:

wKioL1XRRVPCPrYYAAETiirqJhM110.jpg

提示成功后,查看WEB 页面,可以看到已经回滚成功:

wKiom1XRQ23R2YOKAACumTl_Ypw266.jpg

至此,本次测试的2个实例都已经成功完成!

以后开发使用这个平台就可以快速的进行代码测试,中间不需要运维参与,大大的节省了中间的很多环节与时间,能对公司的deveop快速代码部署有很大的方便。

如何实现?

前端使用tornado+bootstrap,后端是python,通信使用socket+ssl。

我这里仅提供一下我是如何使用docker做半自动化代码部署,介绍一下功能与其他截图,大家可以自己根据需求来开发。