Jenkins詳細教程

Version:1。0 StartHTML:000000201 EndHTML:000043456 StartFragment:000008971 EndFragment:000043418 StartSelection:000008971 EndSelection:000043418 SourceURL:https://www。jianshu。com/p/5f671aca2b5a

一、jenkins是什麼?

Jenkins是一個開源的、提供友好操作介面的持續整合(CI)工具,起源於Hudson(Hudson是商用的),主要用於持續、自動的構建/測試軟體專案、監控外部任務的執行(這個比較抽象,暫且寫上,不做解釋)。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中執行,也可獨立執行。通常與版本管理工具(SCM)、構建工具結合使用。常用的版本控制工具有SVN、GIT,構建工具有Maven、Ant、Gradle。

二、CI/CD是什麼?

CI(Continuous integration,中文意思是持續整合)是一種軟體開發時間。持續整合強調開發人員提交了新程式碼之後,立刻進行構建、(單元)測試。根據測試結果,我們可以確定新程式碼和原有程式碼能否正確地整合在一起。借用網路圖片對CI加以理解。

Jenkins詳細教程

CI

CD(Continuous Delivery, 中文意思持續交付)是在持續整合的基礎上,將整合後的程式碼部署到更貼近真實執行環境(類生產環境)中。比如,我們完成單元測試後,可以把程式碼部署到連線資料庫的Staging環境中更多的測試。如果程式碼沒有問題,可以繼續手動部署到生產環境。下圖反應的是CI/CD 的大概工作模式。

Jenkins詳細教程

CI/CD

三、使用Jenkins進行PHP程式碼(單元)測試、打包。

Jenkins是一個強大的CI工具,雖然本身使用Java開發,但也能用來做其他語言開發的專案CI。下面講解如何使用Jenkins建立一個構建任務。

登入Jenkins, 點選左側的新建,建立新的構建任務。

Jenkins詳細教程

跳轉到如下介面。任務名稱可以自行設定,但需要全域性唯一。輸入名稱後選擇構建一個自由風格的軟體專案(其他選項不作介紹)。並點選下方的確定按鈕即建立了一個構建任務。之後會自動跳轉到該job的配置頁面。

Jenkins詳細教程

新建自由風格的軟體專案

下圖是構建任務設定介面,可以看到上方的幾個選項

"General", "原始碼管理", "構建觸發器","構建環境", "構建", "構建後操作"

。下面逐一介紹。

Jenkins詳細教程

1。General

General是構建任務的一些基本配置。名稱,描述之類的。

Jenkins詳細教程

General

專案名稱:

是剛才建立構建任務步驟設定的,當然在這裡也可以更改。

描述:

對構建任務的描述。

丟棄舊的構建:

伺服器資源是有限的,有時候儲存了太多的歷史構建,會導致Jenkins速度變慢,並且伺服器硬碟資源也會被佔滿。當然下方的“保持構建天數” 和 保持構建的最大個數是可以自定義的,需要根據實際情況確定一個合理的值。

其他幾個選項在這裡不做介紹,有興趣的可以檢視Jenkins“幫助資訊”, 會有一個大概的介紹。不過這些“幫助資訊”都是英文的。

Jenkins詳細教程

點選右方的這些“問號”檢視“幫助資訊”

2。原始碼管理

原始碼管理就是配置你程式碼的存放位置。

Jenkins詳細教程

原始碼管理

Git:

支援主流的github 和gitlab程式碼倉庫。因我們的研發團隊使用的是gitlab,所以下面我只會對該項進行介紹。

Repository URL

:倉庫地址

Credentials

:憑證。可以使用HTTP方式的使用者名稱密碼,也可以是RSA檔案。 但要通過後面的“ADD”按鈕新增憑證。

Branches to build

:構建的分支。*/master表示master分支,也可以設定為其他分支。

原始碼瀏覽器

:你所使用的程式碼倉庫管理工具,如github, gitlab。

URL

:填入上方的倉庫地址即可。

Version: 8.7

這個是我們gitlab伺服器的版本。

Subversion:

就是SVN,這裡不作介紹。

3.構建觸發器

構建觸發器,顧名思義,就是構建任務的觸發器。

Jenkins詳細教程

觸發遠端構建(例如,使用指令碼):

該選項會提供一個介面,可以用來在程式碼層面觸發構建。這裡不做介紹,後期可能會用到。

Build after other projects are built:

該選項意思是“在其他projects構建後構建”。這裡不作介紹,後期可能會用到該選項。

Build periodically:

週期性的構建。很好理解,就是每隔一段時間進行構建。日程表類似 linux crontab書寫格式。如下圖的設定,表示每隔30分鐘進行一次構建。

Jenkins詳細教程

週期構建

Build when a change is pushed to GitLab:

當有更改push到gitlab程式碼倉庫,即觸發構建。後面會有一個觸發構建的地址,一般被稱為webhooks。需要將這個地址配置到gitlab中,webhooks如何配置後面介紹。這個是常用的構建觸發器。

Poll SCM:

該選項是配合上面這個選項使用的。當代碼倉庫發生改動,jenkins並不知道。需要配置這個選項,週期性的去檢查程式碼倉庫是否發生改動。

Jenkins詳細教程

十分鐘檢查一次

4。構建環境

構建環境就是構建之前的一些準備工作,如指定構建工具(在這裡我使用ant)。

Jenkins詳細教程

With Ant:

選擇這個工具,並指定ant版本和jdk版本。這兩個工具的版本我都事先在伺服器上安裝,並且在jenkins全域性工具中配置好了。

其他選項不作介紹,同樣可以檢視“幫助資訊” 獲得使用幫助。

5。構建

選擇下方的增加構建步驟。

Jenkins詳細教程

增加構建步驟

構建環境中的構建工具

可以選擇的項很多。這裡就介紹“Invoke Ant” 和“Execute shell”。

Eexcute shell

: 執行shell命令,該工具是針對linux環境的,windows環境也有對應的工 具“Execute Windows batch command”。 在構建之前,可能我們需要執行一些命令,比如壓縮包的解壓之類的。為了演示,我就簡單的執行 “echo $RANDOM” 這樣的linux shell下生產隨機數命令。

Invoke Ant

:Ant是一款java專案構建工具,當然也能用來構建php。

Jenkins詳細教程

Ant Version

: 選擇Ant版本。這個ant版本是安裝在jenkins伺服器上的版本,並且需要在jenkins“系統工具”中設定好。

Targets

:要執行的操作,一行一個操作任務。以上圖為例,build是構建,tar是打包。

Build File:

是Ant構建的配置檔案,如果不指定,則是在專案路徑下的workspace目錄中的build。xml。build。xml檔案具體怎麼配置,後面再細講。

properties:

設定一些變數,這些變數可以在build。xml 中被引用。

Send files or execute commands over SSH:

傳送檔案到遠端主機或執行命令(指令碼)

Jenkins詳細教程

Name

: SSH Server的名稱。SSH Server可以在jenkins-系統設定中配置。

source files

: 需要傳送給遠端主機的原始檔。

Remove prefix:

移除前面的路徑。如果不設定這個引數,則遠端主機會自動建立構建源 source files 包含的那個路徑。

Remote directory

: 遠端主機目錄。

Exec command

:在遠端主機上執行的命令,或者執行的指令碼。

6.構建後操作

構建後操作,就是對project構建完成後的一些後續操作,比如生成相應的程式碼測試報告。

Jenkins詳細教程

Jenkins詳細教程

郵件通知

Publish Clover PHP Coverage Report:

釋出程式碼覆蓋率xml格式的檔案報告。路徑會在“build。xml”檔案中定義

Publish HTML reports

:釋出程式碼覆蓋率的HTML報告。

Report Crap:

釋出crap報告

E-mail Notification:

郵件通知,構建完成後發郵件到指定的郵箱。

以上配置完成後,點選儲存。

7.其他相關配置

SSH Server配置

登入jenkins —— 系統管理 —— 系統設定

配置請看下圖

Jenkins詳細教程

SSH SERVER

SSH Servers:

由於jenkins伺服器公鑰檔案我已經配置好,所以之後新增SSH Servers 只需要配置這一項即可。

Name:

自定義,需要全域性唯一。

HostName:

主機名,直接用ip地址即可。

Username:

新增Server的使用者名稱,這裡配置的是root。

Remote Directory:

遠端目錄。jenkins伺服器傳送檔案給新增的server預設是在這個目錄。

Ant 配置檔案 “build。xml”

接下來講解Ant 構建配置檔案“build。xml”。 之所以是build。xml 這是因為官方慣例。就好比任何程式語言的入門都會是列印“Hello world”。 你也可以用其他名稱代替“build。xml” 。

下面針對配置檔案“build。xml” 關鍵配置進行說明。

Jenkins詳細教程

project name就是專案名稱,和jenkins所建立的對應。

target name=“build” 就是構建的名稱,和jenkins構建步驟 那裡的targets對應。depends指明構建需要進行的一些操作。

property 用來設定變數。

fileset 這一行指明瞭一個資料夾,用include來指明需要包含的檔案,exclude指明不包含的檔案,“tar”即是打包這個資料夾中匹配到的檔案。

下面的這些target都是一些實際的操作步驟,比如make_runtime這個“target” 就是建立了一些目錄。phpcs就是利用PHP_CodeSniffer這個工具 對PHP程式碼規範與質量檢查工具。

Jenkins詳細教程

Jenkins詳細教程

最後這個target “tar” 就是打包檔案。因為上面的build 並沒有包含這個target,所以預設情況下,執行build是不會打包檔案的,所以在jenkins project配置介面,Ant構建那一步的targets,我們才會有“build” 和 “tar” 這兩個targets。如果build。xml 中 “build”這個target depends中已經包含“tar” , 就不需要在jenkins中增加“tar”了。

其他一些target 都是利用一些工具對php程式碼的操作,比如phpunit是進行php單元測試。這一些方面我沒有深入的研究,只是進行了一些簡單的配置,畢竟不是這方面的專業人士。

配置 Gitlab webhooks

在gitlab的project頁面 開啟

settings

,再開啟

web hooks

。點選

"ADD WEB HOOK"

新增webhook。把之前jenkins配置中的那個url 新增到這裡,新增完成後,點選

"TEST HOOK"

進行測試,如果顯示SUCCESS 則表示新增成功。

Jenkins詳細教程

Jenkins詳細教程

Jenkins詳細教程

Jenkins詳細教程

Jenkins詳細教程

配置phpunit。xml

phpunit。xml是phpunit這個工具用來單元測試所需要的配置檔案。這個檔案的名稱同樣也是可以自定義的,但是要在“build。xml”中配置好名字就行。預設情況下,用“phpunit。xml”, 則不需要在“build。xml”中配置檔名。

Jenkins詳細教程

build。xml中phpunit配置

fileset dir 指定單元測試檔案所在路徑,include指定包含哪些檔案,支援萬用字元匹配。當然也可以用exclude關鍵字指定不包含的檔案。

Jenkins詳細教程

四、進行jenkins project 構建

第一次配置好jenkins project之後,會自動觸發一次構建。此後,每當有commit 提交到master分支(前面設定的是master分支,也可以設定為其他分支),就會觸發一次構建。當然也可以在project頁面手動觸發構建。點選左邊的“立即構建” 手動觸發構建。

Jenkins詳細教程

手動觸發構建

五、構建結果說明

構建狀態

Successful藍色

:構建完成,並且被認為是穩定的。

Unstable黃色

:構建完成,但被認為是不穩定的。

Failed紅色

:構建失敗。

Disable灰色

:構建已禁用

構建穩定性

構建穩定性用天氣表示:

晴、晴轉多雲、多雲、小雨、雷陣雨

。天氣越好表示構建越穩定,反之亦然。

構建歷史介面

console output:

輸出構建的日誌資訊

六、jenkins許可權管理

由於jenkins預設的許可權管理體系不支援使用者組或角色的配置,因此需要安裝第三發外掛來支援角色的配置,本文將使用Role Strategy Plugin。基於這個外掛的許可權管理設定請參考這篇文章:http://blog。csdn。net/russ44/article/details/52276222,這裡不作詳細介紹。

至此,就可以用jenkins週而復始的進行CI了,當然jenkins是一個強大的工具,功能絕不僅僅是以上這些,其他方面要是以後用到,我會更新到這篇文章中。有疑問歡迎在下方留言。

最後,放上一張Jenkins的思維導圖

Jenkins詳細教程