CI(持续集成)体系你了解多少呢?

近年来,由于开源项目、社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发、敏捷开发、迭代开发、持续集成和单元测试这些拉风的术语。然而,大都是仅仅听到大家在说而已,国内也很少有公司能有完整的 CI 体系流程。反之一些开源项目都有完整的 CI体系,比如openstack。代码托管->代码审核->代码发布的这一套自动化流程实现,采用“Gitlab+Gerrit+Jenkins”的模式在服务器上部署对接环境,大家可以去玩玩,在这里我简单缕缕这其中涉及千丝万缕的关系。

作为程序猿/媛,相信大家对“git”并不陌生,Git 是 [Linus Torvalds](https://baike.baidu.com/item/Linus Torvalds/9336769) 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代BitKe。来看看git“全家桶”:
常见的各种git***

git 是一种版本控制系统,是一个命令,是一种工具。
github 是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱。
gitlab 类似 github,一般用于在企业内搭建git私服,要自己搭环境。
gitee 即码云,是 oschina 免费给企业用的,不用自己搭建环境。
git-ce 是社区版,gitlab-ee是企业版,收费版。

GitHub

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。
GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目Spring、MyBatis、React、Vue等。
2018年6月4日,微软宣布,通过75亿美元的股票交易收购代码托管平台GitHub。

GitLab

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它使用Ruby语言写成。后来,一些部分用Go语言重写。截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者。GitLab被IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等组织使用。
Jenkins
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
Gerrit
gerrit的工作模式是所有真正的merge由gerrit负责,我们的提交只是提交给了gerrit,gerrit会通知项目的负责人来审核代码,同时也会调用一些自动化测试构建工具来检查代码是否符合要求,只有都通过后才会的合并进主干代码。所以可以把gerrit看成是代码和提交者之间的一道门。

再来看看这套CI体系的流程
1)Gitlab上进行代码托管
在gitlab上创建的项目设置成Private,普通用户对这个项目就只有pull权限,不能直接进行push。
Git自带code review功能
强制Review :在 Gitlab 上创建的项目,指定相关用户只有Reporter权限,这样用户没有权限使用git push功能,只能git review到Gerrit 系统上,Jenkins在监听Gerrit上的项目事件会触发构建任务来测试代码, Jenkins 把测试结果通过 ssh gerrit 给这个项目打上 Verified (信息校验)成功或失败标记,成功通知其它人员 Review(代码审核) 。
Gitlab保护Master 分支:在 Gitlab 上创建的项目可以把 Master 分支保护起来,普通用户可以自己创建分支并提交代码到自己的分支上,没有权限直接提交到Master分支,用户最后提交申请把自己的分支 Merge 到 Master ,管理员收到 Merge 请求后, Review 后选择是否合并。
可以将gitlab和gerrit部署在两台机器上,这样gitlab既可以托管gerrit代码,也可以作为gerrit的备份。因为gitlab和gerrit做了同步,gerrit上的代码会同步到gitlab上。这样即使gerrit部署机出现故障,它里面的代码也不会丢失,可以去gitlab上拿。
2)Gerrit审核代码
Gerrit是一款被Android开源项目广泛采用的code review(代码审核)系统。普通用户将gitlab里的项目clone到本地,修改代码后,虽不能直接push到代码中心 ,但是可以通过git review提交到gerrit上进行审核。gerrit相关审核员看到review信息后,判断是否通过,通过即commit提交。然后,gerrit代码会和gitlab完成同步。
Gerrit的精髓在于不允许直接将本地修改同步到远程仓库。客户机必须先push到远程仓库的refs/for/*分支上,等待审核。gerrit上也可以对比代码审核提交前后的内容状态。
3)jenkins代码发布
当用户git review后,代码通过jenkins自动测试(verified)、人工review 后,代码只是merge到了Gerrit的项目中,并没有merge到 Gitlab的项目中,所以需要当 Gerrit 项目仓库有变化时自动同步到Gitlab的项目仓库中。Gerrit 自带一个 Replication 功能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值