jenkins + gerrit 自動code review

最近有需求要push review之後自動跑一些測試,若是經過就自動+2 不經過就-2,目前作法以下(jenkins gerrit均已配置好,Jenkins能夠鏈接gerrit並拉代碼):html

1. Jenkins上添加項目時,「源碼管理」 選擇git,並填寫正確的「路徑」和「分支」(分支留空或者填**會管理全部分支)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命令shell

4.build命令中可使用Jenkins自帶的變量獲取一些信息(可用變量在Jenkins上能夠查看):bash

$JOB_NAME Jenkins項目名 eclipse

$JENKINS_HOME Jenkins根目錄ssh

$BUILD_NUMBER  當前構建號ide

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

相關文章
相關標籤/搜索