Jenkins + Git + Maven + tomcat集成环境搭建
折騰了好幾天,終于把Jenkins + Git + Maven + tomcat集成環(huán)境搭建起來了,最終主要實(shí)現(xiàn)“自動(dòng)構(gòu)建、部署”web應(yīng)用。
1、安裝環(huán)境
操作系統(tǒng):Centos 6.5JDK:1.7.xMaven:3.1.xGit: 1.7.1,自建GitLab平臺(tái)tomcat:7.x上述宿主機(jī)器2臺(tái):192.168.1.194,192,168.1.198,其中194為Jenkins Master,198位slave。2、第三方安裝安裝和環(huán)境配置
JDK、Git、Maven、tomcat在上述2個(gè)宿主機(jī)器上都需要安裝,即jenkins master和slave都需要這些環(huán)境。1)JDK安裝:略;安裝后之后,請注意配置JAVA_HOME環(huán)境變量。2)Maven安裝:從apache下載tar.gz壓縮包,在合適的目錄下解壓即可。此后配置M2_HOME環(huán)境變量。3)tomcat安裝:略。4)Git:安裝非常簡單,直接執(zhí)行“yum install git”即可。5)如果你的GitLab是自建的內(nèi)網(wǎng)平臺(tái),千萬不要忘了在上述2個(gè)宿主機(jī)器上增加hosts解析,例如:Java代碼 收藏代碼
192.168.1.110 git.xxx.com 上述環(huán)境安裝,需要在Jenkins和slave上都進(jìn)行,即slave上也需要JDK、Maven、Git,因?yàn)閟lave接收master的job調(diào)度后,將會(huì)使用Git從GitLab上同步代碼并使用Maven進(jìn)行build,這個(gè)過程都是在salve的本地進(jìn)行。此外,兩個(gè)宿主機(jī)器,還需要安裝ssh-keygen等必要軟件,同時(shí)它們還需要交換public Key,確保2個(gè)機(jī)器能夠?qū)崿F(xiàn)“無密碼登陸”(過程略)。因?yàn)镴enkins在ssh傳輸時(shí)無法繞過“授權(quán)確認(rèn)”的手動(dòng)操作,所以管理員需要人為的進(jìn)行一次ssh登陸。3、jenkins master
master是job調(diào)度的分配者,我們需要首先安裝部署它。從“https://jenkins-ci.org/”官網(wǎng)下載jenkins.war部署包,我們將jenkins.war通過tomcat部署,即使用tomcat掛在啟動(dòng)jenkins服務(wù),因?yàn)檫@樣我們可以非常簡單的修改一些配置參數(shù)和維護(hù)。(啟動(dòng)jenkins服務(wù)的方式還可以通過jar方式啟動(dòng),請參見其他說明文檔)將master安裝在192.168.1.194機(jī)器上,單獨(dú)安裝一個(gè)tomcat,其http端口為38080。并修改如下文件:1)context.xml:增加jenkins環(huán)境變量,由tomcat掛載。Java代碼 收藏代碼
<Context> .... <Environment name="JENKINS_HOME" value="/home/jenkins_home/" type="java.lang.String"/> </Context> “JENKINS_HOME”是jenkins的home目錄,通常設(shè)定為“磁盤空間較大”的分區(qū),這個(gè)目錄中將放置maven build的文件,歷史部署記錄等等,所以將會(huì)消耗很大的存儲(chǔ)空間。2)tomcat-users.xml:配置jenkins的用戶,此后用戶可以在jenkins的頁面上登錄和授權(quán)操作,對于jenkins的用戶授權(quán),官方提供了很多方式,比如LDAP、基于數(shù)據(jù)庫等等。本實(shí)例基于tomcat user的方式,簡單易用。【備注:在下文中,提供了“非熱部署”方式,將可以不用配置tomcat-users信息】Java代碼 收藏代碼
<tomcat-users> <role rolename="admin"/> <user username="admin" password="admin" roles="admin"/> <user username="developer" password="developer" roles="manager"/> </tomcat-users> 添加2個(gè)管理員用戶,其中admin可以對系統(tǒng)各項(xiàng)配置進(jìn)行修改,manager可以管理項(xiàng)目、部署等。3)將jenkins.war放置在webapps目錄下,我們此處希望jenkins作為ROOT項(xiàng)目加載,所以刪除原有的ROOT項(xiàng)目,并將jenkins.war重命名位ROOT.war,這樣在通過http訪問jenkins時(shí),不需要加ContextPath了。4)啟動(dòng)jenkins tomcat:./startup.sh5)訪問“http://192.168.1.194:38080”,然后使用admin用戶登錄(用戶密碼參見tomcat-users.xml)。4、master配置
如果master需要真正的能夠運(yùn)行job,我們還需要一些周密的配置。1)插件管理:jenkins master需要幾個(gè)常用的插件,在“可選插件”中,建議將如下列表插件選中并安裝:
這些插件主要涉及到:ssh、Git、GitLab、Maven,已經(jīng)后面我們需要提到的“deploy”插件。管理員可以根據(jù)需要選擇性的安裝需要的plugins。安裝完之后,重啟jenkins。5、 系統(tǒng)配置
在jenkins的“系統(tǒng)管理”-->“系統(tǒng)設(shè)置”頁面,來設(shè)定master全局的配置,其中重要的2個(gè)選項(xiàng)位JDK和Maven,我們需要告知master它們安裝在何處。1)JDK: 2)Maven:6、Build與發(fā)布
我們接下來創(chuàng)建一個(gè)job,這個(gè)job將從GitLab上下載源碼到本地,然后使用Maven build和打包,并發(fā)布到tomcat上。這個(gè)過程正是我們常用的。 1)新建Item:授權(quán)與驗(yàn)證:master需要ssh訪問slave機(jī)器(部署、啟動(dòng),發(fā)送文件等),以及從git上下載代碼,所以我們在開始之前,需要指定這些。“jenkins”-->“Credentials”-->“Add Credentials”添加一個(gè)SSH驗(yàn)證規(guī)則:我們創(chuàng)建一個(gè)Global范圍的SSH無密碼登陸,這個(gè)可以在此后master與slave通訊有用。前提是master與slave已經(jīng)交換了public key。“From the Jenkins master ~/.ssh”即使用master宿主機(jī)器“~/.ssh”目錄下的公私鑰。
然后,我們“新建”:因?yàn)槲覀兪腔贛aven構(gòu)建項(xiàng)目,所以選擇第二項(xiàng),如果你已經(jīng)創(chuàng)建過類似的item,可以選擇“復(fù)制已有的item”,輸入item的名字,那么它相應(yīng)的配置就會(huì)導(dǎo)入,就像模板一樣,我們無需每次都重復(fù)填寫配置表單。
在創(chuàng)建item時(shí),我們還需要指定,這個(gè)item的job運(yùn)行結(jié)果最終保存在哪個(gè)“節(jié)點(diǎn)”上,例如web項(xiàng)目最終發(fā)布在哪個(gè)server上,在jenkins中,master和slaver都稱為“節(jié)點(diǎn)”。指定Git庫的地址,并配置master與GitLab通訊的SSH驗(yàn)證機(jī)制:
因?yàn)閙aster、slave均需要使用Git從遠(yuǎn)端下載代碼,在這個(gè)模塊中,“Credentials”選擇剛才我們添加的“root”,這樣jenkins使用Git下載代碼時(shí)將會(huì)把SSH的秘鑰發(fā)過去。此外,我們還需要在GitLab中目標(biāo)項(xiàng)目中增加“deploy key”:
我們將master、slave兩個(gè)機(jī)器的public key添加到GitLab項(xiàng)目的“deploy key”中。如果你的item無法正確訪問Git,比如“驗(yàn)證被拒絕”,你應(yīng)該嘗試通過shell登錄到master、slave機(jī)器上,使用git命令嘗試下載項(xiàng)目代碼,可能因?yàn)閖enkins無法跳過ssh的“授權(quán)確認(rèn)”導(dǎo)致。
2)部署腳本思路:在項(xiàng)目build成功后,關(guān)閉tomcat,刪除舊的項(xiàng)目文件,然后將新的項(xiàng)目文件copy到webapps目錄下,然后重啟tomcat。如下為腳本,“deploy.sh”,我們將此腳本放置在每個(gè)節(jié)點(diǎn)的“/home”目錄下,當(dāng)然管理員可以放置任何可以訪問的目錄(有訪問權(quán)限即可):Java代碼 收藏代碼#!/bin/sh echo "Tomcat:$1" echo "Module:$2" echo "++++++++++++++++++++++++++++++++" pid=$(jps -v |grep $1 | grep -v 'grep $1' | awk '{print $1}') #if instance is running,shutdown it! if [ "$pid" ];then echo "Current instance is running,pid:$pid" echo "Shutdown now!" cd $1/bin ./shutdown.sh sleep 3s fi #but somethimes,shutdown operation will be failure! #check status for 10 times i=0 while [ $i -lt 10 ] do pid=$(jps -v |grep $1 | grep -v 'grep $1' | awk '{print $1}') if [ "$pid" ];then sleep 1s if [ $i -ge 10 ] then kill -9 $pid break else ((i++)) fi else break fi done #remove current application files cd $1/webapps rm -r -f ROOT rm -f ROOT.war cd $1/bin cd $WORKSPACE/$2/target cp ROOT.war $1/webapps cd $1/bin ./startup.sh sleep 3s pid=$(jps -v |grep $1 | grep -v 'grep $1' | awk '{print $1}') echo "restart ok!" echo "pid:$pid" echo "++++++++++++++++++++++++++++++++"這個(gè)腳本,就是執(zhí)行“關(guān)閉tomcat”、“刪除文件”、“復(fù)制文件”、“重啟tomcat”過程;腳本中可以引用jenkins的一些系統(tǒng)變量,比如“$WORKSPACE”表示當(dāng)前build項(xiàng)目的工作空間;此腳本接收2個(gè)參數(shù),我們約定,第一個(gè)參數(shù)表示“tomcat home路徑”,第二個(gè)參數(shù)表示“項(xiàng)目module名稱”用于告知需要部署那個(gè)web項(xiàng)目(這在多modules項(xiàng)目中有用)。
我們需要?jiǎng)h除原來的“Pre steps”,然后增加一個(gè)“Post steps”,選定為“Execute Shell”,輸入如下語句:Java代碼 收藏代碼BUILD_ID=dontKillMe /home/deploy.sh "<tomcat_home>" "<module_name>" 其中<tomcat_home>和<module_name>替換成實(shí)際的字符串值。BUID_ID是jenkins的一個(gè)特殊的運(yùn)行時(shí)變量,之所以這么做,原因就是直接使用shell啟動(dòng)tomcat是不行的,因?yàn)閖enkins進(jìn)程退出后其創(chuàng)建的、包括其調(diào)用的腳本創(chuàng)建的進(jìn)程都將被一起銷毀,參見:【ProcessTreeKiller】
配置完畢后,基本上就可以嘗試“立即部署”了,通過控制臺(tái)日志查看部署過程的問題,祝你好運(yùn)!7、Slave節(jié)點(diǎn)通過上文,我們已經(jīng)在Slave機(jī)器上安裝好了SSH、Git、Maven、JDK等,同時(shí)我們也需要在Slave節(jié)點(diǎn)安裝一個(gè)tomcat,用來部署web application。需要注意的是,jenkins的slave不需要像master一樣部署在tomcat上,我們只需要在jenkins的頁面上操作即可,master將會(huì)通過ssh將slave.jar文件到slave節(jié)點(diǎn)上,并啟動(dòng)slave。通過導(dǎo)航:“系統(tǒng)管理”-->“節(jié)點(diǎn)管理”-->“新建節(jié)點(diǎn)”,來增加slave。其實(shí)此時(shí)我們已經(jīng)看到“master”節(jié)點(diǎn)已經(jīng)被默認(rèn)添加進(jìn)來了。保存后,會(huì)提示你“啟動(dòng)slave”,你可以根據(jù)需要是否啟動(dòng)slave。
此后那些需要部署在slave宿主機(jī)器上的web應(yīng)用,只需要在創(chuàng)建item時(shí)指定“Restrict where project can be run”為slave即可。轉(zhuǎn)載于:https://blog.51cto.com/xsunday/2049691
總結(jié)
以上是生活随笔為你收集整理的Jenkins + Git + Maven + tomcat集成环境搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React + Canvas 像素风格取
- 下一篇: Activiti学习——Activiti