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