How-select-continuous-integration-platform-part-2
新的一年,开始研发新的产品。由于新团队成员,所以需要构建一套持续集成平台。
我从事的是开源软件事业,所以需要访问互联网上面大量的软件包,每天都有上百个容器的创建和销毁,一切都是为了自动化,更高效率的交付产品。让大家专注工作于正确的方向上,更快的迭代产品,专注coding,而不会被固定的流程化操作的打断工作进度。
说几点需求点
- 办公网络慢、导致编译效率低?
- 无本地仓库,构建程序效率低下?
- 很多资源无法访问?
- 通过VPN可以直接访问公司内网?
- 灵活的代码版本管理仓库?
- 自动化构建、测试、发布?
- 开发专注于coding
如何提速
- 升级公司机房网络带宽,提升,比如:50M
- 使用本地仓库,提高构建效率
- 无法访问国外资源,通过架设VPS
- 无时无刻进入工作状态,提供访问公司内网的穿透工具
- 选择一个灵活的源码管理工具
- 建立一个持续集成平台,自动化完成代码的构建,测试,发布,预览
- 优化整体流程,避免重复的劳动,尽量自动化
- 让开发专注于coding、review中
- 通过容器技术来统一运行环境,减少基础环境重复构建的麻烦
- 通过容器技术,持续得发布版本,动态回滚
- 统一的源码版本管理机制,每个发布的版本,具备可回溯性
注意:
VPS比较敏感,其实就是一句命令的事,只要你有国外的服务器。:> 私我
如何选型
在构建这些基础环境之前,你需要有一个完整的研发计划,涉及哪些技术栈分析。
1 技术栈
语言方面:JAVA
,nodejs
,JavaScript
为主,自动化部分使用Python
、Shell
、groovy
、ruby。
构建工具:ant、maven、ivy、gradle、sbt、npm、git
技术框架:Angular、Spring Boot、BootStrap、Jquery
支持系统:Ubuntu、centos、redhat
2 资源列表
- 内网私服,提供各种package快速访问
- 容器,提供定制的操作系统版本
- 持续集成服务器,完成代码的自动化pull、build、test、run、push
- 源码服务器,提供源代码托管
- 容器镜像服务器,提供本地定制化容器镜像存储服务
- 虚拟化测试集群,提供自动化测试所需资源
需要5台服务器,若干台测试服务器。
私服,可以通过虚拟化服务器提供,底层最好提供raid容错,防止硬盘损坏数据丢失。
容器,提供本地容器平台,可以自动去中央仓库同步没有的容器镜像。
虚拟化,参考:我为什么弃用OpenStack转向VMware vsphere
。
以上服务器都可以使用云主机,针对私服、源码服务器、镜像服务器底层存储使用云硬盘(带有分不知容错的存储软件),保障数据安全。其他服务器随意使用虚拟机即可。
使用5台服务器,组成一个集群,初步具备基础硬件资源,可以开始搭建软件资源。
3 技术选型
根据技术栈和所需要的资源列表,我们完成技术选型的工作。
对于持续集成平台,涉及大量的环节,我们需要优化的点很多,下面我们先完成技术的选择。
- 持续集成工具,选择Jenkins
- 容器技术,选择Docker
- 灵活的代码版本管理工具,选择GitLab
- 镜像管理工具,选择harbor
- 私服,选择Jfrog
- 虚拟化,选择vmware vsphere、openstack
- 源码二进制管理,选择Apache
- 任务追踪管理,选择Jira
- 团队协作,Confluence
- 自动化运维工具,选择SlatStack、puppet
由于我们参与的软件是apache项目,所以我们使用Atlassian
全家桶。
同质化的产品也非常的多,我选型的过程中调用过很多软件,目前非常可喜的是大部分软件都提供Docker
安装预览,可以体验一下功能,我主要还是选择主流的软件,或者用户体验非常好的产品,可以帮助我节省时间,毕竟我们主要的精力是研发产品。
经过使用很多软件,大浪淘沙,最后剩下的都是精品。
把这些软件很好的串联起来,可以完成企业持续集成平台的构建工作。
我们内部还有一套自动化构建各种平台的软件包框架,一键构建rpm、deb软件包。还提供通过docker自动化测试软件包的正确性、一键发布软件包到线上,可以很好的把持续集成平台串联起来。
通过定制Ubuntu、Centos不同版本的Docker镜像,直接自动化传参数启动不同的docker系统版本进行流水线式的自动打包发布,测试。
通过钩子程序,发现有代码更新自动化的拉取最新合并的代码构建、测试、生成测试报告,邮件反馈给开发此功能的开发人员。