Jenkins + Gerrit + Git
来源:互联网 发布:加长棍刀在淘宝叫什么 编辑:程序博客网 时间:2024/05/20 23:38
gerrit的精髓在于不允许直接将本地修改同步到远程仓库。客户机必须先push到远程仓库的refs/for/*分支上,等待审核。
gerrit上也可以对比代码审核提交前后的内容状态。
很多时间,我们希望在对代码进行review之前能先跑一遍代码分析和单元测试后,再进行人式review,这个时间可以使用Jenkins的自动化部署实现。
当用户git review提交后,代码先提交到Gerrit的临时git库。所以需要当Gerrit项目仓库有变化时,先通过Jenkins来进行自动化测试和代码分析,Jenkins测试通过后,打上Verified,然后再交给人工review,人工review通过后,自动同步到远程git库中。Gerrit 自带一个 Replication 功能,同时我们在安装 Gerrit 时候默认安装了这个 Plugin,通过添加replication.config 给 Gerrit即可。
用户git review提交代码 -> 提交到Gerrit库 -> 触发Jenkins自动测试,测试通过Verified -> 人工审核Review,review通过 -> Gerrit执行Replication -> push Git remote
Gerrit是一个基于Web的服务,提供代码的Review功能,Gerrit肯定要启动Web服务器,并且安装Gitweb。
1. 用户git review时自动将代码提交到Gerrit库,而不是远程Git库:在工程目录下添加.gitreview的配置信息,指定Gerrit库并且用户需要有Gerrit的库的访问权限,通过ssh访问
2. Jenkins要集成Gerrit的触发功能:安装Gerrit Trigger Plugin插件,并且配置Trigger的时机条件
3. Jenkins配置自动化测试及代码分析功能:通过SonarQube实现代码分析
4. Jenkins通过测试后给代码打上Verified:Gerrit通过启动SSH服务允许Jenkins来直接与Gerrit进行通信,Jenkins要添加Jenkins用户并配置Gerrit Server信息并且可以请求成功
5. Gerrit配置Code Review需要两步:Jenkins Verified和人工Review:将Jenkins用户添加到指定None-Interactive-Group里并将其赋有Verified功能。
6. Gerrit配置replication.confg,在代码Review通过后,自动将patch合并到远程Git库的master上:需要在远程Git库上添加SSH Public Key,并且在Gerrit服务器上配置config及Known_hosts。
1. 创建用户ssh
#ssh-keygen -t rsa -C michaeltang@openmore.org
# cat ~/.ssh/id_rsa.pub
将id_rsa.pub添加到Gerrit上新创建的用户的SSH公钥里。
为Git项目添加.gitreview配置
# vim .gitreview
[gerrit]
host=xx.xx.x.xx
port=29418
project=
test
-project1.git
2. Jenkins安装Gerrit Trigger
Jenkins->系统管理->管理插件->可用插件->搜索Gerrit Trigger->安装
配置Gerrit Trigger
Jenkins系统管理->Gerrit Trigger
测试下能否连接Gerrit Server。
自动Scanner Shell
cd /tmp# 将代码放到tmp里if [ -d sonar_tmp ];then echo 'sonar_tmp exist' rm -rf sonar_tmp/*else mkdir sonar_tmpficd sonar_tmp# clone代码git clone http://xx.xx.xx.xx/p/ipottery.gitcd *# 获得所有的changesgit fetch http://xx.xx.xx.xx/p/ipottery.git refs/changes/*:refs/changes/*# 获得最新的修改CommitNo=`tail -n1 .git/FETCH_HEAD | awk '{print$1}'`# 合并到当前临时分支git merge $CommitNo/home/gerrit/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner -Dsonar.host.url=http://sonar.wenxy.cc -Dsonar.sourceEncoding=UTF-8 -Dsonar.projectName=pottery_code_review -Dsonar.projectVersion=1.0.1 -Dsonar.projectKey=pottery_code_review -Dsonar.sources=src -Dsonar.projectBaseDir=.
3. Jenkins自动化测试及代码分析
1> 创建Jenkins job
2> git里选择Repository URL 填写Gerrit的库地址:http://xx.xx.xx.xx:7081/p/testgerrit.git
3> 构建触发器,选择Gerrit Event,选择前面2配置的Server名,Dynamic Trigger Configuration里选择Plain/testproject/Plain/master,构建里选择Execute SonarQube Scanner
4. Jenkins Verified
1> 在Gerrit里创建Jenkins用户,并且为Jenkins生成SSH密钥,将公钥添加到Jenkins的Gerrit帐户上。
2> 为所有的Gerrit添加Verified功能的支持
$ git remote add origin ssh://gerrit@103.10.86.30:29418/All-Projects$ git pull origin refs/meta/config$ vim project.config[label "Verified"] function = MaxWithBlock value = -1 Fails value = 0 No score value = +1 Verified$ git commit -a -m 'Updated permissions'$ git push origin HEAD:refs/meta/config
5. Jenkins Verified和人工Review
1> 将Jenkins用户添加到Non-Interactive User组内
Projects->List->All-Projects
Projects->Access
Global Capabilities->Stream Events 点击 Non-Interactive Users
添加 Jenkins@zjc.com 用户到 ‘Non-Interactive Users’ 组
2> 在Gerrit里添加上对Jenkins Verified的支持
Projects -> List -> All-Projects
Projects -> Access -> Edit -> 找到 Reference: refs/heads/* 项 -> Add Permission -> Label Verified -> Group Name 里输入 Non-Interactive Users -> 回车 或者 点击Add 按钮 -> 在最下面点击 Save Changes 保存更改。
6. 配置replication.config
# cd /home/gerrit/gerrit_site/etc/
# vim replication.config
[remote
"test-project1"
]
projects =
test
-project1
url = git@xx.xx.xx.xx:dev-group
/test-project1
.git
push = +refs
/heads/
*:refs
/heads/
*
push = +refs
/tags/
*:refs
/tags/
*
push = +refs
/changes/
*:refs
/changes/
*
threads = 3
更新known_hosts文件:
# sh -c "ssh-keyscan -t rsa xx.xx.xx.xx >> /home/gerrit/.ssh/known_hosts"
# sh -c "ssh-keygen -H -f /home/gerrit/.ssh/known_hosts"
# chmod 600 ~/.ssh/config
设置gerrit用户的 ~/.ssh/config
# vim /home/gerrit/.ssh/config
Host xx.xx.xx.xx:
IdentityFile ~/.
ssh
/id_rsa
PreferredAuthentications publickey
OK,just enjoy it.
参考:
http://www.cnblogs.com/kevingrace/p/5651447.html
权限配置:
http://openwares.net/linux/gerrit_privilege_setup.html
- Jenkins + Gerrit + Git
- Git+gerrit+jenkins安装配置
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- 团队开发利器Redmine,git,gerrit,jenkins
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- CI 系统搭建:Git、Gerrit与Jenkins
- git+gerrit+jenkins经典组合之安装使用
- 转载_CI 系统搭建:Git、Gerrit与Jenkins
- 持续集成之 Git Gerrit Jenkins Blade 工作流
- git+gerrit+jenkins经典组合之安装使用
- 转载_CI 系统搭建:Git、Gerrit与Jenkins
- LDAP + redmine + gerrit + jenkins + gitlab -- 添加已有git仓库到gerrit
- git-gerrit
- 卡特兰数
- Python爬虫学习笔记--多进程用法
- HDU 6045 Is Derek lying?(思维)
- Android高级控件之RecycleView,Gallery,ViewPage
- linux route命令详解
- Jenkins + Gerrit + Git
- Event事件对象之表单事件
- FZU 2150 Fire Game(多起点bfs)
- 调用天气api实现查询各城市天气
- UVA 11806(B)——Cheerleaders 容斥原理 离散数学列举所有情况
- Mongodb从0到1系列七: 分片
- 【POJ2096】Collecting Bugs
- 线程的优先级别
- Asp.Net MVC webAPI Token based authentication