Jenkins Phabricator 集成

jopen 9年前發布 | 41K 次閱讀 Jenkins 項目構建
 

一、 簡介

1. 持續集成

2. Jenkins

3. Phabricator

4. 目標

二、 搭建

1. 所需的軟件

2. 環境搭建

1)       安裝 Jenkins Phabricator

2) Phabricator

配置

3) Jenkins

配置

三、 Jenkins Phabricator 集成

1. 安裝配置

2. 使用

四、 Reference

一、 簡介

1.

持續集成

一種軟件開發實踐,即團隊的成員經常集成他們的工作,通常每個成員每天至少集成一次,這導致每天發生多次集成。每次集成都通過自動化的構建 ( 包括測試 ) 來驗證,從而盡快地檢測出集成錯誤。許多團隊發現這個過程會大大減少集成問題,讓團隊能夠更快地開發內聚的軟件。本質上說,持續集成就是通過快速的反饋降低風險。

2. Jenkins

Jenkins 是一個用 java 編寫的持續集成工具 . 它為軟件開發提供持續集成服務。它基于服務器,并運行于 servlet 容器,例如 Apache Tomcat 。它支持版本控制工具,包括

CVS, Subversion,

Git, Mercurial, Perforce, Clearcase

RTC, 并能執行基于 Apache Ant Apache Maven 的項目。另外,它能通過多種方法開始構建,例如 , 由版本控制系統觸發,由 cron-like 機制調度,由遠程命令觸發,或者通過一個 URL

3. Phabricator

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)    安裝 JenkinsPhabricator

具體內容查看安裝腳本 install-jenkins-phabricator.sh

2)    Phabricator 配置

安裝完成后,打開 http://<your-server > ,首先注冊一個管理員賬戶。

按照官方配置指南

Configuration

Guide

,需要進行多項配置,這里只介紹幾個比較重要的,其余可以省略或自行參考官方指南。
打開

http://<your-server>/auth

,添加一個或多個登錄系統。登錄方法稱為 AuthenticationProvider ,例如以下:

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

登錄到 Phabricator ,打開

http://<your-server>/settings/panel/ssh

,點擊 UploadPublic Key ,將剛才生成的密鑰公鑰內容 ~/.ssh/id_rsa.pub 復制進去。

3)    Jenkins 配置

Jenkins 安裝完成后,進入

http://<your-server>:8080/manage

配置 Jenkins ,在這個頁面可以完成配置系統,全局安全設置,從磁盤重新加載配置信息,管理插件,顯示系統信息,顯示系統日志,顯示統計信息,命令行工具,腳本控制臺,管理節點,管理認證,關于 Jenkins ,管理舊數據,管理用戶和關閉 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 :設置每次構建日志的目錄

Jenkins Phabricator 集成

工程名稱設置,可以要求工程名稱符合某種格式

Jenkins Phabricator 集成

全局屬性:這里可以添加一些環境變量,之后在任務中可以引用,還可以添加一些工具,只需要填寫工具的名稱和所在目錄。

Jenkins Phabricator 集成

Maven :可以設置所使用的 Maven 來源,默認選項或者自己設置 maven 所在路徑

Jenkins Phabricator 集成

如果我們之前已經安裝了 JDK ,那么這里使用默認選項即可,也可以指定 JAVA_HOME 的路徑。

Jenkins Phabricator 集成

上面由于可執行程序 git 已經在系統 PATH 路徑中,所以可以不使用完整路徑。

后面的 ANT Maven 安裝類似,這里不再講述。截圖如下:

Jenkins Phabricator 集成

Jenkins URL :設置 Jenkins 的網絡地址

Email Add :設置 jenkins email 地址。

Jenkins Phabricator 集成

Git plugin CVS 使用默認配置

Jenkins Phabricator 集成

Email 配置:設置發送郵件的 smtp 服務器,應特別注意,缺省郵箱后綴

點擊 Advanced 可以配置 smtp 認證,包括用戶名,用戶密碼,缺省編碼等。

Test configuration by sending test e-mail :通過發送郵件測試配置是否成功,點擊

Test

Configuration

,如果成功會顯示 Email was successfully sent ,否則下面會報錯,出錯時請認真看下面的出錯提示,可能錯誤是 SMTP server 沒有配置對,默認是 localhost ,或者是某些服務沒有打開,或者是端口已經被其他程序占用,默認端口是 25 ,可以不填寫,另外重啟一下也可能就成功。

Jenkins Phabricator 集成

到這里之后點擊 apply 或者 save 保存設置,如果出現錯誤,根據錯誤提示進行更正即可。

b) Configure global security

這里主要完成一些關于系統安全和訪問權限的配置,勾選 Enable security 才可以配置,否則不啟用其機制。前面的一般使用默認配置,如下圖

Jenkins Phabricator 集成

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 :基于矩陣的安全,功能看點擊后面藍色問號后的提示,見下圖:

Jenkins Phabricator 集成

Project-based Matrix Authorization strategy :基于工程的矩陣授權策略,和上面基于矩陣的區別不大,只是基于工程的可以對各個工程進行不同的權限配置,而上面的是對所有 jobs 都一樣。

Jenkins Phabricator 集成

Jenkins Phabricator 集成

Disable syntax highlighting :是否啟用 html 語法高亮

c) Reload Configuration from Disk

重新從磁盤加載配置信息。

d) Manage plugins

管理各種插件,包括安裝,升級,刪除等等。

Jenkins Phabricator 集成

如上圖所示, Updates 表示已安裝可升級插件, Available 表示可用但未安裝插件, Installed 表示已安裝插件, Advanced 里面可以從本地安裝插件。 如果 Available 界面沒有任何可用更新,可能是更新網址不正確。進入 Advanced 界面更改更新網址為 https://updates.jenkins-ci.org/current/update-center.json

Jenkins Phabricator 集成

點擊

Check

Now

檢查是否有可用更新和可用插件。
Available 列表里有很多可選插件,插件是按照類型分類,按字母序排序的。類型包括有 Artifact Uploaders 上傳文件插件,

Authentication and

User Management

認證和用戶管理類 插件, Build Notifiers 構建提示插件,構建報告插件等等。如下圖所示,點擊類型名可以展開此類型下所有可用的插件,每個插件都有簡要的功能介紹。

勾選所有想要安裝的插件,下拉到最后,可以點擊安裝,安裝完成后重啟 jenkins 即可,如下圖:

Jenkins Phabricator 集成

e) System information

這里主要顯示了一些系統屬性,環境變量,已安裝的插件匯總等信息。

f) System log

主要顯示了系統的日志

g) Load statistics

一些統計數據,例如節點數目,正在運行的節點數,構建隊列長度等信息。

h) Jenkins CLI

命令行接口,需要下載 jenkins-cli.jar 文件。將在 jenkins cli 命令行使用簡介 .doc 中詳細介紹。

Jenkins Phabricator 集成

i) Script console

腳本控制臺,通過執行腳本和 jenkins 交互。

j)  Manage Nodes

節點管理,我們暫時只有一個 master 節點,不介紹多節點的使用。

Jenkins Phabricator 集成

k) Manager credential

增加,修改或者刪除認證,可用于 jenkins

jenkins

job

和第三方服務的驗證。

l) About jenkins

介紹了 jenkins 的版本信息,還有所依賴的第三方庫列表和 license

m) Manager Old Data

管理舊數據,具體介紹看 jenkins 的解釋

n) Manager Users

管理用戶,這個要在 Configure Global security 中選中允許用戶注冊才可以使用

Jenkins Phabricator 集成

這里顯示了已經注冊的用戶,已登錄的用戶后面沒有紅色刪除標記,但可以刪除其他用戶,點擊后面藍色的配置標記可以進入相應用戶的配置。

Jenkins Phabricator 集成

o) Prepare for shutdown

關掉 jenkins

三、 Jenkins Phabricator 集成

1.

安裝配置

集成 Jenkins Phabricator 需要在 Jenkins 中安裝

PhabricatorDifferential

Plugin

插件,配置過程如下:

Phabricator 中新建 robot 用戶 Jenkins

Jenkins Phabricator 集成

Jenkins Phabricator 集成

新建用戶完成后,進入 Jenkins 用戶界面

http://<your-server>/p/jenkins

,點擊右邊的 Edit Settings ,再點擊 Conduit API Tokens ,點擊 Generate API Token ,復制生成的 Token 。進入到 Jenkins 系統配置頁面

http://<your-server>:8080/configure

,找到 Phabricator 部分,添加 Credentials ,填寫 PhabricatorURL 并將之前生成的 Token 粘貼到此處。

Jenkins Phabricator 集成

由于 Jenkins 中使用的系統用戶是 jenkins ,也需要把 jenkins 用戶的 SSH Public Key 上傳到 Phabricator 。方法如下:

切換到 Jenkins 用戶并生成密鑰:

su Jenkins

ssh-keygen t rsa C

jenkins@phabricator

server

Jenkins Phabricator 集成

然后進入 http://<your-server>/settings/panel/ssh 點擊 Upload Public Key ,將剛才生成的密鑰上傳到 Phabricator

Jenkins Phabricator 集成

2. 使用

Phabricator

新建 Repository http://<your-server>/diffusion/new 新建一個 Repository

Jenkins Phabricator 集成

1.

Clone

該庫至本地,執行

git commit –allow-empty -m

"initial empty commit"

2.
git push origin master

Jenkins Phabricator 集成

Jenkins

http://<your-server>:8080/view/All/newJob 中新建對應該 Diffusion Job ,名稱為 hello-world free-style

由于需要將構建結果返回給 Phabricator ,這里需要添加兩個 String 參數 DIFF_ID PHID

Jenkins Phabricator 集成  

在源代碼管理中,選擇 Git

Repository

填寫

git clone

時的后半部分,由于已經上傳了
Jenkins 用戶的公鑰到 Phabricator

,這里不需要認證。

Jenkins Phabricator 集成

上面的 name 表示庫的 ID ,例如 origin ,用于和其它遠端庫區分。 Refspec 用于指定獲取遠端的哪些 refs 以及和本地 refs 對應。如果留空,則和 git fetch 效果相同。

Jenkins Phabricator 集成

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&param1=value1&param2=value2

Jenkins Phabricator 集成

Build 部分,填寫需要構建的具體內容,例如編譯,單元測試,集成測試等 。這里打印兩個參數的值。

Jenkins Phabricator 集成

Post-buildActions

部分,添加

Post to

Phabricator

,將構建結果返回給 Phabricator

Jenkins Phabricator 集成

Phabricator 中新建

Harbormaster

build plan

http://<your-server>/harbormaster/plan/edit

Jenkins Phabricator 集成

在該 plan 中添加 build step

Jenkins Phabricator 集成

填寫名稱,由于該 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 的參數以及參數解析。

Jenkins Phabricator 集成

Phabricator 中添加 Herald 規則

http://<your-server>/herald/new

創建 Herald 規則:
可以針對多種情況創建 Herald 規則,例如 commit diff 或者 revision 等。最主要的就是這三個。這里我們為

Differential Revisions

創建一個 Herald 規則,當新建或者更新 revision 時觸發 build step 從而發出 HTTP POST 請求讓 Jenkins 執行構建。

Jenkins Phabricator 集成

Rule

Name

填寫規則名稱,在 Condition 部分添加條件,在 Action 部分添加滿足上 面的條件時需要執行的操作。例如當有 hello-world 庫有 revision 創建或者更新,且 Author luoyuanhao 時,執行 build plan ,可以按照如下方式創建 Herald 規則:

Jenkins Phabricator 集成

5.

創建 revision 觸發 jenkins 構建
用戶

luoyuanhao

clone Phabricator

hello-world

Repository

,更新了代碼并用

arc

diff

創建 revision

Jenkins Phabricator 集成

Jenkins Phabricator 集成

這時滿足 Herald 規則 Runjenkins 的條件,就會 run build plan build hello-world build hello-world 其實就是向 Jenkins 發出一個帶參數的 HTTP POST 請求。從而激活 Jenkins hello-world job Jenkins hello-world 就從指定的 Git 庫中拉取代碼,并逐步執行 Build 部分指定的操作,當所有 Build 部分都成功完成或者某個步驟出錯時,進入

Post-build

actions

部分,即將 build 結果返回給 Phabricator

Jenkins Phabricator 集成 可以在 Jenkins Build 控制臺輸出查看構建的詳細步驟。

可以在 http://<your-server>/harbormaster/query/all 處查看 Jenkins 返回的結果:

Jenkins Phabricator 集成

四、 Reference

Phabricator User Documentation

Use Jenkins

Jenkins The Definitive Guide

Jenkins Plugins

Phabricator Differential Plugin

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!