DevOps | CI/CD 方案调研笔记
Contents
了解当下主流的 CI/CD 方案
开始之前
最近,项目节奏放缓,有了一定的空闲时间。所以呢,很早之前就想把 CI/CD 集成到现有项目中去的想法终于可以尝试一下了,同时,也算是为以后的系统完善先探探路。。。
先明确一下,我的开发工作目前处于一种什么样的环境下,即工作环境说明:
- 版本管理系统:Git
- 版本管理模型:Git Flow
- 代码托管服务:Bitbucket(内网服务器)
- 日常办公环境:JIRA + Hipchat + Bitbucket
- 应用服务部署:[ServerApp(Golang) + DB_Cluser(MongoDB) + Caddy …] -> Docker + 前端代码和静态资源
- 监控服务平台:cAdvisor + InfluxDB + Grafana
了解了工作环境的分布情况后,对 CI/CD 方案的选型也将有了更加明确的目标:
- 支持本地部署的方式(因为不会把代码放到公有云上托管呀)
- 原生 Docker 支持(或支持 Docker 运行)
- 有社区版,开源(因为现在只是做测试用,所以从最实际的需求出发:不收费)
- 服务打包发布到 Private Docker Registry
- 最后,这个 CI/CD 平台最好有权限管理功能,因为你做好交付给别人使用时并不能保证她们不会乱点、乱按呐!😂 …
需求上整明白了,在来看看一个项目要引入 CI/CD,一般情况下要具备什么样的条件呢?
可选的工具链
一个项目要引入CI/CD(持续集成与持续交付),一般情况下需要具备以下几个条件:内容摘自(感谢作者🙂)
- 源码管理仓库:可以是类似分布式的Git、集中式的SVN。
- 搭建CI平台:使用业界流行的CI软件(如Jenkins,Gitlab CI)搭建的CI系统平台。
- 源码质量管理平台:主要是指静态代码分析与测试覆盖统计,如业务比较流行的SonarQube,CheckStyle,FindBug等。
- 单元测试:项目组的每个成员都需要编写单元测试代码,并严格遵守约定的单元测试相关规范。
- 集成测试:包括可自动化执行的测试用例管理(编写、归档等),集成测试环境自动化搭建。
- 测试环境搭建自动化:主要是指可以自动化的部署集成测试环境,为集成测试、验收测试准备可用的测试环境。
- 软件发布平台:为可交付的软件提供对外发行及展示的平台,如基于Nexus的maven仓库、用于托管docker镜像的镜像仓库、NPM私有仓库等。
目前,有一些条件还未满足,或者说完成的不彻底,后边继续完善,先来实践一下 CI/CD 吧!
CI/CD 平台分析
先来看一张图 (图片来源)
满足上面条件的:Jenkins,Gitlab CICD, Go CD,Flow CI,其中 Flow CI 暂时不考虑使用。再者,还有一个作者图里没有提到,即 Drone, 详细说明在后面给出
接下来对各个平台做个简要介绍,更加详细的内容可在其官网或 Google 上查阅.
Jenkins
Jenkins 是 CI 市场中最知名且最常见的名号之一, Java 编写。其特点有:
- 功能:自动构建、测试及部署任务…
- 价格:免费
- 安装:Windows、Mac OSX 以及各类 Unix 系统,可以使用本机系统软件包以及Docker进行安装,也可在安装了Java Runtime Environment(JRE)的任何机器上独立安装。
- 优势:插件丰富,提供了超过1000款插件选项,可以集成几乎所有市场上可用的工具和服务。
- 挑战:作为一款开源工具,有提供了丰富的插件选项,因此可以选择性的定义适合自身的解决方案,这就需要投入一定的时间和精力去研究了。
- UI界面:较古老
- 以及其他未了解到的特性…
总结:开源、免费的 CI 解决方案,可按自身需求定制方案,但有学习成本。
查阅到的相关资源链接:
- Creating a Continuous Deployment Pipeline with BitBucket, Jenkins and Azure (part 3 of 3)
- Continuous Integration with Bitbucket Server and Jenkins
- Three amigos: Bitbucket + Jenkins + Docke
- 全开源方案实现基于Docker的CI/CD流水线
- 基于 Jenkins 的 CI/CD(一)
Drone
Drone Drone is a Continuous Delivery platform built on Docker, written in Go。
- 特点:原生 Docker 支持
- 价格:有社区版,免费
- 安装:支持本地部署
- 仓库:Github, Gitlab, Bitbucket 以及 Gogs 等
- 优势:Drone 引入pipline 的概念,整个build过程由多个stage组成,每一个stage都是docker
- 缺陷:当前版本:V0.9.0
- 作者是一个人开发的项目,API 暂时还不稳定,且文档不完善, 可能在使用过程中会踩到一些坑,这个时候就需要翻一下 drone 的 discuss forum 以及 Github issue list
- Plugins 不太丰富,许多时候可能需要自己定义(shell,python…)
- Web UI 简单,还有许多需要完善的地方
总结:总体来说,Drone 还很年轻,但发展前景不错而且原生支持 Docker, 社区也很活跃,有吸引到我。So, 决定先体验下 Drone。 其他方案先 Delay!
查阅到的相关资源链接:
- Drone 官方文档
- (Drone全面介绍)Slides: 用 Drone 打造輕量級容器持續交付平台
- (Drone全面介绍)YouTube:用 Go 語言所打造的 Drone 輕量級容器持續交付平台
- 基于DOCKER的CI工具—DRONE
- Drone 一个原生支持 docker 的 CI
- 用 Drone 打造 CI/CD flow
- Drone+Docker部署示例
- Drone CI 搭建
- Drone 搭配 Kubernetes 部署 Go 語言項目
GitLab CICD
该方案先 Delay.
查阅到的相关资料链接:
Go CD
该方案先 Delay.
See Also
Thanks to the authors 🙂