如何基于Docker和Jenkins打造⾯向初创公司的持续集成体系
Posted 逐鹿X
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何基于Docker和Jenkins打造⾯向初创公司的持续集成体系相关的知识,希望对你有一定的参考价值。
华兴资本逐鹿X 技术负责人 丁博约
90后连续创业者、Rubyist,拥有五年互联网产品研发经验,于2014年加入华兴资本。此前历任GXG官网架构师、Opifices,Inc. 联合创始人、泡学网CTO,并曾经担任多家创业公司技术顾问。作为资深白帽子,曾被阿里巴巴集团安全应急响应中心(ASRC)授予“高级安全专家”称号。
谈到持续集成,⼤家可能⾸先想到的是「⾃动化测试」。但事实上,我个⼈认为从DevOps的⾓度来说持续集成会有包含到整个研发⽣命周期中可以被⾃动化的⽅⽅⾯⾯。
如图所示,除了可以根据⽤例来跑⾃动化测试并输出对应的测试报告以外。 包括诸如:基于源代码来进⾏镜像构建、使⽤静态代码分析器针对代码风格以及潜在的 隐患点(⽐如: N+1查询、SQL注⼊风险点)进⾏⽩盒检查都是持续集成所能够带来的价值。
在⽅案的具体选型上,之前我们也尝试过⼀些必源的商业⽅案——⽐如teamcity, 但是发现因为⽣态系统完备性的问题 其实会有蛮多⽐较⼤的坑,需要⾃⼰造⼀⼤堆轮⼦。所以,我们最后综合考虑选⽤了⽣态圈最为完备的开源CI系统——Jenkins。
为什么我们觉得每个初创公司都会需要⼀套基于Docker和Jenkins实现的持续集成系统?
● ● ●
⾸先,从持续集成的⾓度来看⾃动化是最⼤的优势所在。根据我之前的经验,在技术团队内部进⾏布道推⼴测试驱动开发code review统⼀的代码风格约定等最佳实践的时候,所遇到的最⼤障碍是⼈。因为⼈会有天⽣的惰性。⽐如「哥们,我这个 hotfix现在急着merge到⽣产环境,变量命名不符合规范的问题 回头再改。你先帮我把 code review 通过来吧」或者「就改了2⾏代码,没必要在跑单元测试,直接提pr得了」 诸如此类等等。 然后,我个⼈觉得解决这⼀系列问题的最好⽅案是通过机器⽽⾮⼈, 达成对于遵守规范的强约束。
然后,之所以考虑将jenkins本⾝以及jenkins具体的构建节点,都基于docker来进⾏运⾏。⾸先,毫⽆疑问是考虑到了部署上的简易性。⼀⾏命令,如丝般顺滑。另⼀⽅⾯,对于处在快速成长期的初创公司来说⽆论是团队成员或者业务线成倍的快速扩充 都是⼀件⾮常习以为常的事情。基于docker实现的整个ci架构,有助于按需快速简便的伸缩节点数量。
整个持续交付体系在逐⿅X团队内部的实践情况
● ● ●
逐鹿X的整个研发团队目前有11个⼈,完整的⽣产环境由5个docker容器组成。代码托管在github的私有仓库上,使⽤标准的git flow来做分⽀管理。 同时采用了诸如 结对编程、Code Review、TDD(测试驱动开发)、静态代码检查 等等一系列最佳实践。
完整的workflow如上图所⽰。
⾸先,RD 同学会在⾃⼰的 feature 分⽀中完成业务开发,然后提 PR 申请 merge 到开发分⽀。此时,Jenkins 会开始跑相关的⾃动化测试⽤例,同时使⽤静态代码分析器进⾏代码风格检查以及⽩盒安全测试。
随后我们会指定一名同学进行 Code Review,并且通过 Jenkins 会⾃动在开发环境的联调机上执⾏部署。 不过考虑到从 feature 分支 merge 到 develop 分支 是⼀件⾮常⾼频的事情,所以出于速度上的考量——我们基于shell脚本⽽⾮docker镜像进⾏部署。
⽽当此⼀迭代中的所有功能全部完成开发,并且通过 RD ⾃测后。我们会将开发分⽀的代码 merge 到 release 分⽀。此时 Jenkins 则会开始构建对应的 Docker 镜像,并且部署于 Staging 环境。
⼏个流程中⾄关重要的⼀些细节
● ● ●
⾸先,将整个⼯作流和团队的IM⼯具打通是确保整个⽅案顺利实施的关键节点。 只有当团队中的所有成员,能够在第⼀时间获悉CI当前的构建状态。才能确保整个流程顺畅⽆阻的执⾏下去。 对于使⽤slack作为团队im⼯具的同学,jenkins中有slack相关的插件可以满⾜你们的需求。然后,如果有同学是使⽤钉钉作为团队im⼯具的话,那么也告诉⼤家⼀个好消息。我们已经开发了1个jenkins的钉钉通知插件,将在内部基本使⽤稳定后开源放出,⼤概是 在半个⽉以后。
再然后,有1个可能⾮常容易被忽略的点是——当通过ci⾃动化部署测试环境的时候。最好,同时⽤shell脚本将⽣产环境的数据脱敏后导⼊到测试环境。这样可以使得,很多因为脏数据导致的问题在测试环境中提前得到暴露。
还有就是,⼀定⼀定要记得尽量把整个持续集成环境部署在海外。我们⽬前采⽤ 的是青云⾹港机房的服务器,不然⽆论是拉docker镜像还是跑npm或者github拉代码 都会慢到你想哭。 穿越长城,才能⾛向世界。
▂
作者 | 丁博约
逐鹿X 新媒体——创投圈的「Discovery」
「采访」&「投稿」
请发送您的个人及企业资料至:
marketing@zhulux.com
我们不抢媒体的风头,我们只做创投的信息连接者!
点击“阅读原文”查看完整讲义!
以上是关于如何基于Docker和Jenkins打造⾯向初创公司的持续集成体系的主要内容,如果未能解决你的问题,请参考以下文章
使用Jenkins Pipeline插件和Docker打造容器化构建环境
ubuntu 中安装jenkins,基于docker运行jenkins