Jenkins Phabricator 集成
一、 簡介
1. 持續集成
2. Jenkins
3. Phabricator
二、 搭建
2. 環境搭建
1) 安裝 Jenkins 和 Phabricator
2) Phabricator
配置
3) Jenkins
配置
三、 Jenkins 和 Phabricator 集成
1. 安裝配置
一、 簡介
1.
持續集成
一種軟件開發實踐,即團隊的成員經常集成他們的工作,通常每個成員每天至少集成一次,這導致每天發生多次集成。每次集成都通過自動化的構建 ( 包括測試 ) 來驗證,從而盡快地檢測出集成錯誤。許多團隊發現這個過程會大大減少集成問題,讓團隊能夠更快地開發內聚的軟件。本質上說,持續集成就是通過快速的反饋降低風險。
2. Jenkins
CVS, Subversion,
Git, Mercurial, Perforce, Clearcase
和 RTC, 并能執行基于 Apache Ant 和 Apache Maven 的項目。另外,它能通過多種方法開始構建,例如 , 由版本控制系統觸發,由 cron-like 機制調度,由遠程命令觸發,或者通過一個 URL 。3. Phabricator
Herald
變化檢測工具、 Bug 跟蹤、 Phriction Wiki 。 Phabricator 集成了 Git 、 Mercurial 、和 Subversion 版本控制工具。它在 Apache License 2 協議下發布的自由軟件。4. 目標
我們的目標是采用 Git + Phabricator+ Jenkins 模式,實現 Git 托管代碼, Phabricator 進行代碼審查、 Bug 跟蹤, Jenkins 集成構建的流程。通過 Phabricator 和 Jenkins 的強大功能,完善代碼管理和編譯,測試以及部署,提高軟件質量并加速軟件開發。
二、 搭建
1. 所需的軟件
為了搭建一個完整的持續集成系統,我們需要如下軟件:
Apache : Internet 上最流行的 Web 服務器軟件,僅支持靜態網頁
PHP :在服務器端執行的嵌入 HTML 文檔的腳本語言
MariaDB/MySQL :數據庫管理系統
Git :版本控制系統的一個免費開源客戶端
Jenkins :持續構建工具
Phabricator : Code review 工具
以下分別是這些軟件的安裝配置和使用方法的簡要介紹。
2.
環境搭建
1) 安裝 Jenkins 和 Phabricator
具體內容查看安裝腳本 install-jenkins-phabricator.sh 。
2) Phabricator 配置
安裝完成后,打開 http://<your-server > ,首先注冊一個管理員賬戶。
l Username/Password: 用戶使用用戶名和密碼進行登錄或注冊
l LDAP: 用戶使用 LDAP 認證進行登錄或注冊
l OAuth: 用戶使用支持 OAuth2 的提供商賬戶(例如 Github 、 非死book 或 Google )進行登錄或注冊。
l 恢復管理員賬戶
如果你意外的鎖住了你的管理員用戶,可以使用 bin/auth 腳本進行恢復,要恢復管理員賬戶,運行:
phabricator/$ ./bin/auth
recover <username>
l 使用 Web 控制臺管理賬戶
打開 http://<your-server>/people/ 管理賬戶
l 手動創建新賬戶
這里有兩種方式創建用戶,第一種是通過 web 用戶界面 http://<your-server>/people/ ,另外一種是通過 CLI 使用 accountadmin 可執行文件:
phabricator/$
./bin/accountadmin
Phabricator 可以通過多種方式發送郵件,稱為 “ Adapter ” 。這里使用 External SMTP ,配置已經在安裝腳本中寫好,只需要設置好對應的參數,不再需要手動配置。如果需要使用其它郵件發送方式,可以查看官方文檔。
Phabricator 支持 Git 、 Subversion 等版本控制工具,可以通過 HTTP 和 SSH 對其中托管的庫進行讀寫訪問驗證。這里我們使用 Git 版本控制工具并通過 SSH 進行訪問。配置已經在安裝腳本中完成,但每個 Phabricator 用戶還需要在 Phabricator 中添加公鑰。步驟如下:
l 生成密鑰
運行命令 ssh-keygen–t rsa –C “Comment message”
l 上傳到 Phabricator
3) Jenkins 配置
gitplugin, git clientplugin, git serverplugin,git
parameter plugin,build authorization token root plugin, build with parameters,
post build script plugin, phabricator differential plugin
和cobertura
plugin
。安裝方法可以查看 插件管理 部分a) Configure System
Jenkins 的一些基本配置內容可以查看文件 /etc/sysconfig/jenkins
系統配置最上面顯示了 Jenkins 所在目錄
點擊后面的 advances 可以配置工作目錄和日志保存目錄
Workspace root Directory :設置每次構建工作區的目錄
Build Record Root Directory :設置每次構建日志的目錄
工程名稱設置,可以要求工程名稱符合某種格式
全局屬性:這里可以添加一些環境變量,之后在任務中可以引用,還可以添加一些工具,只需要填寫工具的名稱和所在目錄。
Maven :可以設置所使用的 Maven 來源,默認選項或者自己設置 maven 所在路徑
如果我們之前已經安裝了 JDK ,那么這里使用默認選項即可,也可以指定 JAVA_HOME 的路徑。
上面由于可執行程序 git 已經在系統 PATH 路徑中,所以可以不使用完整路徑。
后面的 ANT 和 Maven 安裝類似,這里不再講述。截圖如下:
Jenkins URL :設置 Jenkins 的網絡地址
Email Add :設置 jenkins 的 email 地址。
Git plugin 和 CVS 使用默認配置
Email 配置:設置發送郵件的 smtp 服務器,應特別注意,缺省郵箱后綴
點擊 “ Advanced ” 可以配置 smtp 認證,包括用戶名,用戶密碼,缺省編碼等。
Test
Configuration
,如果成功會顯示 Email was successfully sent ,否則下面會報錯,出錯時請認真看下面的出錯提示,可能錯誤是 SMTP server 沒有配置對,默認是 localhost ,或者是某些服務沒有打開,或者是端口已經被其他程序占用,默認端口是 25 ,可以不填寫,另外重啟一下也可能就成功。
到這里之后點擊 apply 或者 save 保存設置,如果出現錯誤,根據錯誤提示進行更正即可。
b) Configure global security
這里主要完成一些關于系統安全和訪問權限的配置,勾選 Enable security 才可以配置,否則不啟用其機制。前面的一般使用默認配置,如下圖
Disable remember me: 如果勾選,每次登陸都需要輸入用戶名和密碼
Delegate to servlet container :使用容器的用戶, tomcat 也可以添加用戶,這里不討論。
Jenkins’s own user database :使用 jenkins 自身的賬戶,需要勾選 Allow users to sign up 以允許注冊
上面還有用戶訪問權限設置,有下面一些選項:
Anyone can do anythins: 任何人可以做任何事
Legacy mode: 如果是管理員,則擁有所有權限,其他用戶或匿名用戶都只有讀權限
Logged-in users can do anythin :登錄用戶可以做任何事
Matrix-based security :基于矩陣的安全,功能看點擊后面藍色問號后的提示,見下圖:
Project-based Matrix Authorization strategy :基于工程的矩陣授權策略,和上面基于矩陣的區別不大,只是基于工程的可以對各個工程進行不同的權限配置,而上面的是對所有 jobs 都一樣。
Disable syntax highlighting :是否啟用 html 語法高亮
c) Reload Configuration from Disk
重新從磁盤加載配置信息。
d) Manage plugins
管理各種插件,包括安裝,升級,刪除等等。
如上圖所示, Updates 表示已安裝可升級插件, Available 表示可用但未安裝插件, Installed 表示已安裝插件, Advanced 里面可以從本地安裝插件。 如果 Available 界面沒有任何可用更新,可能是更新網址不正確。進入 Advanced 界面更改更新網址為 : https://updates.jenkins-ci.org/current/update-center.json
Check
Now
檢查是否有可用更新和可用插件。Authentication and
User Management
認證和用戶管理類 插件, Build Notifiers 構建提示插件,構建報告插件等等。如下圖所示,點擊類型名可以展開此類型下所有可用的插件,每個插件都有簡要的功能介紹。勾選所有想要安裝的插件,下拉到最后,可以點擊安裝,安裝完成后重啟 jenkins 即可,如下圖:
e) System information
這里主要顯示了一些系統屬性,環境變量,已安裝的插件匯總等信息。
f) System log
主要顯示了系統的日志
g) Load statistics
一些統計數據,例如節點數目,正在運行的節點數,構建隊列長度等信息。
h) Jenkins CLI
命令行接口,需要下載 jenkins-cli.jar 文件。將在 jenkins cli 命令行使用簡介 .doc 中詳細介紹。
i) Script console
腳本控制臺,通過執行腳本和 jenkins 交互。
j) Manage Nodes
節點管理,我們暫時只有一個 master 節點,不介紹多節點的使用。
k) Manager credential
jenkins
job
和第三方服務的驗證。l) About jenkins
介紹了 jenkins 的版本信息,還有所依賴的第三方庫列表和 license 。
m) Manager Old Data
管理舊數據,具體介紹看 jenkins 的解釋
n) Manager Users
管理用戶,這個要在 Configure Global security 中選中允許用戶注冊才可以使用
這里顯示了已經注冊的用戶,已登錄的用戶后面沒有紅色刪除標記,但可以刪除其他用戶,點擊后面藍色的配置標記可以進入相應用戶的配置。
o) Prepare for shutdown
關掉 jenkins
三、 Jenkins 和 Phabricator 集成
1.
安裝配置
PhabricatorDifferential
Plugin
插件,配置過程如下:在 Phabricator 中新建 robot 用戶 Jenkins
由于 Jenkins 中使用的系統用戶是 jenkins ,也需要把 jenkins 用戶的 SSH Public Key 上傳到 Phabricator 。方法如下:
切換到 Jenkins 用戶并生成密鑰:
su Jenkins
jenkins@phabricator
server
”
然后進入 http://<your-server>/settings/panel/ssh 點擊 Upload Public Key ,將剛才生成的密鑰上傳到 Phabricator
2. 使用
Phabricator
新建 Repository 處 http://<your-server>/diffusion/new 新建一個 Repository 。
1.
Clone
該庫至本地,執行git commit –allow-empty -m
"initial empty commit"
2.
git push origin master
Jenkins
http://<your-server>:8080/view/All/newJob 中新建對應該 Diffusion 的 Job ,名稱為 hello-world , free-style由于需要將構建結果返回給 Phabricator ,這里需要添加兩個 String 參數 DIFF_ID 和 PHID :
Repository
填寫git clone
時的后半部分,由于已經上傳了,這里不需要認證。
上面的 name 表示庫的 ID ,例如 origin ,用于和其它遠端庫區分。 Refspec 用于指定獲取遠端的哪些 refs 以及和本地 refs 對應。如果留空,則和 git fetch 效果相同。
Branches to build :指定要跟蹤的分支,如果留空,則會檢查構建所有分支。
BuildTriggers
部分,勾選Triggerbuilds
remotely
,這樣可以通過 URL 觸發構建。也就是后面 Phabricator 發出一個 URLPOST 請求觸發構建。這里填寫一個驗證令牌,用于 Phabricator 或 URL 觸發時認證。記住下面 jenkins 提示的Use the following URL to
trigger build remotely
: http://<your-server>:8080/job/hello-world/buildWithParameters?token=TOKEN_NAME¶m1=value1¶m2=value2
在 Build 部分,填寫需要構建的具體內容,例如編譯,單元測試,集成測試等 。這里打印兩個參數的值。
Post-buildActions
部分,添加Post to
Phabricator
,將構建結果返回給 Phabricator 。
Harbormaster
build plan
http://<your-server>/harbormaster/plan/edit
在該 plan 中添加 build step :
填寫名稱,由于該 build step 的 action 就是發送一個 URLPOST 請求,這里使用 MakeHTTP Request ,然后在下面的 URI 中填寫之前 Jenkins 提示的,因為 Jenkins 根據 PHID 向 Phabricator 返回構建結果,這里需要傳遞 PHID 作為參數:
http://<your-server>:8080/job/hello-world/buildWithParameters?token=hello-world-token&DIFF_ID=${buildable.diff}&PHID=${target.phid}
HTTP
Method
部分選擇 POST ,在 WhenComplete 中選擇 WaitFor Message ,等待 Jenkins 返回結果再進行下一個 build step 。點擊 SaveBuild Step 保存構建步驟。在下面還列出了其它 Phabricator 可以傳遞給 Jenkins 的參數以及參數解析。
在 Phabricator 中添加 Herald 規則
Differential Revisions
創建一個 Herald 規則,當新建或者更新 revision 時觸發 build step 從而發出 HTTP POST 請求讓 Jenkins 執行構建。
Rule
Name
填寫規則名稱,在 Condition 部分添加條件,在 Action 部分添加滿足上 面的條件時需要執行的操作。例如當有 hello-world 庫有 revision 創建或者更新,且 Author 是 luoyuanhao 時,執行 build plan ,可以按照如下方式創建 Herald 規則:
5.
創建 revision 觸發 jenkins 構建luoyuanhao
clone Phabricator
的hello-world
Repository
,更新了代碼并用arc
diff
創建 revision 。
Post-build
actions
部分,即將 build 結果返回給 Phabricator 。 可以在 Jenkins Build 控制臺輸出查看構建的詳細步驟。
可以在 http://<your-server>/harbormaster/query/all 處查看 Jenkins 返回的結果: