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代碼  收藏代碼

  1. 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代碼  收藏代碼

  1. <Context>  

  2. ....  

  3.     <Environment name="JENKINS_HOME" value="/home/jenkins_home/" type="java.lang.String"/>  

  4. </Context>  

 

    “JENKINS_HOME”是jenkins的home目錄,通常設定爲“磁盤空間較大”的分區,這個目錄中將放置maven build的文件,歷史部署記錄等等,所以將會消耗很大的存儲空間。

 

    2)tomcat-users.xml:配置jenkins的用戶,此後用戶可以在jenkins的頁面上登錄和授權操作,對於jenkins的用戶授權,官方提供了很多方式,比如LDAP、基於數據庫等等。本實例基於tomcat user的方式,簡單易用。

Java代碼  收藏代碼

  1. <tomcat-users>  

  2.       <role rolename="admin"/>  

  3.       <user username="admin" password="admin" roles="admin"/>  

  4.       <user username="developer" password="developer" roles="manager"/>  

  5. </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 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)“Deploy to container plugin”:這個插件我們在上述已經看到,如果還沒有安裝,請首先安裝;它主要用來將“war”文件“deploy/redeploy”到web容器中,比如tomcat、jboss等。有了這個插件,我們可以在maven build之後,立即將war發佈到tomcat中,而不需要手動操作或者寫shell腳本來copy文件。

 

    首先,我們需要準備一個tomcat,用來部署我們的web application,過程略。此tomcat的端口爲8080,部署在master宿主機器上。

 

    因爲Deploy插件是通過外部(http)方式“deploy/redeploy”,所以需要在tomcat上進行用戶授權。編輯tomcat-users.xml,增加如下配置:

Java代碼  收藏代碼

  1. <tomcat-users>  

  2.     <role rolename="manager"/>  

  3.     <role rolename="admin"/>  

  4.     <user username="deployer" password="deployer" roles="standard,manager,admin,manager-script" />  

  5. </tomcat-users>  

 

    增加一個“deployer”用戶,我們可以通過tomcat manager機制來部署war。參見稍後講解。

 

    2)新建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的“授權確認”導致。

 

    當代碼從Git下載之後,啓動Maven build階段:



 

 

     在“Pre step”中,我們增加了一小段shell,主要作用就是在發佈之前,先刪除web應用的tomcat中原有的ROOT.war(在某些版本的tomcat,還需要增加一行“rm -r -f ROOT”,即將原有項目的所有文件刪除,才能觸發tomcat undeploy操作),這或許是“Deploy plugin”的bug,如果ROOT.war已經存在,則無法再次deploy/redeploy。

    在Maven build時,我們指定“Goals”,這個很重要,否則Maven build就沒有意義了。“Goals and options”根據個人項目的情況來定義,選擇合適的profile環境。

 

    下面我們介紹“Deploy plugin”,這個插件就是將Maven打包生成的war,發佈到指定的tomcat下。很好的一個插件。


    其中“WAR/EAR files”選項指定war的位置,這個路徑是個相對路徑,相對於“/home/jenkins_home/workspace/{你的item名稱}”,本實例是一個maven多模塊項目,且每個module打包的名稱都爲ROOT.war,這樣方便部署。 請管理員指定正確的路徑。

    Containers中,我們使用了tomcat 7,輸入上文我們設定的用戶名和密碼,指定tomcat Url,需要注意,既然應用是基於http manager的方式deploy,那麼此tomcat的webapps自帶的“manager”項目不能被刪除,同時tomcat還需要處於啓動狀態。(tomcat也可能以爲死亡,所以建議在pre step中加上對tomcat狀態的判斷,如果tomcat死亡,先執行startup.sh)。

 

    如果在部署時,報錯。請按照如下方式排查:

    1)tomcat是否已經啓動。

    2)tomcat-users.xml是否配置正確。

    3)tomcat的版本和“Deploy plugin”中container指定的是否一致。

    4)tomcat下是否已經有ROOT項目,如果有,請刪除,然後重啓tomcat,此後再使用jenkins發佈,因爲reploy時會檢測舊的ROOT和新的ROOT.war項目的版本相容性,如果不同,則會導致reploy失敗。

 

 

    到此爲止,第一個item配置完畢,保存後即可通過“立即構建”來部署我們的項目了。

 

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即可。

 

---END---

 

other:   profile

各屬性節點的值,用佔位符"${屬性名}"佔位,maven在compile/package時,會根據profile的環境自動替換這些佔位符爲實際屬性值。

默認情況下: 

maven package

將採用默認激活的profile環境來打包,也可以手動指定環境,比如:

maven package -P dev

將自動打包成dev環境的部署包(注:參數P爲大寫)

 

gitlab/github可以添加Webhooks實現自動部署

如果是springboot項目,則配置更簡單



 



 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章