最近有需求要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      ]

gerrit cmd review

代码检视工具Gerrit的日常使用

Gerrit的使用

jenkins + gerrit 自动code review的更多相关文章

  1. 如何在团队中做好Code Review

    一.Code Review的好处 想要做好Code Review,必须让参与的工程师充分认识到Code Review的好处 1.互相学习,彼此成就 无论是高手云集的架构师团队,还是以CURD为主的业务 ...

  2. 关于Gerrit code review 介绍与安装

    代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...

  3. 如何搭建开源code review gerrit服务器

    搭建环境:Ubuntu 14.04 一.环境准备 1.Java环境 gerrit依赖,用于安装gerrit环境. 下载:jdk-7u79-linux-x64.tar.gz http://www.ora ...

  4. 使用RBTool自动提交code review请求

    使用RBTool自动提交code review请求 前言 让我们回想一下手工提交review请求的过程: 首先得用 svn diff > filename.diff 生成diff文件. 然后输入 ...

  5. Git Gerrit Code Review

    Gerrit Code Review | Gerrit Code Reviewhttps://www.gerritcodereview.com/

  6. <转>如何进行code review

    转自: http://pm.readthedocs.org/zh_CN/latest/codereview/howto.html 如何进行code review? code reivew是保障代码质量 ...

  7. 有人实践过 Phabricator 以及 Arcanist 作为 code review 的工具么?(转)

    作者:覃超链接:http://www.zhihu.com/question/19977889/answer/13539702来源:知乎 平时就经常实践. 整个公司的code review就是使用这个. ...

  8. 我们是怎么做Code Review的

    前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...

  9. Code Review 程序员的寄望与哀伤

    一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...

随机推荐

  1. CentOS7 下 配置Docker远程访问 与 windows下使用maven构筑Spring Boot 的 Docker镜像到远程服务端

    1.设置Docker服务端,以支持远程访问: 修改docker服务端配置文件,命令: vim /usr/lib/systemd/system/docker.service 修改后: [Unit] De ...

  2. 代理Proxy初探

    Proxy,也就是"代理"了. 意思就是.你不用去做,别人取代你去处理.比方说:租房.你仅仅要找到"我爱我家"中介,把全部的事情交给他们去代劳, "我 ...

  3. 使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解

    1,什么是ODF .NE,?就是Oracle 为 .NET (ODP.NET) 专门编写了 Oracle Data Provider,一个用于 Microsoft .NET 环境下的 Oracle 数 ...

  4. 如何通过Html网页调用本地安卓app?

    如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式 更新一下吧,这篇日志写于2013年11月,离现在已经很久了,依然很多朋友在查阅.目前应该有更 ...

  5. oracle安装后tnsnames.ora内容

    # tnsnames.ora Network Configuration File: D:\Develop\oracle11g\product\11.2.0\dbhome_1\network\admi ...

  6. Bean的加载过程

    参考地址: http://blog.csdn.net/jy0902/article/details/50519115 http://blog.csdn.net/architect0719/articl ...

  7. 看过这两张图,就明白 Buffer 和 Cache 之间区别

    Buffer常见的是这个: 对,就是铁道端头那个巨大的弹簧一类的东西.作用是万一车没停住,撞弹簧上减速慢,危险小一些.叫缓冲. Cache常见的是这个: 没错,就是一种保管箱.看到右边那个被锈掉的Fo ...

  8. git学习笔记(二)—— 创建版本库&&版本管理

    一.创建版本库 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: mkdir gitHub_CXWcd gitHub_CXW git init Initialized empty G ...

  9. 1503: [NOI2004]郁闷的出纳员 (SBT)

    1503: [NOI2004]郁闷的出纳员 http://www.lydsy.com/JudgeOnline/problem.php?id=1503 Time Limit: 5 Sec  Memory ...

  10. scala+hadoop+spark环境搭建

    一.JDK环境构建 在指定用户的根目录下编辑.bashrc文件,添加如下部分: # .bashrc # Source global definitions if [ -f /etc/bashrc ]; ...