1. 程式人生 > >Jenkins 可擴充套件持續整合引擎全流程(自動構建-自動部署)

Jenkins 可擴充套件持續整合引擎全流程(自動構建-自動部署)

Jenkins是一個開源軟體專案,是基於Java開發的一種持續整合工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平臺,使軟體的持續整合變成可能。

  • 官方網址:https://jenkins.io/zh/
  • 下載地址:https://jenkins.io/download/
  • 下載型別:.war

一、安裝

1.Windows 服務安裝(下載上圖中的Windows版本)

直接安裝即可。

2.Tomcat 部署安裝(Tomcat + .war)

此處省略,只需安裝Java JDK和Tomcat後,將下載地war包放入webapps下啟動tomcat即可訪問。

3.cmd java命令安裝(cmd + .war)

這種方式相對來說比較通用,建議大家使用這種方式來安裝,開啟cmd,進入到.war包所在目錄,執行以下命令。(很多人第一次啟動可能會報錯ssl等,這個後面需要修改協議,可以忽略,只要啟動顯示running就算是成功的了)

java -jar jenkins.war --httpPort=12020

啟動完成後,使用瀏覽器開啟地址。

http://127.0.0.1:12020

輸入預設密碼進入,已經提示從以下地址進入並查看出密碼。

C:\Users\WENC\.jenkins\secrets\initialAdminPassword

進入到該介面,顯示已經離線,我們先解決這個問題。

開啟 http://127.0.0.1:12020/pluginManager/advanced,修改Update Site。

https://updates.jenkins.io/update-center.json
修改為
http://updates.jenkins.io/update-center.json

重啟Jenkins,之前報錯的ssl問題會消失。

進入Jenkins頁面。

安裝推薦的外掛,後續有其他需要再另行安裝其他外掛即可,然後進入建立管理員使用者更介面。

儲存並完成後,可能會出現空白頁面,重啟一下Jenkins就好了。

二、更改Jenkins主目錄位置(cmd + .war方式)

Jenkins採用 cmd + .war方式安裝,預設生成的主目錄位置為:C:\Users\WENC\.jenkins(系統管理-主目錄,可見),現將主目錄位置移動到D:\Jenkins。

  • 到環境變數配置中,新增系統變數:JENKINS_HOME,值:D:\Jenkins。
  • 然後重啟Jenkins,即可觀察到位置是否被改變。(將cmd關閉後,再重新開啟cmd,啟動Jenkins)

更改目錄後,第一次啟動會報錯,因為沒有之前已經安裝過的外掛資訊等,然後我們再從原安裝目錄將檔案全部拷貝覆蓋到現在的目錄即可。

C:\Users\WENC\.jenkins
拷貝並覆蓋到
D:\Jenkins

再次重新啟動即可。

三、Jenkins配置

系統設定-全域性工具配置,配置JDK、Maven、Git等。

安裝Maven Integration 外掛,避免新建任務時,無Maven專案選項。

關閉、重啟、重載入

關閉
http://127.0.0.1:12020/exit
重啟
http://127.0.0.1:12020/restart
重新載入配置資訊
http://127.0.0.1:12020/reload

四、構建Maven 專案

構建Maven 專案。

通用設定

原始碼管理

SVN為例:專案svn地址設定,賬號設定。

構建觸發器

”構建觸發器”是一個持續整合的觸發器外掛,可以根據已經完成構建的結果,觸發新Job或者傳遞引數。預設的選項是Build whenever a SNAPSHOT dependency is built,意思是依賴於快照的構建,意思是依賴於快照的構建,當代碼有更新時就構建專案。

Build periodically和Poll SCM可以設定定時自動構建。兩者區別如下:

  • Poll SCM:定時,檢查原始碼變更(根據SCM軟體的版本號),如果有更新就checkout最新code下來,然後執行構建動作。
  • Build periodically:定時,進行專案構建(不關心原始碼是否發生變化)。

    栗子:日程表表達方式,鍵入以下命令,以每分鐘為例。

#每分鐘
* * * * *
#每小時
H * * * *
#每12小時
H */12 * * *

#更多規則解釋

MINUTE    Minutes within the hour (0–59)

HOUR    The hour of the day (0–23)

DOM    The day of the month (1–31)

MONTH    The month (1–12)

DOW    The day of the week (0–7) where 0 and 7 are Sunday.

指定順序為MINUTE HOUR DOM MONTH DOW

在某個域指定多個值的規則是:

* specifies all valid values
M-N specifies a range of values
M-N/X or */X steps by intervals of X through the specified range or whole valid range
A,B,...,Z enumerates multiple values

如果要定期執行任務,必須提供H (for "hash")標識。

比如0 0 * * *會在同一時間執行所有任務,而使用H H * * *也會在每天執行一次任務,但是並不是同一時間,這樣就可以節省很多資源。

H還可以用於範圍:H H(0-7) * * * 標識在每天12:00-7:59之間的某個時間執行任務。

 H * * * * 代表每個小時執行一次。

H/15 * * * *每15分鐘執行一次。

Pre Steps 構建步驟之前

呼叫頂層 Maven 目標,這裡我們可以選擇在構建專案之前使用maven命令對專案進行操作,如:clean 、complier、package 、install。

Build 構建

Root POM(專案pom.xml所在位置):專案名稱/pom.xml 或 pom.xml

Goals and options:略

節點測試

到達這一步,我們可以先嚐試構建專案,回到Jenkins主介面,點選對應專案構建,構建完成後,可以看到專案構建記錄。

點選連結,可以看到每一次構建的情況,藍色表示成功,紅色表示失敗。

點選控制檯輸出,可以檢視到構建資訊,如果報錯自行尋找原因。

自動部署到Tomcat伺服器(Deploy To Container Plugin外掛)

自動部署.war包到Tomcat伺服器下,這裡Tomcat伺服器在本地Windows系統上為例,Linux系統不同,後續新增。

首先,配置Tomcat伺服器,開啟Tomcat目錄,conf -> tomcat-users.xml 檔案,在tomcat-users標籤中間空白處新增以下程式碼。

username 和 password 設定為 admin,Jenkins裡面需要配置賬號資訊才有許可權登陸Tomcat操作。

<role rolename="manager-gui"/>

<role rolename="manager-script"/>

<role rolename="manager-jmx"/>

<role rolename="manager-status"/>

<user roles="manager-gui,manager-script,manager-jmx,manager-status" username="admin" password="admin"/>

接著回到Jenkins,到外掛中心安裝Deploy To Container Plugin外掛。

在“構建後操作”下,新增“Deploy war/ear to a container”。

WAR/EAR files:配置為上一個操作步驟,生成.war打包檔案的位置,我這裡是生成在根目錄 -> target 目錄下。

Context path:配置訪問路徑名,如果不帶專案名,則填入"\"即可。

Containers:容器型別,選擇對應的伺服器型別,有GlassFish、JBoss、Tomcat,3種容器。

Containers - Credentials:容器的登陸賬號,上一步我們已經將管理員賬號密碼寫入到conf -> tomcat-users.xml檔案種,即admin。

Containers - Tomcat URL:容器訪問路徑,即通過該連結和提供的賬號密碼,Jenkins可以找到容器位置並進行部署,因此在介面上沒有看到需要填寫容器物理路徑的地方,這裡我設定的tomcat埠即18080。

測試部署

先將Tomcat伺服器開啟。

點選開始構建專案,則完成了Maven專案從構建 -> 自動釋出的全流程。

我們嘗試在編輯器中完成程式碼更新,提交到svn伺服器上,Jenkins根據我設定的每分鐘檢查一次原始碼是否變更過,如變更則進行構建,然後自動更新部署到Tomcat伺服器上。

Post Steps(未測試)

在maven專案建立完成後,我們還需要實現每次構建完成,將war釋出到目標主機上,以實現自動釋出。我們通過新增shell實現自動釋出。

找到Post steps下有個Execute shell:

【注意】:Jenkins在執行該shell指令碼的時候是以jenkins這個使用者身份去執行。某些場景下請注意環境變數PATH。

五、配置郵件通知(未測試)

系統管理-系統設定-Jenkins Location,填入系統管理員郵件地址,收件人。

Email Extension Plugin外掛

Default Content內容如下

構建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
<hr/>
專案名稱:$PROJECT_NAME<br/><hr/>
構建編號:$BUILD_NUMBER<br/><hr/>
svn版本號:${SVN_REVISION}<br/><hr/>
構建狀態:$BUILD_STATUS<br/><hr/>
觸發原因:${CAUSE}<br/><hr/>
構建日誌地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
構建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
變更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
Check console output at $BUILD_URL to view the results.

郵件通知(未測試)

  • 騰訊郵箱SMTP伺服器:smtp.qq.com
  • 使用SMTP認證,填寫傳送人賬戶密碼
  • 勾選,傳送測試右鍵測試配置,填寫接收人
  • Test configuration

配置專案郵件通知

進入到專案配置中

點選最後的,新增構建後操作步驟-Editable Email Notification,編輯以下資訊。

構建成功失敗都需要傳送郵件。