Jenkins 可擴展持續集成引擎全流程(自動構建-自動部署)

Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。html

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

1、安裝

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

    直接安裝便可。web

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

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

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

    這種方式相對來講比較通用,建議你們使用這種方式來安裝,打開cmd,進入到.war包所在目錄,執行如下命令。(不少人第一次啓動可能會報錯ssl等,這個後面須要修改協議,能夠忽略,只要啓動顯示running就算是成功的了)tomcat

java -jar jenkins.war --httpPort=12020

    啓動完成後,使用瀏覽器打開地址。安全

http://127.0.0.1:12020

    輸入默認密碼進入,已經提示從如下地址進入並查看出密碼。服務器

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

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

    打開 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就行了。

2、更改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

    再次從新啓動便可。

3、Jenkins配置

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

3.1 Maven Integration 插件

    介紹:攢略。

    安裝Maven Integration 插件,避免新建任務時,無Maven項目選項。

3.2 Jenkins關閉、重啓、從新加載

關閉
http://127.0.0.1:12020/exit
重啓
http://127.0.0.1:12020/restart
從新加載配置信息
http://127.0.0.1:12020/reload

4、構建項目

    構建Maven 項目爲例。

4.1 通用設置

4.2 源碼管理

    SVN爲例:項目svn地址設置,帳號設置。

4.3 構建觸發器

」構建觸發器」是一個持續集成的觸發器插件,能夠根據已經完成構建的結果,觸發新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分鐘執行一次。

4.4 Pre Steps 構建步驟以前

    調用頂層 Maven 目標,這裏咱們能夠選擇在構建項目以前使用maven命令對項目進行操做,如:clean 、complier、package 、install。

4.5 Build 構建

  • Root POM(項目pom.xml所在位置):項目名稱/pom.xml 或 pom.xml
  • Goals and options:略

4.6 Post Steps(未測試)

    在maven項目建立完成後,咱們還須要實現每次構建完成,將war發佈到目標主機上,以實現自動發佈。咱們經過添加shell實現自動發佈。

    找到Post steps下有個Execute shell:

    【注意】:Jenkins在執行該shell腳本的時候是以jenkins這個用戶身份去執行。某些場景下請注意環境變量PATH。

5、測試構建

    到達這一步,咱們能夠先嚐試構建項目,回到Jenkins主界面,點擊對應項目構建,構建完成後,能夠看到項目構建記錄。

    點擊連接,能夠看到每一次構建的狀況,藍色表示成功,紅色表示失敗。

    點擊控制檯輸出,能夠查看到構建信息,若是報錯自行尋找緣由。

6、自動部署到Tomcat服務器(Deploy To Container Plugin插件)

  1. 自動部署.war包到Tomcat服務器下,這裏Tomcat服務器在本地Windows系統上爲例,Linux系統不一樣,後續添加。
  2. 首先,配置Tomcat服務器,打開Tomcat目錄,conf -> tomcat-users.xml 文件,在tomcat-users標籤中間空白處添加如下代碼。
  3. 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。

7、測試部署

  1. 先將Tomcat服務器打開。
  2. 點擊開始構建項目,則完成了Maven項目從構建 -> 自動發佈的全流程。
  3. 咱們嘗試在編輯器中完成代碼更新,提交到svn服務器上,Jenkins根據我設置的每分鐘檢查一次源代碼是否變動過,如變動則進行構建,而後自動更新部署到Tomcat服務器上。

8、郵件通知

    Jenkins中帶有郵件通知服務,即項目在持續化構建過程當中,咱們能夠將構建等信息或問題經過Email的方式發送到指定的郵箱中,達到一個通知的效果,如下列出2種郵件服務,第一種是Jenkins中已經自帶的簡單郵件服務,第二種是Email Extension Plugin插件複雜郵件服務。

    首先,咱們先對系統的全局變量作一個設置,系統管理-系統設置-Jenkins Location,填入系統管理員郵件地址,收件人。

  • Jenkins URL:Jenkins訪問地址。
  • 系統管理員郵件地址:郵件接收者的郵箱。

8.1 開啓郵箱 SMTP 服務

    通常咱們都會使用第三方的郵箱來完成,好比:網易、QQ郵箱等,所以咱們須要在第三方郵箱的設置中先開啓本身的SMTP服務,這裏咱們使用QQ郵箱來作栗子。

  •     進入QQ郵箱,設置 -> 帳號 -> 帳號安全,能夠看到服務,開啓POP3/SMTP和IMAP/SMTP服務。
  •     點擊「生成受權碼」,其它郵箱沒有進行測試,可是QQ這裏必須點擊」生成受權碼「,由於這個就至關因而」郵箱密碼「用於郵件服務當中。
  •     注意:若是在測試過程當中(8.2中),Test configuration報錯 535,通常狀況是這個錯誤致使的,由於設置的發件人的密碼並非你QQ密碼,而是受權碼。

8.2 自帶簡單郵件服務

    Jenkins中自帶的簡單郵件服務,系統管理-系統設置-郵件通知,這裏設置的是」發件人「帳號信息。

  •     SMTP服務器:登錄第三方郵箱中進行查詢,或者度娘。QQ郵箱:smtp.qq.com
  •     用戶默認郵件後綴:@qq.com
  •     使用SMTP認證:勾選
  •     用戶名:QQ郵箱
  •     密碼:受權碼(QQ郵箱是使用受權碼,其它郵箱自行查找)
  •     使用SSL協議、SMTP端口:勾選狀態,默認465端口;不勾選,默認25端口;若有其餘要求,請自行設置
  •     經過發送測試郵件測試配置:勾選
  •     Test e-mail recipient:測試接收人,測試時,發件人和收件人能夠設置爲一致,等於本身給本身發郵件。

    點擊Test configuration,進行測試,Email was successfully sent 表示已經成功發送郵件,自行到郵箱查看,若是出現535,則多是上一步發件人不是使用受權碼致使。(QQ郵箱)

8.3 在項目中使用簡單郵件服務

    項目 -> 配置 -> Post Steps -> 添加」執行shell「,這裏輸入一個錯誤的命令直接強制使構建失敗。

    命令:ech "fail"

    構建設置:

  •     勾選」E-mail Notification「,填寫」Recipients「:郵件接收人。
  •     默認勾選」Send e-mail for every unstable build「,每當構建失敗時發送郵件。
  •     默認勾選」Send e-mail for each failed module「,每個失敗模塊發送郵件。
  •     注意:該簡單郵件服務只提供了構建失敗時的情況,沒有提供其餘階段的通知,好比:構建成功時,構建某個階段時等等,同時也不能發送html格式的反饋信息。

    設置完畢,點擊開始構建項目,在控制檯能夠看到構建失敗的信息。

    郵箱裏的構建失敗郵件信息。

8.4 複雜郵件服務 Email Extension Plugin插件

    首先到插件中安裝該插件(Email Extension Plugin),該插件能夠先配置全局統一配置信息,項目中默認使用全局配置信息,而後也能夠針對每個項目作不一樣的配置調整。

    全局配置信息,系統管理-系統配置-Extended E-mail Notification,這裏設置的是」發件人「帳號信息。前6項配置和簡單郵件配置一致便可。

  •     SMTP server:登錄第三方郵箱中進行查詢,或者度娘。QQ郵箱:smtp.qq.com
  •     Default user E-mail suffix:@qq.com或無
  •     Use SMTP Authentication:勾選
  •     User Name:QQ郵箱
  •     Password:受權碼(QQ郵箱是使用受權碼,其它郵箱自行查找)
  •     Use SSL、SMTP port:勾選狀態,默認465端口;不勾選,默認25端口;若有其餘要求,請自行設置
  •     Default Content Type:HTML(text/html),使用html格式,默認的簡單郵件服務是不容許使用的
  •     Default Recipients:默認郵件接收人
  •     Default Subject:默認主題
  •     Default Content:默認內容

    舉個網上的栗子,Default Subject內容以下:  

構建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

    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.

8.5 在項目中使用複雜郵件服務

    來到項目配置 -> 最後一步」添加構建後操做步驟「 -> Editable Email Notification,在這裏已經配置好全局的統一配置信息,重要選項內已經使用」$DEFAULT_「打頭的內部表達式來定義,其他的選配須要自行設置,針對不一樣的構建項目,這裏的配置信息能夠作不一樣的調整,不一樣的項目負責人接收各自項目的信息,不然將使用全局統一配置項。

  •     Disable Extended Email Publisher:勾選後,郵件就不發送。
  •     Project Recipient List:收件人地址;多個收件人郵件地址用逗號進行分割;想使用全局默認配置的話,可使用$DEFAULT_RECIPIENTS
  •     Project Reply-To List:容許回覆人的地址;想使用系統設置中的默認值的話,可使用$DEFAULT_REPLYTO
  •     Attach Build Log:發送的郵件是否包含日誌
  •     Triggers:修改Triggers設置,移除Developers。這裏設置了兩種狀態下發送郵件,Failure - Any 和 Success,所有使用Recipient List,若是上面使用默認配置,則會去尋找全局統一配置信息。

    從新構建,進行測試,咱們在控制檯能夠看到郵件發送成功的信息。

    郵箱裏會收到構建報告。

9、待定插件更新

相關文章
相關標籤/搜索