前言
Gerrit作為code review工具,對程式碼的評審以及Merge等操作擁有靈活的控制。如果可以在Gerrit中將review與持續整合相結合,那麼可以有效的提升程式碼質量。
本文主要介紹Gerrit和Jenkins的整合,將Jenkins自動化任務的能力賦予Gerrit,在程式碼提交到合入的各個階段進行自動化檢查。
Jenkins外掛安裝及配置
1. 安裝
依次進入“系統管理 -> 管理外掛 -> 可選外掛”,搜尋外掛 Gerrit Trigger,點選安裝即可。
2. 配置
依次進入“系統管理 -> Gerrit Trigger”,新增Gerrit Server,按照下圖進行配置,然後測試連線。
- Name: 名稱
- Hostname:伺服器域名或者IP
- Frontend URL: Gerrit UI地址
- SSH Port:SSH埠,Gerrit預設為29418
- Username:連線Gerrit的使用者名稱
- SSH Keyfile:Jenkins伺服器的私鑰路徑,同時需要將Jenkins公鑰配置到上面的Gerrit使用者的公鑰列表中
- SSH Keyfile Password:私鑰檔案密碼,無則留空
如果想要將Jenkins構建的結果顯示到Gerrit中,需要在 高階 中配置REST API。如下圖所示,配置完成後測試是否可用:
- Gerrit HTTP Username:Gerrit中的使用者
- Gerrit HTTP Password:Gerrit使用者密碼。需要在Gerrit UI的使用者設定中選擇 HTTP Password,生成HTTP密碼。
Jenkins任務的配置
在Jenkins外掛配置完成後,建立Jenkins任務,進行如下配置:
原始碼配置
- Repository URL:Gerrit中原始碼下載地址
- Credentials:下載原始碼的認證,如果將Jenkins的執行機的公鑰已配置到Gerrit使用者中,此項可為空
- Name:儲存庫的ID,例如origin,用於在其他遠端儲存庫中唯一標識此儲存庫。這與你在git remote命令中使用的“name”相同。如果留空,Jenkins將為您生成唯一的名稱。您通常希望在擁有多個遠端儲存庫時指定此選項。
- Refspec:refspec控制要檢索的遠端引用以及它們如何對映到本地引用。如果留空,它將為git fetch的正常行為一致認,它將所有branch heads檢索為remotes/REPOSITORYNAME/BRANCHNAME。對於大多數情況,此預設行為都可以。 換句話說,預設的refspec是“+refs/heads/*:refs/remotes/REPOSITORYNAME/*”,其中REPOSITORYNAME是你在上面的“儲存庫名稱”文字框中指定的值。
- Branches to build:如果要跟蹤儲存庫中的特定分支,請指定分支。如果留空,將檢查所有分支的變化並構建。 最安全的方法是使用refs/heads/語法。這樣預期的分支是明確的。
- Additional Behaviours:當你有興趣使用job構建multiple heads(最常見的是多個分支)時,您可以選擇Jenkins如何選擇以什麼順序構建的分支。 Jenkins中的這個擴充套件點被許多其他外掛用來控制作業以構建特定的提交。當你啟用這些外掛時,您可能會看到他們在此處安裝自定義策略。
要讓 Git 外掛下載你的更改,請將 Refspec 設定為 $GERRIT_REFSPEC,並將Additional Behaviours 設定為 Additional Behaviours/Strategy For Choosing What To Build,並選擇 GERRIT Trigger 。 你可能還需要將 Branches to build 設定為 $GERRIT_BRANCH。
如果這對你不起作用,請設定 Refspec 設定為 refs/changes/*:refs/changes/* ,並把 Branches to build 設定成 $GERRIT_REFSPEC。
Gerrit Trigger配置
Gerrit Project:配置監控的程式碼庫,右邊配置監控的分支,配置詳情請點選 問號 檢視。
Trigger on: 指定要觸發的事件型別。
- PatchSet created: 當上傳一個新的更改或補丁集時(Trigger on為空時預設選擇)
- Draft published:當釋出一個修改或補丁集時(Trigger on為空時預設選擇)
- Change abandoned: 當一個更改被放棄時
- Change merged:當更改合併 / 提交時
- Change restored:當更改被還原時更改恢復了觸發器
- Comment added: 當指定的投票類別和值有review內容時
- Reference updated: 當引用(例如分支或標記)更新時
其他
在上述配置完成後,配置需要執行的指令碼等其他項即可。在監控的分支發生修改後,就會自動觸發Jenkins任務進行執行。