方案由来:

      在分布式时代,多服务部署已是家常便饭,那么在内部测试阶段,多分支并行开发的环境,如何实现多分支且无等待测试便是当务之急。为什么强调“多分支且无等待”,jenkins可以很好的解决多分支的场景,但是如果是多服务并行开发,jenkins也显得很麻烦,因为每个分支的每个服务你都要创建一个jenkins的job实现单服务热部署操作,而且在部署阶段,此服务是不能对外提供服务的。测试人员需等待服务重启完成后才能继续测试。而且在测试环境需要开启多个服务的debug端口,方便远程调试,此时,宿主主机就要考虑大量的端口分配,如果使用不当,就会出现端口污染的情况。docker的出现不仅仅是在此处解决的端口污染的问题,还能将多个服务整合到一个docker容器中,统一管理一个分支对应的所有服务。那么通过jenkins+docker就可实现多分支,多服务清晰明了的目的。但是并不能实现测试人员测试无等待。在多服务重启的阶段,等待往往令人厌烦,如果你看到此文章,那就可以从此告别等待,真正实现“多分支+多服务+无等待”测试。

环境及软件:

     centos、jenkins、docker、rinetd(端口代理软件)、web相关软件(zk、jdk、tomcat)

实现原理:

     首先通过jenkins启动一个容器->测试人员测试->开发人员更新代码->jenkins启动另一个容器->启动脚本中监控各服务启动状态->启动成功后切换rinetd代理,切换刚刚最新代码的容器上->删除旧的运行容器。在整个容器切换的过程中,测试人员无需等待。支持无等待部署完成。

优点:更新代码对测试人员一般情况下是无感知的,提供测试人员更新代码时的等待时间

缺点:特殊情况下如在切换过程中,测试人员操作,会出现未知错误,可通过钉钉进行友好的通知,减少极端情况的出现。

具体脚本地址:https://github.com/surpass1990/docker_share

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐