天天看點

【轉載】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解析,例如:

【轉載】Jenkins + Git + Maven + tomcat內建環境搭建

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挂載。

【轉載】Jenkins + Git + Maven + tomcat內建環境搭建

<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的方式,簡單易用。

【轉載】Jenkins + Git + Maven + tomcat內建環境搭建

<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 + Git + Maven + tomcat內建環境搭建

    jenkins master需要幾個常用的插件,在“可選插件”中,建議将如下清單插件選中并安裝:

【轉載】Jenkins + Git + Maven + tomcat內建環境搭建
【轉載】Jenkins + Git + Maven + tomcat內建環境搭建

    這些插件主要涉及到: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)“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,增加如下配置:

【轉載】Jenkins + Git + Maven + tomcat內建環境搭建

    <role rolename="manager"/>  

    <role rolename="admin"/>  

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

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

    2)建立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的“授權确認”導緻。

    當代碼從git下載下傳之後,啟動maven build階段:

【轉載】Jenkins + Git + Maven + tomcat內建環境搭建

     在“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下。很好的一個插件。

【轉載】Jenkins + Git + Maven + 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”節點已經被預設添加進來了。

【轉載】Jenkins + Git + Maven + tomcat內建環境搭建

    儲存後,會提示你“啟動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為大寫)

原文連結:[http://wely.iteye.com/blog/2228608]