閱讀目錄:
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的前身為Hudson,Hduson主要用於商業版,Jenkins為開源免費版。
Jenkins是一個可擴展的持續集成引擎、框架,是一個開源軟件項目,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。而且Jenkins平台的安裝和配置非常的容易,使用也非常簡單。構建Jenkins平台可以解放如下人員的雙手,如圖:
- 開發人員,對於開發人員來說,只需負責網站代碼的編寫,不需要手動再對源碼進行編譯、打包、單元測試等工作,開發人員直接將寫好的代碼分支存放在SVN、GIT倉庫即可。
- 運維人員,對於運維人員來說,使用Jenkins自動部署,可以減輕人工干預的錯誤率,同時解放運維人員繁雜的上傳代碼、手動備份、手動更新。
- 測試人員,對於測試人員來說,可以通過Jenkins進行代碼測試、網站功能或者性能測試。
1.2 Jenkins持續集成簡介
持續集成(Continuous Integration,CI|CD)是一種軟件開發實踐,對於提高軟件開發效率並保障軟件開發質量提供了理論基礎,持續集成意義如下:
- 持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減少重復過程以節省時間、費用和工作量;
- 持續集成保障了每個時間點上團隊成員提交的代碼是能成功集成的。換言之,任何時間點都能第一時間發現軟件的集成問題,使任意時間發布可部署的軟件成為了可能;
- 持續集成還能利於軟件本身的發展趨勢,這點在需求不明確或是頻繁性變更的情景中尤其重要,持續集成的質量能幫助團隊進行有效決策,同時建立團隊對開發產品的信心。
1.3 Jenkins持續集成組件
- 自動構建過程JOB,JOB的功能主要是:獲取SVN/GIT源碼、自動編譯、自動打包、部署分發和自動測試等;
- 源代碼存儲庫,開發編寫代碼需上傳至SVN、GIT代碼庫中,供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.war;rm -rf Jenkins.war sh /usr/local/tomcat/bin/startup.sh |
(6) 通過客戶端瀏覽器訪問Jenkins服務器IP地址,如圖22-5所示:
圖22-5 Jenkins自動部署平台
1.5 Jenkins相關概念
要熟練掌握Jenkins持續集成的配置、使用和管理,需要了解相關的概念,例如代碼開發、編譯、打包、構建等名稱概念,常見的代碼相關概念包括:MAKE、ANT、MAVEN、Eclipse、Jenkins等。
(1) Make編譯工具
Make編譯工具是Linux和Windows最原始的編譯工具,在Linux下編譯程序常用make,Windows下對應的工具為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中進行配置制定,當需要的包非常多時,很難管理。
Maven與Ant類似,也是個構建(build)工具,它是如何調用各種不同的編譯器連接器呢?使用Maven plugin (maven 插件),Maven項目對象模型POM (Project Object Model),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。Maven 除了以程序構建能力為特色之外,還提供高級項目管理工具。
POM是Maven項目中的文件,使用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 Kit,JDK),主要用於開發者開發網站代碼。
1.6 Jenkins平台設置
Jenkins持續基礎平台部署完畢,需要進行簡單配置,例如配置JAVA路徑、安裝Maven、指定SVN、GIT倉庫地址等,如下為JAVA路徑和Maven設置步驟:
(1) Jenkins服務器安裝Maven:
wget tar -xzf apache-maven-3.3.9-bin.tar.gz mv apache-maven-3.3.9 /usr/maven/ |
(2) Jenkins系統設置環境變量,如圖22-6(a)、22-6(b)所示:
圖22-6(a) Jenkins系統設置
圖22-6(b) Jenkins系統設置
(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-14(a)、22-14(b)所示:
圖22-14(a) Jenkins JOB工程編譯控制台
圖22-14(b) Jenkins JOB工程編譯控制台
控制台日志打印“Finished: SUCCESS”,則表示Jenkins持續集成構建完成,會在Jenkins服務器目錄www.jfedu.net工程名目錄下生產網站可用的war文件,將該war包部署至其他服務器即可,war路徑為:/root/.jenkins/workspace/www.jfedu.net/target/edu.war。
至此,Jenkins持續集成平台自動構建軟件完成,該步驟只是生成了war包,並沒有實現自動將該war包部署至其他服務器,如果要自動部署需要基於Jenkins插件或者基於Shell、Python等自動化部署腳本。
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 Tomcat的HTTP端口訪問,如圖22-15(a)、22-15(b)所示:
圖22-15(a) Jenkins JOB工程編譯控制台
圖22-15(b)Jenkins 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-16(a)、22-16(b)所示:
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-16(a)Jenkins JOB構建完畢執行Shell
圖22-16(b)Jenkins JOB構建完畢執行Shell
(4) 基於Jenkins將edu.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_DIR;rm -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-ext和Token-macro、Email-template,可以搜索某個插件,輸入插件名稱,如圖22-18所示:
圖22-18 Jenkins 下載新插件
(2) Email-ext和Token-macro、Email-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-19(a)、22-19(b)所示:
圖22-19(a) Jenkins Token-macro插件安裝
圖22-19(b) Jenkins Token-macro插件安裝
(4) 安裝email-ext插件,如圖22-20所示:
圖22-20 Jenkins email-ext插件安裝
(5) Email-ext、Token-macro和Email-template插件安裝完畢,如圖22-21所示:
圖22-21 Jenkins 插件安裝完畢
(6) Email插件安裝完畢, Jenkins主界面系統管理系統設置會出現選項Extended E-mail Notification,則表示Jenkins Email郵件插件安裝完畢,如圖22-22所示:
圖22-22 Jenkins Email郵件插件
如需安裝GIT、Publish Over插件或者安裝裝Jenkins其他任意插件,方法與Email插件安裝方法一致。
1.10 Jenkins郵件配置
如上Jenkins持續集成配置完畢,可以進行網站代碼的自動更新、部署、升級及回滾操作,通過控制台信息可以查看每個JOB工程構建的狀態。
如果網站項目很多,人工去查看狀態就變得不可取,可以借助Jenkins Email插件實現網站構建完成,自動發送郵件給相應的開發人員、運維人員或者測試人員。Jenkins發送郵件,需安裝Email郵件插件,Email-ext、Token-macro和Email-template,Jenkins 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-23(a)、22-23(b)所示:
圖22-23(a) Jenkins Email郵件配置
圖22-23(b) Jenkins 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-27(a)、22-27(b)、22-27(c)所示:
圖22-27(a) Jenkins構建報錯觸發郵件
圖22-27(b) Jenkins Email郵件信息
圖22-27(c) Jenkins Email郵件信息
1.11 Jenkins多實例配置
單台Jenkins服務器可以滿足企業測試環境及生產環境使用Jenkins自動部署+測試平台,如果每天更新發布多個WEB網站,Jenkins需要同時處理很多的任務。
基於Jenkins分布式,也即多Slave方式可以緩解Jenkins服務器的壓力,Jenkins多實例架構如圖22-28所示,可以在Windows、Linux、MAC等操作系統上執行Slave。
圖22-28 Jenkins Slave架構圖
Jenkins多Slave原理是將原本在Jenkins Master端的構建項目分配給Slave端去執行,Jenkins Master分配任務時,Jenkins Master端通過SSH遠程Slave,在Slave端啟動slave.jar程序,通過Slave.jar實現對網站工程的構建編譯以及自動部署。所以在Slave端服務器必須安裝Java JDK環境來執行Master端分配的構建任務。配置多Slave服務器方法和步驟如下:
(1) 在Slave服務器,創建遠程執行Jenkins任務的用戶,名稱為jenkins,Jenkins工作目錄/home/Jenkins,Jenkins Master免秘鑰登錄Slave服務器或者通過用戶名和密碼登錄Slave;
(2) Slave服務器安裝JAVA JDK版本,並將其軟件路徑加入系統環境變量。
(3) Jenkins master端平台添加管理節點,系統管理à管理節點à新建節點à輸入節點名稱,分別如圖22-29(a)、22-29(b)、22-29(c)所示:
圖22-29(a) Jenkins Slave配置
圖22-29(b) Jenkins Slave配置
圖22-29(c) Jenkins Slave配置
(4) 配置www_slave節點,指定其Jenkins編譯工作目錄,設置IP地址,Credentials Add添加登錄Slave用戶名和密碼,如圖22-30(a)、22-30(b)所示:
圖22-30(a) Jenkins Slave配置
圖22-30(b) Jenkins 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-33(a)、22-33(b)所示,即證明Slave添加成功:
圖22-33(a) Jenkins Slave測試
圖22-33(b) Jenkins Slave測試
(8) 如上配置完畢,Jenkins-master通過ssh方式來啟動slave的slave.jar腳本,java –jar slave.jar,Slave等待master端的任務分配,單擊www.jfedu.net,然后選擇立即構建,如圖22-34所示:
圖22-34 Jenkins Slave構建任務
(9) Jenkins+Slave配置完畢后,如果同時運行多個任務,會發現只會運行一個任務,另外的任務在等待,那需要怎么調整呢,需要配置JOB工程勾選“在必要的時候並發構建”即可,如圖22-35(a)、22-35(b)所示:
圖22-35(a) Jenkins Slave構建多任務
圖22-35(b) Jenkins Slave構建多任務
1.12 Jenkins+Ansible高並發構建
Jenkins自動部署基於Shell+For循環方式部署10台以下的JAVA客戶端服務器,效率是可以接受的,但是如果是大規模服務器需要部署或者更新網站,通過for循環串行執行效率會大打折扣,所以需要考慮到並行機制。
Ansible是一款極為靈活的開源工具套件,能夠大大簡化Unix管理員的自動化配置管理與流程控制方式。它利用推送方式對客戶系統加以配置,這樣所有工作都可在主服務器端完成。使用Ansible+Jenkins架構方式實現網站自動部署,滿足上百台、千台服務器的網站部署和更新。
Ansible服務需要部署在Jenkins服務器,客戶端服務器無需安裝Ansible。Ansible基於SSH工作,所以需提前做好免秘鑰或者通過sudo用戶遠程更新網站。此處省略Ansible安裝,Ansible相關知識請參考本書Ansible章節配置。
Ansible自動部署網站,有兩種方法,一種是基於Ansible遠程執行Shell腳本,另外一種是Ansible編寫Playbook劇本,實現網站自動部署。如下為Ansible+Shell腳本方式自動部署網站方法:
(1) Jenkins服務器安裝Ansible軟件,Red Hat、CentOS操作系統可以直接基於YUM工具自動安裝Ansible,CentOS6.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_jfedu為Ansible 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_DIR;rm -rf work /bin/sh $TOMCAT_DIR/bin/start.sh sleep 10 tail -n 50 $TOMCAT_DIR/logs/catalina.out |
(5) 單擊www.jfedu.net構建任務,查看控制台信息,如圖22-36(a)、22-36(b)、22-36(c)所示:
圖22-36(a) Jenkins Ansible自動部署
圖22-36(b) Jenkins Ansible自動部署