码迷,mamicode.com
首页 > 其他好文 > 详细

4、Gerrit+Jenkins搭建CI系统

时间:2016-05-13 04:57:43      阅读:5969      评论:0      收藏:0      [点我收藏+]

标签:ci系统   gerrit、jenkins   

一,CI系统流程

开发人员将本地Git仓库中的代码更新后,push到Gerrit系统上对应的项目仓库中;该动作会触发Gerrit系统发送邮件通知给Owner,Owner此时需要登录Gerrit Web页面,进行Code Review(代码审核)。如果审核通过,则Owner进行Submit提交动作。此时开发人员push的代码才会Merge(合并)到Gerrit服务器上的对应项目仓库中。如果审核不通过,则开发人员需要修改代码后再次push,直到审核通过为止。而Jenkins被Gerrit系统上某一事件触发(可以为Submit,也可以是push,在Jenkins系统上可以自行设定),就会构建该项目,包括编译、打包、上传到指定的服务上等。

以上就是CI系统工作流程,其中还可以在Jenkins上加入代码单元测试等。只有当测试通过,才会构建项目并发布到服务器上。具体如何做单元测试,还在研究中。


二、CI系统环境

Git+Gerrit+Jenkins(安装Gerrit Trigger插件)

Gerrit服务器:172.16.206.133

Jenkins服务器:172.16.206.129

这两台服务器上都必须安装Git,他们工作都依赖于Git环境


Gerrit和Jenkins的前面的文档里面有,这里不再演示。需要注意的是:

1、安装Gerrit时,在交互安装过程中,系统会问你是否安装Label Verified ,默认是不安装的,如果要搭建CI,这里需要选择安装。如果系统中没有安装这个东西,后期可以再装上,但是网上的几个方法试下来都失败了,所以我只能重新执行Gerrit安装命令:java -jar /path/to/gerrit.war  /path/to/gerrit_dir

重新安装了一遍,重装前,先停掉gerrit服务,交互安装过程中,很多步骤使用老的配置,唯独Label Verified  选择y,表示安装。


2、Jenkins安装Gerrit Trigger插件

Jenkins官网有介绍这个插件的用法:

https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger#GerritTrigger-Gerritaccessrights



三、Gerrit上的配置

1、在Gerrit服务器上为Jenkins服务器创建一个账号,如jenkins。用该账号登录Gerrit Web,将该账号加入系统预设的Non-Interactive Users组。该组默认就已有监听Stream Events权限,Steam Events的原理是:Gerrit收到代码提交后,会以event的形式发给Jenkins,从而触发Jenkins自动构建。


2、为该账号设置SSH Key,即将Jenkins服务器的root账户下的公钥传到Gerrit系统为Jenkins服务器创建的jenkins账号下的SSH Public Keys中,如果不知道如何设置,请参考前面的Gerrit用户配置文档。

技术分享

技术分享


3、设置Non-Interactive Users组的权限,这个权限在All-Projects上设置

技术分享

技术分享

技术分享

注意,对于Label Verified权限,很多文章里面只说给Non-Interactive Users组权限,但是测试下来,如果不给Administrators和Project Owners组Verified权限的话,这两个组就没有Submit权限了。因为只有先Verified,才会有Submit。具体这个Verified权限是干嘛的我还没有研究。应该可以不需要这个权限,有些文章里面说是双重保障。


四、Jenkins上的配置

1、安装Gerrit Trigger插件

系统管理==>管理插件==>可选插件,搜索Gerrit Trigger,安装后重启Jenkins


2、配置Gerrit Trigger

系统管理==>Gerrit Trigger==>Add New Server

技术分享

测试成功就会显示Success,注意hostname这里我填的是Gerrit服务器IP,可以填主机名,但是必须能解析才行。到此为止,配置基本完成了。


五、创建一个Project,演示如何搭建CI环境。

1、Gerrit上创建Project,名为CITEST。Administrators组内成员才能创建项目。

技术分享


2、登录Jenkins,创建构建一个自由风格的项目

技术分享


源码管理这里选择Git,Repository URL就是Gerrit Web上的为匿名用户提供的地址,注意把地址中的

git clone命令去掉,Jenkins服务器自身安装了git,集成了git环境。

技术分享



构建触发器选择Gerrit event

Choose a server:视情况选择Any Server或具体特定server。我这里选择前面配置的Gerrit Server

Trigger on:可以不配置,不配的话保存job后会默认自动选中事件 Patchset Created(最关键的就是这个事件,是提交代码(push而不是Submit)后就触发的事件) 和 Draft Published。我选择的是Change Merged,表示当代码审核通过后,Owner点击Submit,Merge后才出发构建。

Gerrit Project:需填完整 Pattern 和 Branches 内容才有效,例如Type选Plain,值填、Branches的Type选Plain、值填master;或Type选Path,Pattern填**,Branches的Type选Path,Pattern填**匹配任何project和branch,更详细的介绍可点相应问号查看。其他选项是什么意思还没来得及去研究。

技术分享

技术分享

构建后用邮件通知,这个需要安装Email相关插件,如果不清楚如何配置,可以查看之前的Jenkins相关文档。

技术分享

到这里CI环境就搭建好了。




六、跑一个项目


1、git全局配置,配置用户名和邮箱,这里的用户名和邮箱必须要与Gerrit Web上的账户名邮箱一致,

否则在执行git push命令时报错:remote: ERROR:  does not match your user account.

[user1@host2 ~]$git config --global user.name "user1"
[user1@host2 ~]$git config --global user.email "XXX@qq.com"
[user1@host2 ~]$ git config --list
user.name=user1
user.email=XXX@qq.com


2、登录普通用户user1,将CITEST项目克隆到本地

[user1@host2 ~]$ git clone ssh://user1@172.16.206.133:29418/CITEST && scp -p -P 29418 user1@172.16.206.133:hooks/commit-msg CITEST/.git/hooks/
Initialized empty Git repository in /home/user1/CITEST/.git/
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
remote: Total 2 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (2/2), done.
commit-msg                                                                        100% 4662     4.6KB/s   00:00    
[user1@host2 ~]$ ls
CITEST


3、进入到CITEST文件夹,新建一个citest.sh文件,内容随便填。

[user1@host2 CITEST]$ ls
citest.sh


4、push该文件到Gerrit服务器

[user1@host2 CITEST]$ git add citest.sh 

[user1@host2 CITEST]$ git commit -m "创建了文件citest.sh"

[master dfd5972] 创建了文件citest.sh

 1 files changed, 1 insertions(+), 0 deletions(-)

 create mode 100644 citest.sh

[user1@host2 CITEST]$ git push origin master:refs/for/master

Counting objects: 4, done.

Writing objects: 100% (3/3), 311 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

remote: Processing changes: new: 1, refs: 1, done    

remote: 

remote: New Changes:

remote:   http://172.16.206.133:8081/18 创建了文件citest.sh

remote: 

To ssh://user1@172.16.206.133:29418/CITEST

 * [new branch]      master -> refs/for/master


5、用Gerrit管理员账号登录Web UI进行审核

技术分享

注意Code-Review时,值的范围是-2到+2,-2是审核不通过,+2是审核通过,-1、0、1只能作为参考选项选项,如果要通过代码审核,必须至少有一个+2,而且不能有-2,两个+1不等于+2。


技术分享

管理员做代码审核后,立马就说到Gerrit管理员邮箱发出来的邮件。

技术分享


当管理员点击Submit后,立即出发了Jenkins构建。

技术分享


Jenkins上项目构建完成后,发送邮件通知给相关人员

技术分享



4、Gerrit+Jenkins搭建CI系统

标签:ci系统   gerrit、jenkins   

原文地址:http://zengestudy.blog.51cto.com/1702365/1772709

(2)
(3)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!