Jenkins + Git + Maven + tomcat集成環境搭建

折騰了好幾天,終於把Jenkins + Git + Maven + tomcat集成環境搭建起來了,最終主要實現“自動構建、部署”web應用。

1、安裝環境

操作系統:Centos 6.5

JDK:1.7.x

Maven:3.1.x

Git: 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.sh

5)訪問“http://192.168.1.194:38080”,然後使用admin用戶登錄(用戶密碼參見tomcat-users.xml)。

4、master配置

如果master需要真正的能夠運行job,我們還需要一些周密的配置。

     1)插件管理:

Jenkins + Git + Maven + tomcat集成環境搭建

jenkins master需要幾個常用的插件,在“可選插件”中,建議將如下列表插件選中並安裝:

 ![](https://s1.51cto.com/images/blog/201712/12/7ebeca27476fa5c9ede298c3e780699e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

這些插件主要涉及到:ssh、Git、GitLab、Maven,已經後面我們需要提到的“deploy”插件。管理員可以根據需要選擇性的安裝需要的plugins。

安裝完之後,重啓jenkins。

5、 系統配置

在jenkins的“系統管理”-->“系統設置”頁面,來設定master全局的配置,其中重要的2個選項位JDK和Maven,我們需要告知master它們安裝在何處。

 1)JDK:

Jenkins + Git + Maven + tomcat集成環境搭建

   2)Maven:

Jenkins + Git + Maven + tomcat集成環境搭建

6、Build與發佈

我們接下來創建一個job,這個job將從GitLab上下載源碼到本地,然後使用Maven build和打包,併發布到tomcat上。這個過程正是我們常用的。 

1)新建Item:

授權與驗證:master需要ssh訪問slave機器(部署、啓動,發送文件等),以及從git上下載代碼,所以我們在開始之前,需要指定這些。“jenkins”-->“Credentials”-->“Add Credentials”添加一個SSH驗證規則:

Jenkins + Git + Maven + tomcat集成環境搭建

我們創建一個Global範圍的SSH無密碼登陸,這個可以在此後master與slave通訊有用。前提是master與slave已經交換了public key。“From the Jenkins master ~/.ssh”即使用master宿主機器“~/.ssh”目錄下的公私鑰。

然後,我們“新建”:

Jenkins + Git + Maven + tomcat集成環境搭建

因爲我們是基於Maven構建項目,所以選擇第二項,如果你已經創建過類似的item,可以選擇“複製已有的item”,輸入item的名字,那麼它相應的配置就會導入,就像模板一樣,我們無需每次都重複填寫配置表單。

在創建item時,我們還需要指定,這個item的job運行結果最終保存在哪個“節點”上,例如web項目最終發佈在哪個server上,在jenkins中,master和slaver都稱爲“節點”。

Jenkins + Git + Maven + tomcat集成環境搭建

指定Git庫的地址,並配置master與GitLab通訊的SSH驗證機制:

Jenkins + Git + Maven + tomcat集成環境搭建

因爲master、slave均需要使用Git從遠端下載代碼,在這個模塊中,“Credentials”選擇剛纔我們添加的“root”,這樣jenkins使用Git下載代碼時將會把SSH的祕鑰發過去。此外,我們還需要在GitLab中目標項目中增加“deploy key”:

Jenkins + Git + Maven + tomcat集成環境搭建

我們將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>替換成實際的字符串值。

Jenkins + Git + Maven + tomcat集成環境搭建

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”節點已經被默認添加進來了。

Jenkins + Git + Maven + tomcat集成環境搭建

保存後,會提示你“啓動slave”,你可以根據需要是否啓動slave。

此後那些需要部署在slave宿主機器上的web應用,只需要在創建item時指定“Restrict where project can be run”爲slave即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章