关键字:配置管理,CI,CD,QA
前言
和几个TW的朋友共事一年多,学到了很多阳春白雪的东西,比如持续集成、DevOps,以及敏捷云云。
自以为可以出师,结果在实施的过程中遇到很大的阻力,大部分同学不理解CI的作用,认为这是变相的传销。
如何让领导和程序员满意才是一套持续集成系统成功实施的关键。
最简方案:GitHub + TravisCI + CodeCov + VPS
GitHub不仅仅是一个代码托管网站,更是全世界最大的同性交友社区。替代方案:BitBuket
Travis CI可以用GitHub账号登录,有助于理解持续集成的理念,文档是英文,但是很简单。替代方案circleci
VPS推荐Linode,顺便搭建一个SS,但是由于某些原因,你可能还是需要阿里云。
代码测试覆盖率可以使用codecov(可选)。
优点
- 便宜
- 完全不需要维护硬件。
缺点
- 访问外网不稳定。
- GitHub、TravisCI和CodeCov都有收费项目。
总结
适合可以开源的小项目,主要是用来开拓眼界。
初级方案:代码托管服务 + Jenkins + VPS
如果觉得GitHub网速太慢,可以考虑使用国内的替代品,比如开源中国的马云,哦,sorry,是码云,或者CSDN的CODE。它们的私有仓库是完全免费的。
随着业务的扩大,Travis CI的问题就开始显露出来:不稳定!特别是SSH通道。当然,这不是Travis CI的错,你懂的……
这时候就可以考虑换成Jenkins了,在国内,持续集成基本就等同于Jenkins。
除非特殊用途,VPS也请选择国内的。
PS. 如果使用的是码云,可以配套使用开源中国提供的SonarQube,See:http://sonar.oschina.net/
优点
- 费用低(只需要VPS的费用)。
缺点
- 账号不通用,配置管理混乱。
总结
适合没有敏感信息的小项目。
万精油:GitLab + Jenkins + Nexus + SonarQube + VPS/VMWare
当公司步入正轨以后,一般就会有一套OA系统,比如基于LDAP的企业通讯录。这个时候就需要统一的配置管理和一个配置管理员(CMO)的角色。
GitLab是比较成熟的解决方案,完全可以替代GitHub,Code Review的时候挺好使的。
另外可以考虑增加构件仓库Nexus OSS和代码质量检查的平台SonarQube。
Nexus私服大家应该不陌生,缺点是没有官方的LDAP插件,但是对于大部分开发人员来说可以不关注,我们可以把私服地址配在公司级Root POM。
SonarQube可以和Jenkins无缝集成,Jenkins的流水线应该包括一个QA Job,如果扫描出致命或者严重Issue直接失败。代码质量问题应该马上解决,而不应该留到Code Review。
PS. Jenkins、GitLab和SonarQube都可以通过LDAP进行登录。
优点
- 费用适中。
缺点
- 无明显缺点。
总结
适合大部分的中小企业。
终极方案:自建CI/CD流水线
中大型企业不差钱,万事不求人,所以自建持续集成流水线就成为必然。
首先说说万精油方案的局限(不算是缺点):
- Jenkins、Nexus还有SonarQube最大的共性就是如出一辙的插件系统,特别是前面两个,完全是基于文件系统(主要是xml)的,当接入的项目越来越多,性能就会急剧下降。
- 虽然可以通过LDAP登录,但是毕竟是完全独立的系统,无法做到单点登录。
- 风格不统一,领导要看报表。
最简单的做法就是给这些系统加层皮,这也是很多企业或者部门的做法。不过依然无法解决性能问题。
现在来说说我所了解的一些方案:
-
Jenkins Job Builder
OpenStack CI系统的核心,配合OpenStack自己的任务调度,把Jenkins做成了真正的分布式。See: Understanding the OpenStack CI System。 -
CloudBees
差不多是Jenkins的商业版,最大的特点是贵!哈哈,开玩笑,持续集成服务就没有便宜的。大致的做法就是workscpce共享高速磁盘。 -
Artifactory
JFrog出品,可以用来替换Nexus,原生支持LDAP、分布式,需要安装数据库,一般大公司直接找他们(一般和Jenkins一起)定制开发。 -
Go CD
TW出品,号称业界唯一能达到持续部署高度的平台,某为就有基于Go进行定制开发。
优点
- 成本高昂。
缺点
- 无
总结
适合大中型企业。
---------EOF--------