zoukankan      html  css  js  c++  java
  • 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      ] 

    gerrit cmd review

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

    Gerrit的使用

  • 相关阅读:
    Linux
    CUDA开发
    Linux C++
    Python
    C++
    模式识别
    Linux
    算法
    算法
    leetcode 数组,链表,跳表
  • 原文地址:https://www.cnblogs.com/276815076/p/7299860.html
Copyright © 2011-2022 走看看