4

DevOps | CI/CD 方案调研笔记

 2 years ago
source link: https://ijayer.github.io/post/tech/devops/cicd/20180919-cicd-02-search/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

DevOps | CI/CD 方案调研笔记

2018-09-19 1946 words 4 mins read times read

了解当下主流的 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 解决方案,可按自身需求定制方案,但有学习成本。

查阅到的相关资源链接:

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!

查阅到的相关资源链接:

GitLab CICD

该方案先 Delay.

查阅到的相关资料链接:

Golang基于Gitlab CI/CD部署方案

该方案先 Delay.

See Also

Thanks to the authors 🙂


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK