jenkins + gerrit 自动code review
最近有需求要push review以后自动跑一些测试,如果通过就自动+2 不通过就-2,目前做法如下(jenkins gerrit均已配置好,Jenkins可以连接gerrit并拉代码):
1. Jenkins上添加项目时,“源码管理” 选择git,并填写正确的“路径”和“分支”(分支留空或者填**会管理所有分支)
2. jenkins项目的“构建触发器” 选择 "Gerrit Trigger"(Jenkins需要安装此插件),“Trigger on” 选择 “patchset created”,"Dynamic Trigger Configuration" 填写正确的“gerrit项目名”和“分支”(分支pattern填**可以监听所有分支);如果希望comment也监听到,则“Trigger on”同时选上“Comment Added Contains Regular Expression”,Value为期望的正则表达式
3.jenkins项目的“构建”选择“execute shell”,command中填写build命令
4.build命令中可以使用Jenkins自带的变量获取一些信息(可用变量在Jenkins上可以查看):
$JOB_NAME Jenkins项目名
$JENKINS_HOME Jenkins根目录
$BUILD_NUMBER 当前构建号
$GERRIT_PROJECT gerrit项目名
$GERRIT_BRANCH gerrit分支
$GERRIT_EVENT_TYPE 触发Jenkins进行build的gerrit事件类型(比如patchset-created)
$GERRIT_PATCHSET_REVISION gerrit的commit id
$GERRIT_REFSPEC 当我们的commit Push到Gerrit等待review时,Gerrit会将此commit保存在一个名为“refs/changes/xx/yy/zz”的一个暂存branch中
5.实例脚本(build.sh):
#!/bin/bash
#拉取发起code review的代码,此时Jenkins无法自动拉取(有人知道如何自动拉取请告知我),以下四种拉取方式都可以:
cd $gitrepodir
git pull ssh://$user@gerrit_addr/$GERRIT_PROJECT $GERRIT_REFSPEC #pull
#git fetch ssh://$user@gerrit_addr/$GERRIT_PROJECT $GERRIT_REFSPEC && git format-patch -1 --stdout FETCH_HEAD #Format Patch
#git fetch ssh://$user@gerrit_addr/$GERRIT_PROJECT $GERRIT_REFSPEC && git cherry-pick FETCH_HEAD #Cherry Pick
#git fetch ssh://$user@gerrit_addr/$GERRIT_PROJECT $GERRIT_REFSPEC && git checkout FETCH_HEAD #checkout,希望拉取多分支的话用这个,pull有问题
#do some test
if [ "x$?" == "x0" ] ; then #成功则+2
ssh -x -p $gerrit_port $user@$gerrit_addr gerrit review --project $GERRIT_PROJECT --code-review 2 $GERRIT_PATCHSET_REVISION
else
ssh -x -p $gerrit_port $user@$gerrit_addr gerrit review --project $GERRIT_PROJECT --code-review -2 $GERRIT_PATCHSET_REVISION
fi
6.修改~/.ssh/config文件,可以使gerrit命令行简化:
Host gerrit.xxx.com
User $user
Host gerrit
Hostname gerrit.xxx.com
Port $gerrit_port
User $user
修改完之后,命令行可以省略gerrit hostname port及user,比如:
git pull ssh://$user@gerrit_addr/$GERRIT_PROJECT $GERRIT_REFSPEC #pull
可以简化为:
git pull gerrit:$GERRIT_PROJECT $GERRIT_REFSPEC #pull
配置实例:
注:
检查两个分支(master和online)是否有不同的commit:
git log --pretty=format:'commit %h %d %s %cr' --abbrev-commit --date=relative origin/master..origin/online
[ 如果执行失败,试试:
git log --no-merges --pretty=format:'commit %h %d %s %cr' --abbrev-commit --date=relative master..online //过滤merged
git log --pretty=format:'commit %h %d %s %cr' --abbrev-commit --date=relative master..online ]
jenkins + gerrit 自动code review的更多相关文章
- 如何在团队中做好Code Review
一.Code Review的好处 想要做好Code Review,必须让参与的工程师充分认识到Code Review的好处 1.互相学习,彼此成就 无论是高手云集的架构师团队,还是以CURD为主的业务 ...
- 关于Gerrit code review 介绍与安装
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...
- 如何搭建开源code review gerrit服务器
搭建环境:Ubuntu 14.04 一.环境准备 1.Java环境 gerrit依赖,用于安装gerrit环境. 下载:jdk-7u79-linux-x64.tar.gz http://www.ora ...
- 使用RBTool自动提交code review请求
使用RBTool自动提交code review请求 前言 让我们回想一下手工提交review请求的过程: 首先得用 svn diff > filename.diff 生成diff文件. 然后输入 ...
- Git Gerrit Code Review
Gerrit Code Review | Gerrit Code Reviewhttps://www.gerritcodereview.com/
- <转>如何进行code review
转自: http://pm.readthedocs.org/zh_CN/latest/codereview/howto.html 如何进行code review? code reivew是保障代码质量 ...
- 有人实践过 Phabricator 以及 Arcanist 作为 code review 的工具么?(转)
作者:覃超链接:http://www.zhihu.com/question/19977889/answer/13539702来源:知乎 平时就经常实践. 整个公司的code review就是使用这个. ...
- 我们是怎么做Code Review的
前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...
- Code Review 程序员的寄望与哀伤
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
随机推荐
- springMVC自定义方法属性解析器
使用场景例子: 用户登陆系统一般会往Session里放置一个VO对象,然后在controller里会来获取用户的userId等信息. 之前的写法是:@SessionAttributes配合@Model ...
- django之创建第12个项目-加载图片
百度云盘:django之创建第12个项目-加载图片 1.setting配置 #静态文件相关配置 # URL prefix for static files. # Example: "http ...
- django之创建第10个项目-图片上传方式1
1.upload.HTMl <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang=& ...
- jQuery 绑定事件及移除绑定事件方法和元素事件列表
1.jQuery Event 事件: ready(fn); $(document).ready()注意在body中没有onload事件,否则该函数不能执行.在每个页面中可以有很多个函数被加载 ...
- navicat-mysql-linux工具
navicat强大的数据库图形化家族,基本都是支持跨平台的!navicat-mysql-linux在Linux是通过Wine工具执行exe文件,默认15天的免费试用时间! 1. 下载 云上下载:htt ...
- 在执行context.getContentResolver.query()方法时出现错误。
1. 在执行context.getContentResolver.query()方法时出现错误. 07-15 18:46:13.470: E/AndroidRuntime(13624): FATAL ...
- 阿里云安装jdk,tomcat,maven,svn,git,nginx
1. 首先通过xftp等工具上传安装包 2. 配置目录 cd usr mkdir java cd java mkdir jdk mkdir tomcatmkdir maven 3. 安装jdk 3.1 ...
- CentOS6.6安装S******Sockets服务端
1.查看系统 [root@localhost ~]# cat /etc/issue CentOS release 6.6 (Final) [root@localhost ~]# uname -a Li ...
- iOS 获取摄像头当前方向
在做二维码扫描和直播获取视频流的过程中,可能会用到 AVCaptureDevice AVCaptureVideoPreviewLayer AVCaptureSession 这几个参数,其中 1.定义显 ...
- Debug 路漫漫-01
运行到子函数时提示报错: === 这个断点一步步debug下来是顺利的,但是咋就超出数组范围了呢,这会是什么问题. ——sess肯定超过索引了,那个sess(:,2)的值肯定超过V的行数了. ——由 ...