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的使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM