當開發人員將本地Git倉庫中的代碼更新後,執行commit和push操做;該動做會生成一個事件,並觸發Jenkins進行構建。若是開發人員在代碼中加入和Junit或者testng測試用例,也會在構建過程當中執行;構建完成後,jenkins會將構建的結果以Gerrit投票的方式傳到Gerrit服務器上。項目Owner登陸Gerrit Web UI,進行Code Review時會看到Jenkins構建的結果並進行code review。只有當構建成功,而且code review經過時,項目owner纔會將代碼合到主分支上,若是說jenkins上構建失敗,則表示代碼確定有問題,Owner不用Code Review,直接通知開發檢查代碼並從新提交。html
Gerrit + Jenkins(安裝Gerrit Trigger插件) +Gitjava
Gerrit服務器:10.10.10.206git
Jenkins服務器:10.10.10.202express
兩臺服務器都安裝了Gitapache
一、安裝Label Verified api
初次安裝Gerrit時,在交互安裝過程當中,系統會問你是否安裝Label Verified ,默認是不安裝的。若是要搭建CI系統,這裏須要選擇安裝。若是gerrit系統中沒有安裝這個東西,後期能夠經過重裝gerrit的方式再裝上。重裝gerrit和初次安裝gerrit的命令同樣:java -jar /path/to/gerrit.war /path/to/gerrit_dir。至於如何安裝gerrit,請參考第一篇文檔。服務器
重裝前,先停掉gerrit服務,交互安裝過程當中,不少步驟使用老的配置,默認便可。惟獨提示是否安裝Label Verified 時 選擇y,表示安裝。oracle
二、在Gerrit服務器上爲Jenkins服務器建立一個帳號爲jenkins。用該帳號登陸Gerrit Web UI,將該帳號加入系統預設的Non-Interactive Users組。該組默認就已有監聽Stream Events權限,Steam Events的原理是:Gerrit收到代碼提交後,會以event的形式發給Jenkins,從而觸發Jenkins自動構建。框架
三、爲該帳號設置SSH Key,即將Jenkins服務器的root帳戶下的公鑰傳到Gerrit上jenkins帳號下的SSH Public Keys中,若是不知道如何設置,請參考前面的Gerrit用戶配置文檔。ssh
四、爲jenkins帳號註冊郵箱
五、設置jenkins用戶的權限,注意設置權限,要對All-Projects進行設定
設置jenkins用戶的read'權限
給jenkins用戶設置Code Review權限和Verified權限,Code Review權限爲-2~+1,當jenkins構建失敗時,直接將gerrit投票結果設置爲-2。
一、安裝Gerrit Trigger插件
系統管理==>管理插件==>可選插件,搜索Gerrit Trigger,安裝後重啓Jenkins
二、配置Gerrit Trigger
系統管理==>Gerrit Trigger==>Add New Server
設置jenkins的對構建結果的一個gerrit投票值,構建失敗則爲-2,項目owner在不用code review了。項目若是構成成功則不表示代碼必定OK,仍是須要owner進行Code Review後在確認是否要merge
這裏咱們仍是用第4篇文檔中的TEST項目來測試。
登陸jenkins,建立一個maven項目
源碼管理這裏選擇Git,Repository URL就是Gerrit Web上的爲匿名用戶提供的地址,注意把地址中的
git clone命令去掉,Jenkins服務器自身安裝了git,集成了git環境。
注意:開發人員push的代碼尚未merged,是保存在gerrit上的臨時分支上的,因此咱們要構建的話,應該去下載臨時分支上的代碼去構建。而不是下載$GERRIT_BRANCH上已經merge過的代碼
Refspec:設置爲refs/changes/*:refs/changes/*
Bracnes to build:設置爲$GERRIT_REFSPEC,這個是git插件自帶的宏,還有一個宏爲$GERRIT_BRANCH,表示Gerrit上的分支。下面是Jenkins官方對這兩個宏的解釋:
To get the Git Plugin to download your change; set Refspec to $GERRIT_REFSPEC and the Choosing strategy to Gerrit Trigger. You may also need to set 'Branches to build' to $GERRIT_BRANCH. If this does not work for you set Refspec torefs/changes/*:refs/changes/* and 'Branches to build' to $GERRIT_REFSPEC.
Note: Be aware that $GERRIT_BRANCH and $GERRIT_REFSPEC are not set in the Ref Updated case. If you want to trigger a build, you can set Refspec and 'Branches to build' to $GERRIT_REFNAME.
只有這兩個地方設置對,jenkins才能到gerrit上下載changes(即開發人員push的最新的代碼)去構建。
構建觸發器選擇Gerrit event
Choose a server:選擇前面配置的Gerrit Server
Trigger on:能夠不配置,jenkins會默認選擇 Patchset Created 和 Draft Published。表示開發人員只要push代碼則觸發構建,這是咱們指望的。Change Merged表示當代碼審覈經過後,而且成功地Merge後才觸發構建。Comment Added:這個選項能夠自定義Code Review和Verified的值來觸發構建,假如我這裏Trigger on選擇Comment Added,而且Code Review的值選擇1,那麼當項目管理員審覈代碼時,給的值爲1,就會觸發構建。
下面是官網的解釋:
Draft Published: Sent when a change moves from draft state to new. (only available in version 2.5 or higher of Gerrit).
Patchset Created: Sent when a new patchset arrives on a change. Before version 2.6.0, this was the only event you could trigger on.
Change Merged: Sent when a change is merged on the Gerrit server.
Comment Added: Sent when a comment is added to a change. Which category and value to trigger on can be configured. The available categories can be configured in the server settings for the plugin.
Ref Updated: Sent when a ref is updated on the Gerrit server, i.e. someone pushes past code review.
Silent Mode:靜默模式,即gerrit上作了code review和submit操做,Gerrit上對應的jenkins帳號不發送郵件通知。
Gerrit Project:左邊選擇項目,右邊選擇分支,支持如下三種方式:
Plain: The exact name in Gerrit, case sensitive equality.
Path: ANT style pattern. Ex: "*/base/**"
RegExp:Regular expression.
我選擇Path,後面寫**,表示該項目全部分支。
構建後的操做,選擇郵件通知
用user2用戶登陸jenkins服務器10.10.10.202, 從Gerrit Web UI上clone TEST項目,
第一次clone TEST項目時,因爲這個項目沒有開發人員參與,因此TEST文件夾爲空,這裏的全部文件都是user2用戶建立的。
pom.xml文件是構建maven項目必須的,cat pom.xml,能夠看到我這裏加入了testng的測試框架
在./src/test/java/com/carkey/testng/AppTest.java文件中寫好了測試用例
建立代碼文件,並將代碼push到Gerrit服務器對應的項目倉庫中
user2@localhost:~/TEST$ git add *
user2@localhost:~/TEST$ git commit -m "init"
[master 96c15a5] init
1 files changed, 1 insertions(+), 133 deletions(-)
rewrite code.sh (100%)
user2@localhost:~/TEST$ git push origin master:refs/for/master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 362 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: new: 1, refs: 1, done
remote:
remote: New Changes:
remote: http://10.10.10.206:8081/35 init
remote:
To ssh://user2@10.10.10.206:29418/TEST
* [new branch] master -> refs/for/master
登陸Jenkins,看到項目構建時測試經過了,構建結果爲Success。
用user2登陸Gerrit Web UI,查看Jenkins的投票結果(也能夠理解爲構建結果),並邀請admin管理員進行Code Review
以下圖能夠看到jenkins構建成功了,Code-Review和Verified都是+1,這兩個值是前面在Gerrit Trigger中配置的。
邀請admin進行Code-Review
admin用戶進行Code Review。管理員根據jenkins的投票指導構建結果是Success。而後進行Code-Review,若是代碼沒有問題,則Code-Review+2,並Submit。
此時代碼纔會合到對應的分支上。
到這裏CI工做流程就結束了。
安裝這個插件後,在首頁能看到Query and Trigger Gerrit Patches的功能
該功能能夠查詢Gerrit服務器上的全部項目的全部狀態的事件
根據狀態查詢
根據項目查詢
根據用戶查詢
根根據時間來查詢:
這個插件是全局性的插件,能查看全部項目的構建狀況,包括成功、失敗、不穩定、被終止等狀態的構建。
安裝:
這個插件的安裝過程就不在詳細描述,在插件管理--可選插件中直接搜索build-metrics,安裝,重啓jenkins便可
使用:
系統管理中,找到build-metrics,點擊進去
根據時間和Job名來查詢
按項目來查詢