「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

  • 亮點
  • 環境
  • 準備工作
  • 步驟
  • 安裝Jenkins
  • 安裝Jenkins插件
  • 配置Jenkins
  • Jenkins用戶權限管理
  • Jenkins配置的備份和版本控制
  • 參考資料

Jenkins 是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變得可能。現在軟件開發追求的是效率以及質量,Jenkins使得自動化成為可能!

亮點

  • 採用shell自定義腳本,控制集成部署環境更加方便靈活
  • 精簡war包中的lib包,常駐tomcat裡,減少war包傳輸時間
  • Jenkins 用戶權限管理
  • 構建失敗發郵件通知相關人員解決
  • 自動按天備份war包,Jenkins配置備份以及版本控制化

環境

Ubuntu 14.10 (GNU/Linux 3.16.0-33-generic x86_64)

準備工作

  • Git版本控制服務器
  • Tomcat發佈服務器
  • Jenkins服務器(提前安裝好Maven,Git,Jdk)

實驗時可以在同一臺機器配置,但是生產不建議,一臺機器電源斷掉了,所有服務器都掛了

步驟

安裝Jenkins

下載Jenkins War包,Jenkins官網 。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

啟動Jenkins ,將War包放入Tomcat容器裡,啟動Tomcat。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

提示:

此時Jenkins在初始化配置目錄,其默認配置目錄路徑為當前用戶下的.jenkins目錄,用戶也可以自定義目錄,Jenkins默認是把配置文件中的數據讀到內存中,如果你替換了之前的配置文件,此時需要點擊「Jenkins的讀取設置」或者「重啟Tomcat」,如果此時Jenkins頁面無響應,則應該查看Tomcat的Catalina.out,多半是由於內存溢出造成(解決方法增大Tomcat調用Java虛擬機時內存大小,本文不做重點),運行Jenkins的服務器配置最好內存1G以上,因為後續會加入一些Jenkins插件,有一些會比較佔用內存,導致Jenkins啟動不了。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

安裝Jenkins插件

  • Email Extension Plugin (郵件通知)
  • GIT plugin (可能已經默認安裝了)
  • Publish Over SSH (遠程Shell)

安裝方法:

首頁->系統管理->管理插件->可選插件->過濾(搜索插件名)->勾選->點擊最下面直接安裝即可(需要等待一段時間,詳情可以看catalina.out日誌變化)

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置Jenkins

配置基本信息

每個選項後都有個問號解釋當前含義,(此步新手可以略過,默認不填即可)

配置方法:首頁->系統管理->系統設置

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置郵件

管理員郵件地址就是郵件的發件人地址(必須和後面郵件配置發件人郵箱一致,否則發不成功郵件)

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置Jdk

JAVA_HOME為Jdk路徑 其中Jdk也可以從這裡下載安裝解壓

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置 Maven

配置 Maven Configuration

路徑為maven的setting.xml路徑(Maven安裝略)

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置Maven項目

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置Maven安裝目錄

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置 Git

其中Path to Git executable為你git執行的路徑 一般默認是/usr/bin/git ,如有差異,可以whereis git

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置郵件

郵件模板配置

配置好郵件的模板(可自定義html編寫) User Name為用戶名 Password為密碼 SMTP不同郵箱不同,請自行google(另外gmail郵件如無代理翻牆,請勿用,推薦163比較好配置)

未翻牆

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

翻牆後

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

模板效果圖

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

Default Subject 代碼:

構建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

模板Default Content分享:

(本郵件是程序自動下發的,請勿回覆,請相關人員fix it,重新提交到git 構建) 



項目名稱:$PROJECT_NAME


構建編號:$BUILD_NUMBER


GIT版本號:${GIT_REVISION}


構建狀態:$BUILD_STATUS


觸發原因:${CAUSE}


構建日誌地址:


構建地址:


變更集:${JELLY_SCRIPT,template="html"}


配置郵件觸發器

當失敗的時候,會觸發郵件通知,這個功能比較實用。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置 Publish over SSH

遠程執行shell腳本 採用公鑰私鑰連接 其中Key裡貼的是私鑰 遠程被管理的主機裡貼的是公鑰,這2臺主機就是相互信任,這樣scp等操作就不需要輸入用戶名和密碼

公鑰私鑰生成方法:

1.管理主機linux 上 ssh-keygen -t rsa -C "[email protected] 一路回車 會在/root/.ssh下生成id_rsa(私鑰) id_rsa.pub(公鑰)。

2.copy 公鑰的內容到遠程需要通信(被管理)的主機 /root/.ssh/authorized_keys 如無此目錄文件則手動創建。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置完之後可以Test Configuration

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

配置 Job

步驟:首頁->新建->構建一個maven項目(輸入item名稱)->進入該項目->配置

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

JOB基本信息

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

項目源碼管理

Repository UR 項目地址 Credentials授權可以是SSH也可以是用戶名密碼(SSH方法同上)

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

選擇需要構建的分支,我們項目採用git工作流 默認master和develop 平時開發構建develop分支,正式上線構建master並且打標籤(前公司git提交標準化相當複雜,分支相當多,這裡大家可以根據實際情況來)。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

構建觸發器

這裡我們選擇poll輪詢每隔1分鐘去檢測git倉庫代碼庫版本,如果有更改則立刻構建,這裡大家可以根據自己團隊實際情況去制定,當然還有另外一個插件gitlab-hook可以主動去通知jenkins構建,不過插件所佔內存比較大,需要增大tomcat虛擬機內存配置,不然會內存溢出。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

構建命令

我們採用最簡單的clean install 當然這裡可以根據各自需求

例如 部署後的產物上傳到nexus等,詳情參考 Maven命令

clean install deploy:deploy-file -DgroupId=com.weitoo -DartifactId=common -Dversion=0.1-SNAPSHOT -Dpackaging=jar -Dfile=D:\workspace\server-aggregator\common\target\common-0.1-SNAPSHOT.jar -Durl=http://192.168.0.200:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

Add post-build step

構建成功後執行shell命令

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

該shell的目的是取出war包lib中其他所有lib包 只留下common-0.1-SNAPSHOT.jar 大大減少war包大小(完整war包30M 傳包到阿里雲服務器需要2分多,精簡後2M,10秒多,大大提高構建速度)。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

分享我的Shell

mv ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/
rm -rf ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/*
rm -rf ~/.jenkins/jobs/server/workspace/server/target/server.war
mv ~/.jenkins/jobs/server/workspace/server/target/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/
cd ~/.jenkins/jobs/server/workspace/server/target/server/
zip -r ~/.jenkins/jobs/server/workspace/server/target/server.war * -r
scp /root/.jenkins/jobs/server/workspace/server/target/server.war [email protected]:/opt/war/

構建成功遠程執行shell腳本

exec command 是遠程sh的路徑

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

分享我的publish.sh文件

作用是備份每次上傳的war包 重啟Tomcat。

export JAVA_HOME=/opt/software/jdk1.7.0_25
TOMCAT_HOME="/opt/software/apache-tomcat-7.0.59"
TOMCAT_PORT=80
PROJECT="server"
BAK_DIR=/opt/war/bak/$PROJECT/`date +%Y%m%d`
mkdir -p "${BAK_DIR}"
cp /opt/war/"${PROJECT}".war "${BAK_DIR}"/"${PROJECT}"_`date +%Y%m%d%H%M%S`.war
#shutdown tomcat
/opt/sh/kill-tomcat-force.sh

#publish project
rm -rf "${TOMCAT_HOME}"/webapps/${PROJECT}
cp /opt/war/"${PROJECT}".war "${TOMCAT_HOME}"/webapps/${PROJECT}.war
q
#remove tmp
rm -rf /opt/war/${PROJECT}.war
#unzip war
unzip "${TOMCAT_HOME}"/webapps/${PROJECT}.war -d "${TOMCAT_HOME}"/webapps/${PROJECT}
rm -rf "${TOMCAT_HOME}"/webapps/${PROJECT}.war
##copy lib
cp /opt/lib/* "${TOMCAT_HOME}"/webapps/${PROJECT}/WEB-INF/lib/
# start tomcat
sleep 3
#start tomcat
/opt/software/apache-tomcat-7.0.59/bin/startup.sh
echo "tomcat is starting!"

分享我的kill-tomcat-force.sh文件

作用是強制關閉tomcat進程

set fileformat=unix
path=/opt/software/apache-tomcat-7.0.59/bin
ps -ef|grep $path|grep tomcat|awk '{print $2}'
echo "exec $path/shutdown.sh"
$path/shutdown.sh
sleep 3s
#kill -9 pid
ps -ef|grep $path|grep tomcat|awk '{print $2}'|xargs kill -9
#success msg
echo "shutdown success"
ps -ef|grep $path|grep java|awk '{print $2}'

分享我的Tomcat精簡方法

  • 在tomcat_home/lib下新建自定義jar包文件,導入項目所需其他jar包(以後有新增的話,單獨再導一次)
  • 修改tomcat_home/conf/catalina.properties 搜索
    =shared.loader加上路徑
shared.loader=${catalina.base}/lib/server,${catalina.base}/lib/server/*.jar,${catalina.home}/lib/server,${catalina.home}/lib/server/*.jar

此時Tomcat運行前會加載server下的lib包,如果是多個項目公用一個tomcat的時候,就需要這裡放公共的lib包,避免tomcat加載多餘的jar包,消耗內存。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

構建後郵件設置

郵件主題收件人配置

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

郵件觸發器

局部配置會覆蓋掉全局配置,我們之前在全局配置裡配置了構建失敗郵件觸發器,這裡是更加精細的配置,

我們選擇構建失敗Failure-1st觸發器,失敗以後發郵件給開發者,(這裡可以根據實際需要,配置,可以配置多個觸發器)開發者的郵件在Recipient List裡配置。
「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

Jenkins用戶權限管理

步驟:首頁-> 系統管理-> Configure Global Security

基本配置:

只有註冊的用戶才能操作,當然如果是大企業的話,可以採用項目矩陣授權策略,詳情可以Google。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

Jenkins配置的備份和版本控制

很多情況下稍不注意改變了Jenkins的配置,把平臺弄壞了,又想去恢復,這個時候就得把Jenkins的配置文件進行配置或者版本化,只需要把

/root/.jenkins/加入git版本庫裡即可,該目錄下包含Jenkins所有信息,包括每次構建歷史信息和歷史jar包

進行全備份然後覆蓋掉該文件夾的時候,重新構建JOB會出現文件夾已經存在等exception,只需要手動刪掉這些目錄即可,不會丟失數據。(這是Jenkins的一個bug,參考 JENKINS-21330)

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

img

  • Jenkins權威指南
  • jdkleo

來源:http://t.cn/R5Uh3uv


搜索微信號(ID:芋道源碼),可以獲得各種 Java 源碼解析。

並且,回覆【書籍】後,可以領取筆者推薦的各種 Java 從入門到架構的書籍。

「Jenkins + Git + Maven + Shell + Tomcat持續集成」經典教程

來吧,騷年~


分享到:


相關文章: