Jenkins持續集成企業實戰


閱讀目錄:

Jenkins持續集成企業實戰
1.1 目前主流網站部署的流程
1.2 Jenkins持續集成簡介
1.3 Jenkins持續集成組件
1.4 Jenkins平台安裝部署
1.5 Jenkins相關概念
1.6 Jenkins平台設置
1.7 Jenkins構建JOB工程
1.8 Jenkins自動化部署
1.9 Jenkins插件安裝
1.10 Jenkins郵件配置
1.11 Jenkins多實例配置
1.12 Jenkins+Ansible高並發構建

Jenkins持續集成企業實戰

構建企業自動化部署平台,可以大大的提升企業網站部署效率,企業生產環境每天需要更新各種系統,傳統更網站的方法是使用Shell+Rsync實現網站代碼備份、更新,更新完之后,運維人員手動發送郵件給測試人員、開發人員以及相關的業務人員,傳統更新網站耗費大量的人力,同時偶爾由於誤操作會出現細小問題。構建自動化部署平台變得迫在眉睫。

本章向讀者介紹傳統網站部署方法、企業主流部署方法、Jenkins持續集成簡介、持續集成平台構建、Jenkins插件部署、Jenkins自動化部署網站、Jenkins多實例及Ansible+Jenkins批量自動部署等。

1.1  目前主流網站部署的流程

傳統部署網站的方法對於單台或者幾台服務器更新很容易,如果服務器規模超過百台或者千台,或者更新網站代碼很頻繁,手工更新就非常消耗時間成本。

基於主流的Hudson/Jenkins工具平台實現全自動網站部署、網站測試、網站回滾會大大的減輕網站部署的成本,Jenkins的前身為HudsonHduson主要用於商業版,Jenkins為開源免費版。

Jenkins是一個可擴展的持續集成引擎、框架,是一個開源軟件項目,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。而且Jenkins平台的安裝和配置非常的容易,使用也非常簡單。構建Jenkins平台可以解放如下人員的雙手,如圖:

  • 開發人員,對於開發人員來說,只需負責網站代碼的編寫,不需要手動再對源碼進行編譯、打包、單元測試等工作,開發人員直接將寫好的代碼分支存放在SVNGIT倉庫即可。
  • 運維人員,對於運維人員來說,使用Jenkins自動部署,可以減輕人工干預的錯誤率,同時解放運維人員繁雜的上傳代碼、手動備份、手動更新。
  • 測試人員,對於測試人員來說,可以通過Jenkins進行代碼測試、網站功能或者性能測試。  

1.2  Jenkins持續集成簡介

持續集成(Continuous IntegrationCI|CD)是一種軟件開發實踐,對於提高軟件開發效率並保障軟件開發質量提供了理論基礎,持續集成意義如下:

  • 持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減少重復過程以節省時間、費用和工作量;
  • 持續集成保障了每個時間點上團隊成員提交的代碼是能成功集成的。換言之,任何時間點都能第一時間發現軟件的集成問題,使任意時間發布可部署的軟件成為了可能;
  • 持續集成還能利於軟件本身的發展趨勢,這點在需求不明確或是頻繁性變更的情景中尤其重要,持續集成的質量能幫助團隊進行有效決策,同時建立團隊對開發產品的信心。

1.3  Jenkins持續集成組件

  • 自動構建過程JOBJOB的功能主要是:獲取SVN/GIT源碼、自動編譯、自動打包、部署分發和自動測試等;
  • 源代碼存儲庫,開發編寫代碼需上傳至SVNGIT代碼庫中,供Jenkins來獲取;
  • Jenkins持續集成服務器,用於部署Jenkins UI、存放JOB工程、各種插件、編譯打包的數據等。

1.4  Jenkins平台安裝部署

Jenkins官網免費獲取Jenkins軟件,官網地址為:http://mirrors.jenkins-ci.org/下載穩定的Jenkins版本。由於Jenkins是基於Java開發的一種持續集成工具,所以Jenkins服務器需安裝JAVA JDK開發軟件。Jenkins平台搭建步驟如下:

(1) Jenkins穩定版下載:

http://updates.jenkins-ci.org/download/war/1.651.2/jenkins.war

(2) 官網下載JAVA JDK,並解壓安裝,代碼如下:

tar -xzf  jdk-7u25-linux-x64.tar.gz  mkdir -p /usr/java/ mv jdk1.7.0_25/ /usr/java/

(3) 配置JAVA環境變量,/etc/profile配置文件中末尾加入如下代碼:

export JAVA_HOME=/usr/java/jdk1.7.0_25

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

執行如下代碼使其環境變量,並查看環境變量,命令如下:

source /etc/profile

java  --version

(4) Tomcat JAVA容器配置

wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-6/v6.0.53/bin/apache-tomcat-6.0.53.tar.gz

tar  xzf  apache-tomcat-6.0.53.tar.gz

mv  apache-tomcat-6.0.53   /usr/local/tomcat

(5) Tomcat發布Jenkins,將Jenkins war拷貝至Tomcat默認發布目錄,並使用jar工具解壓,啟動Tomcat服務即可,代碼如下:

rm    -rf  /usr/local/tomcat/webapps/*

mkdir  -p /usr/local/tomcat/webapps/ROOT/

mv    jenkins.war  /usr/local/tomcat/webapps/ROOT/

cd    /usr/local/tomcat/webapps/ROOT/

jar    –xvf  jenkins.warrm -rf  Jenkins.war

sh    /usr/local/tomcat/bin/startup.sh

(6) 通過客戶端瀏覽器訪問Jenkins服務器IP地址,如圖22-5所示:

              圖22-5 Jenkins自動部署平台

1.5  Jenkins相關概念

要熟練掌握Jenkins持續集成的配置、使用和管理,需要了解相關的概念,例如代碼開發、編譯、打包、構建等名稱概念,常見的代碼相關概念包括:MAKEANTMAVENEclipseJenkins等。

(1) Make編譯工具

Make編譯工具是LinuxWindows最原始的編譯工具,在Linux下編譯程序常用makeWindows下對應的工具為nmake。讀取本地makefile文件,該文件決定了源文件之間的依賴關系,Make負責根據makefile文件去組織構建軟件,負責指揮編譯器如何編譯,連接器如何連接,以及最后生成可用二進制的代碼。

(2) Ant編譯工具

Make工具在編譯比較復雜的工程使用起來不方便,語法很難理解,延伸出Ant工具。Ant工具屬於Apache基金會軟件成員之一,是一個將軟件編譯、測試、部署等步驟聯系在一起加以自動化的一個工具,大多用於Java環境中的軟件開發。

Ant構建文件是XML文件。每個構建文件定義一個唯一的項目(Project元素)。每個項目下可以定義很多目標元素,這些目標之間可以有依賴關系。

構建一個新的項目時,首先應該編寫Ant構建文件。因為構建文件定義了構建過程,並為團隊開發中每個人所使用。

Ant構建文件默認名為build.xml,也可以取其他的名字。只不過在運行的時候需把這個命名當作參數傳給Ant。構建文件可以放在任何的位置,一般做法是放在項目頂層目錄也即根目錄,這樣可以保持項目的簡潔和清晰。

(3) Maven編譯工具

Maven工具是對ant工具的進一步改進,在make工具中,如果我們要編譯某些源文件,首先要安裝編譯器等工具。有時候需要不同版本的編譯器,在java的編譯器需要不同的各種包的支持,如果把每個包都下載下來,在makefile中進行配置制定,當需要的包非常多時,很難管理。

MavenAnt類似,也是個構建(build)工具,它是如何調用各種不同的編譯器連接器呢?使用Maven plugin (maven 插件),Maven項目對象模型POM (Project Object Model),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具Maven 除了以程序構建能力為特色之外,還提供高級項目管理工具。

POMMaven項目中的文件,使用XML表示,名稱為pom.xml。在Maven中,當構建Project的時候,不僅僅是一堆包含代碼的文件。還包含pom.xml配置文件,該文件包括Project與開發者有關的、缺陷跟蹤系統、組織與許可、項目的URL、項目依賴、以及其他配置。

在基於Maven構建編譯時,project可以什么都沒有,甚至沒有代碼,但是必須包含pom.xml文件。由於 Maven 的缺省構建規則有較高的可重用性,所以常常用兩三行 Maven 構建腳本就可以構建簡單的項目。

由於 Maven 的面向項目的方法,許多 Apache Jakarta 項目發文時使用 Maven,而且公司項目采用 Maven 的比例在持續增長。

(4) Jenkins框架工具

Maven可以實現對軟件代碼進行編譯、打包、測試,功能已經很強大了,那還需要Jenkins做什么呢?Maven可以控制編譯,控制連接,可以生成各種報告,可以進行代碼測試。

但是默認不能控制完整的流程? 沒有順序定義,是先編譯還是先連接?先進行代碼測試,還是先生成報告?可以使用腳本來對Maven進行控制,實現這些流程的控制。

(5) Eclipse工具

Eclipse 是一個開放源代碼的、基於Java的可擴展開發平台。就其本身而言,它只是一個框架和一組服務,用於通過插件組件構建開發環境。Eclipse 附帶了一個標准的插件集,包括Java開發工具(Java Development KitJDK),主要用於開發者開發網站代碼。

1.6  Jenkins平台設置

Jenkins持續基礎平台部署完畢,需要進行簡單配置,例如配置JAVA路徑、安裝Maven、指定SVNGIT倉庫地址等,如下為JAVA路徑和Maven設置步驟:

(1) Jenkins服務器安裝Maven

wget

http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

tar -xzf  apache-maven-3.3.9-bin.tar.gz

mv  apache-maven-3.3.9   /usr/maven/

(2) Jenkins系統設置環境變量,如圖22-6a)、22-6b)所示:

          圖22-6aJenkins系統設置

 

          圖22-6bJenkins系統設置

(3) Jenkins系統設置完畢,需創建job工程:

Jenkins平台首頁à創建一個新任務填入Item名稱構建一個maven項目單擊OK,如圖22-7所示:

 

22-7 Jenkins創建Jenkins JOB工程

(4) 創建完JOB任務,需對其任務進行配置,如圖22-8所示:

             22-8 Jenkins配置JOB工程

(5) 單擊www.jfedu.net工程名à配置進入JOB工程詳細配置à源碼管理選擇Subversion配置SVN倉庫地址,如果報錯需要輸入SVN用戶名和密碼,如圖22-9所示:

             22-9 Jenkins配置SVN倉庫地址

源碼管理,SVN代碼遷出參數詳解如下:

Respository url     配置SVN倉庫地址;

Local module directory         存儲SVN源碼的路徑;

Ignore externals option     忽略額外參數;

Check-out Strategy     代碼檢出策略;

Repository browser     倉庫瀏覽器,默認Auto

add more locations 源碼管理,允許下載多個地址的代碼;

Repository depth     獲取SVN源碼的目錄深度,默認為infinity

empty: 不檢出項目的任何文件,files: 所有文件,immediates:目錄第一級,infinity:整個目錄所有文件。

(6) 配置Maven編譯參數,Build Goals and options輸入“clean install -Dmaven.test.skip=true”,此處為maven自動編譯、打包並跳過單元測試選項,如圖22-10所示。

 

            圖22-10 Jenkins配置MAVEN編譯參數

Maven工具常用命令如下:

mvn clean     打包清理(刪除target目錄內容);

mvn compile       編譯項目;

mvn package          打包發布;

mvn package -Dmaven.test.skip=ture 打包時跳過測試。

通過以上步驟的配置步驟,即完成了JOB工程的創建。

1.7  Jenkins構建JOB工程

Jenkins JOB工程創建完畢,如下直接運行構建,Jenkins將從SVN倉庫獲取SVN代碼,然后通過Maven編譯、打包,並最終生成可以使用的war包即可。操作步驟如下:

(1) 單擊www.jfedu.net工程名,進入JOB工程詳細配置界面,單擊立即構建,如圖22-11所示:

 

             22-11 Jenkins JOB工程配置界面

(2) 查看Build History,單擊最新一次百分比滾動條任務,如圖22-12所示:

 

           22-12 Jenkins JOB工程Build界面

(3) 進入JOB工程編譯詳細頁面,單擊“Console Output”,如圖22-13所示:

 

           22-13 Jenkins JOB工程Console Output界面

(4) 查看Jenkins構建實時日志,如圖22-14a)、22-14b)所示:

 

           22-14aJenkins JOB工程編譯控制台

 

           22-14bJenkins JOB工程編譯控制台

控制台日志打印“Finished: SUCCESS”,則表示Jenkins持續集成構建完成,會在Jenkins服務器目錄www.jfedu.net工程名目錄下生產網站可用的war文件,將該war包部署至其他服務器即可,war路徑為:/root/.jenkins/workspace/www.jfedu.net/target/edu.war

至此,Jenkins持續集成平台自動構建軟件完成,該步驟只是生成了war包,並沒有實現自動將該war包部署至其他服務器,如果要自動部署需要基於Jenkins插件或者基於ShellPython等自動化部署腳本。

1.8  Jenkins自動化部署

如上通過手動構建Jenkins JOB工程,自動編譯、打包生成war包,並不能實現自動部署,如需要實現自動部署可以基於自動部署插件或者Shell腳本、Python腳本等。

如下以Shell腳本實現Jenkins自動部署war至其他多台服務器,並自動啟動Tomcat,實現最終WEB瀏覽器訪問。Jenkins自動部署完整操作步驟如下:

(1) 單擊www.jfedu.net工程名à配置à構建后操作Add post-build step Archive the artifacts 用於存檔的文件à輸入:**/target/*.war,該選項主要用於Jenkins編譯后會將war包存檔一份到target目錄,該文件可以通過Jenkins TomcatHTTP端口訪問,如圖22-15a)、22-15b)所示:

 

           22-15aJenkins JOB工程編譯控制台

           22-15bJenkins JOB工程編譯控制台

(2) Jenkins構建完畢,訪問Jenkins war存檔的文件,URL地址如下:

http://139.224.227.121:7001/job/www.jfedu.net/lastSuccessfulBuild/artifact/target/edu.war

(3) 選擇Add post-build step Execute shell Command輸入如下代碼,實現Jenkins edu.war包自動部署,如下為139.199.228.59客戶端單台服務器部署edu.war,如果多台可以使用ip.txt列表,將IP加入至ip.txt,通過for循環實現批量部署,如圖22-16a)、22-16b)所示:

cp  /root/.jenkins/workspace/www.jfedu.net/target/edu.war  /root/.jenkins/jobs/www.jfedu.net/builds/lastSuccessfulBuild/archive/target/

ssh  root@ 139.199.228.59  'bash -x -s' < /data/sh/auto_deploy.sh

#for  I  in  `cat ip.txt`do ssh  root@${I}  'bash -x -s' < /data/sh/auto_deploy.sh done

           22-16aJenkins JOB構建完畢執行Shell

           22-16bJenkins JOB構建完畢執行Shell

(4) 基於Jenkinsedu.war自動部署至139.199.228.59服務器Tomcat發布目錄,需提前配置登錄遠程客戶端免秘鑰,免秘鑰配置首先在Jenkins服務器執行ssh-keygen命令,然后按Enter鍵生成公鑰和私鑰;然后將公鑰id_rsa.pub拷貝至客戶端/root/.ssh/目錄,並重命名為authorized_keys,操作命令如下:

ssh-keygen  -t  rsa  -P ' '  -f /root/.ssh/id_rsa

ssh-copy-id -i /root/.ssh/id_rsa.pub 139.199.228.59

(5) Shell腳本需放在Jenkins服務器/data/sh/,無需放在客戶端,Shell腳本內容如下:

#!/bin/bash

#Auto deploy Tomcat for jenkins

#By author jfedu.net 2017

export JAVA_HOME=/usr/java/jdk1.6.0_25

TOMCAT_PID=`/usr/sbin/lsof -n  -P  -t  -i  :8081`

TOMCAT_DIR="/usr/local/tomcat/"

FILES="edu.war"

DES_DIR="/usr/local/tomcat/webapps/ROOT/"

DES_URL="http://139.224.227.121:7001/job/www.jfedu.net/lastSuccessfulBuild/artifact/target/"

BAK_DIR="/export/backup/`date +%Y%m%d-%H%M`"

[ -n "$TOMCAT_PID" ] && kill -9 $TOMCAT_PID

cd $DES_DIR

rm -rf $FILES

mkdir -p $BAK_DIR\cp -a $DES_DIR/* $BAK_DIR/

rm -rf $DES_DIR/*

wget $DES_URL/$FILES

/usr/java/jdk1.6.0_25/bin/jar  -xvf  $FILES

####################

cd $TOMCAT_DIRrm -rf work

/bin/sh $TOMCAT_DIR/bin/start.sh

sleep 10

tail -n 50 $TOMCAT_DIR/logs/catalina.out

如上通過Shell+For循環可以實現網站簡單的異步部署,如果需要將Jenkins edu.war包批量快速部署至100台、500台服務器,該如何去實現呢?后續小結會講解到。

1.9  Jenkins插件安裝

Jenkins最大的功能莫過於插件豐富,基於各種插件可以滿足各項需求,Jenkins本身是一個框架,真正發揮作用的是各種插件。Jenkins默認自帶很多插件,如果需添加新插件,可以在Jenkins平台主頁面進行操作,操作步驟如下:

Jenkins平台首頁à系統管理à管理插件à可選插件à搜索email-ext-plugin插件選擇並安裝,如果沒有該插件,則需單擊高級,手動上傳插件並安裝,操作步驟如圖22-17所示:

           22-17 Jenkins 添加新插件

 

訪問Jenkins官網手動下載插件,將下載的插件傳到服務器Jenkins根目錄(/root、)下的plugins目錄,即/root/.jenkins/plugins目錄,重啟jenkins即可。Jenkins插件下載地址:https://wiki.jenkins-ci.org/display/JENKINS/Plugins。安裝Email-ext-Plugin郵件插件的方法如下:

(1) 下載Email-extToken-macroEmail-template,可以搜索某個插件,輸入插件名稱,如圖22-18所示:

 

           22-18 Jenkins 下載新插件

(2) Email-extToken-macroEmail-template插件下載URL如下:

https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin 

https://wiki.jenkins-ci.org/display/JENKINS/Token+Macro+Plugin 

https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+Template+Plugin 

(3) 安裝Token-macro插件,如圖22-19a)、22-19b)所示:

 

           22-19aJenkins Token-macro插件安裝

 

           22-19bJenkins Token-macro插件安裝

(4) 安裝email-ext插件,如圖22-20所示:

 

           22-20 Jenkins email-ext插件安裝

(5) Email-extToken-macroEmail-template插件安裝完畢,如圖22-21所示:

           22-21 Jenkins 插件安裝完畢

(6) Email插件安裝完畢, Jenkins主界面系統管理系統設置會出現選項Extended E-mail Notification,則表示Jenkins Email郵件插件安裝完畢,如圖22-22所示:

 

           22-22 Jenkins Email郵件插件

如需安裝GITPublish Over插件或者安裝裝Jenkins其他任意插件,方法與Email插件安裝方法一致。

1.10  Jenkins郵件配置

如上Jenkins持續集成配置完畢,可以進行網站代碼的自動更新、部署、升級及回滾操作,通過控制台信息可以查看每個JOB工程構建的狀態。

如果網站項目很多,人工去查看狀態就變得不可取,可以借助Jenkins Email插件實現網站構建完成,自動發送郵件給相應的開發人員、運維人員或者測試人員。Jenkins發送郵件,需安裝Email郵件插件,Email-extToken-macroEmail-templateJenkins Email郵件配置常見參數:

SMTP server 郵件服務器地址;

Default Content Type     內容展現的格式,一般選擇HTML

Default Recipients     默認收件人;

Use SMTP Authentication 使用SMTP身份驗證;

User Name 郵件發送賬戶的用戶名;

Password     郵件發送賬戶的密碼;

SMTP port SMTP服務器端口。

Jenkins Email郵件配置方法如下:

(1) 設置Jenkins郵件發送者,Jenkins平台首頁à系統管理à系統設置àJenkins Locationà填寫Jenkins URL與系統管理員郵件地址,如圖22-23a)、22-23b)所示:

 

           22-23aJenkins Email郵件配置

 

           22-23bJenkins Email郵件配置

(2) 設置發送郵件的SMTP服務器、郵箱后綴,發送類型html、接收者或者抄送者,單擊Jenkins平台首頁à系統管理系統設置 Extended E-mail Notification,填寫如圖22-24所示的選項,包括SMTP server、默認后綴、使用SMTP認證、Default Recipients郵件接收人等信息:

 

           22-24 Jenkins Email郵件配置

(3) 設置郵件的標題Default Subject內容如下:

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

(4) 設置發送郵件的內容,Default Content內容如下:

<hr/>

<h3>(本郵件是程序自動下發的,請勿回復!)</h3><hr/>

項目名稱:$PROJECT_NAME<br/><hr/>

構建編號:$BUILD_NUMBER<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/>

(5) 每個JOB工程郵件設置,單擊www.jfedu.net JOB名稱à配置à構建后操作à選擇Editable Email Notification,如下信息保持默認,出現如圖22-25所示:

 

           22-25 Jenkins EmailJOB郵件模板配置

(6) 選擇Advanced Settings,設置Trigger閥值,選擇發送郵件的觸發器,默認觸發器包括:第一次構建、構建失敗、總是發送郵件、構建成功等,一般選擇always總是發送郵件,發送給developers組,如圖22-26所示。

           22-26 Jenkins Email 觸發器設置

(7) Jenkins構建郵件驗證,如圖22-27a)、22-27b)、22-27c)所示:

 

           22-27aJenkins構建報錯觸發郵件

           22-27bJenkins Email郵件信息

           22-27cJenkins Email郵件信息

1.11  Jenkins多實例配置

單台Jenkins服務器可以滿足企業測試環境及生產環境使用Jenkins自動部署+測試平台,如果每天更新發布多個WEB網站,Jenkins需要同時處理很多的任務。

基於Jenkins分布式,也即多Slave方式可以緩解Jenkins服務器的壓力,Jenkins多實例架構如圖22-28所示,可以在WindowsLinuxMAC等操作系統上執行Slave

           22-28 Jenkins Slave架構圖

JenkinsSlave原理是將原本在Jenkins Master端的構建項目分配給Slave端去執行,Jenkins Master分配任務時,Jenkins Master端通過SSH遠程Slave,在Slave端啟動slave.jar程序,通過Slave.jar實現對網站工程的構建編譯以及自動部署。所以在Slave端服務器必須安裝Java JDK環境來執行Master端分配的構建任務。配置多Slave服務器方法和步驟如下:

(1) Slave服務器,創建遠程執行Jenkins任務的用戶,名稱為jenkinsJenkins工作目錄/home/JenkinsJenkins Master免秘鑰登錄Slave服務器或者通過用戶名和密碼登錄Slave

(2) Slave服務器安裝JAVA JDK版本,並將其軟件路徑加入系統環境變量。

(3) Jenkins master端平台添加管理節點,系統管理à管理節點à新建節點à輸入節點名稱,分別如圖22-29a)、22-29b)、22-29c)所示:

           22-29aJenkins Slave配置

           22-29bJenkins Slave配置

           22-29cJenkins Slave配置

(4) 配置www_slave節點,指定其Jenkins編譯工作目錄,設置IP地址,Credentials Add添加登錄Slave用戶名和密碼,如圖22-30a)、22-30b)所示:

           22-30aJenkins Slave配置

 

          圖22-30bJenkins Slave配置

(5) Jenkins Slave配置完畢,查看SLAVE狀態如如圖22-31所示:

           22-31 Jenkins Slave狀態信息

(6) 單擊www_slave節點,然后選擇launch salve agent,單擊測試Slave Agent是否正常工作,如圖22-32所示:

 

           22-32 Jenkins Slave Agent測試

(7) 出現如圖22-33a)、22-33b)所示,即證明Slave添加成功:

           22-33aJenkins Slave測試

           22-33bJenkins Slave測試

(8) 如上配置完畢,Jenkins-master通過ssh方式來啟動slaveslave.jar腳本,java –jar slave.jarSlave等待master端的任務分配,單擊www.jfedu.net,然后選擇立即構建,如圖22-34所示:

           22-34  Jenkins Slave構建任務

(9) Jenkins+Slave配置完畢后,如果同時運行多個任務,會發現只會運行一個任務,另外的任務在等待,那需要怎么調整呢,需要配置JOB工程勾選在必要的時候並發構建即可,如圖22-35a)、22-35b)所示:

             22-35aJenkins Slave構建多任務

           22-35bJenkins Slave構建多任務

1.12  Jenkins+Ansible高並發構建

Jenkins自動部署基於Shell+For循環方式部署10台以下的JAVA客戶端服務器,效率是可以接受的,但是如果是大規模服務器需要部署或者更新網站,通過for循環串行執行效率會大打折扣,所以需要考慮到並行機制。

Ansible是一款極為靈活的開源工具套件,能夠大大簡化Unix管理員的自動化配置管理與流程控制方式。它利用推送方式對客戶系統加以配置,這樣所有工作都可在主服務器端完成。使用Ansible+Jenkins架構方式實現網站自動部署,滿足上百台、千台服務器的網站部署和更新。

Ansible服務需要部署在Jenkins服務器,客戶端服務器無需安裝AnsibleAnsible基於SSH工作,所以需提前做好免秘鑰或者通過sudo用戶遠程更新網站。此處省略Ansible安裝,Ansible相關知識請參考本書Ansible章節配置。

Ansible自動部署網站,有兩種方法,一種是基於Ansible遠程執行Shell腳本,另外一種是Ansible編寫Playbook劇本,實現網站自動部署。如下為Ansible+Shell腳本方式自動部署網站方法:

(1) Jenkins服務器安裝Ansible軟件,Red HatCentOS操作系統可以直接基於YUM工具自動安裝AnsibleCentOS6.x或者CentOS7.x安裝前,需先安裝epel擴展源,代碼如下:

rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum   install   epel-release  -y

yum   install   ansible       -y

(2) 添加客戶端服務器,在/etc/ansible/hosts中添加需要部署的客戶端IP列表,如下代碼:

[www_jfedu]

139.199.228.59

139.199.228.60

139.199.228.61

139.199.228.62

(3) Jenkins平台首頁à單擊www.jfedu.net項目à選擇配置à單擊Post StepsàExecute shellàCommandà輸入如下代碼,www_jfeduAnsible Hosts組模塊名稱:

cp  /root/.jenkins/workspace/www.jfedu.net/target/edu.war  /root/.jenkins/jobs/www.jfedu.net/builds/lastSuccessfulBuild/archive/target/

ansible www_jfedu  -m  copy -a  "src=/data/sh/auto_deploy.sh dest=/tmp/"

ansible www_jfedu  -m  shell -a  "cd /tmp /bin/bash auto_deploy.sh"

(4) Jenkins服務器端/data/sh/auto_deploy.sh Shell腳本內容如下:

#!/bin/bash

#Auto deploy Tomcat for jenkins

#By author jfedu.net 2017

export JAVA_HOME=/usr/java/jdk1.6.0_25

TOMCAT_PID=`/usr/sbin/lsof -n  -P  -t  -i  :8081`

TOMCAT_DIR="/usr/local/tomcat/"

FILES="edu.war"

DES_DIR="/usr/local/tomcat/webapps/ROOT/"

DES_URL="http://139.224.227.121:7001/job/www.jfedu.net/lastSuccessfulBuild/artifact/target/"

BAK_DIR="/export/backup/`date +%Y%m%d-%H%M`"

[ -n "$TOMCAT_PID" ] && kill -9 $TOMCAT_PID

cd $DES_DIR

rm -rf $FILES

mkdir -p $BAK_DIR\cp -a $DES_DIR/* $BAK_DIR/

rm -rf $DES_DIR/*

wget $DES_URL/$FILES

/usr/java/jdk1.6.0_25/bin/jar  -xvf  $FILES

####################

cd $TOMCAT_DIRrm -rf work

/bin/sh $TOMCAT_DIR/bin/start.sh

sleep 10

tail -n 50 $TOMCAT_DIR/logs/catalina.out

(5) 單擊www.jfedu.net構建任務,查看控制台信息,如圖22-36a)、22-36b)、22-36c)所示:

           22-36aJenkins Ansible自動部署

           22-36bJenkins Ansible自動部署

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM