starxzj 发表于 2018-1-8 23:04:06

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_PROJECTgerrit项目名
  $GERRIT_BRANCHgerrit分支
  $GERRIT_EVENT_TYPE触发Jenkins进行build的gerrit事件类型(比如patchset-created)

  $GERRIT_PATCHSET_REVISIONgerrit的commit>  $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
  配置实例:
https://images2017.cnblogs.com/blog/136833/201710/136833-20171025110407926-463512449.png
  gerrit cmd review
  代码检视工具Gerrit的日常使用
  Gerrit的使用
页: [1]
查看完整版本: jenkins + gerrit 自动code review