一 工程背景
本工程是一個springboot的項目,共有五個倉庫,其中一個父工程,三個是依賴工程,一個是啓動工程,每個工程還是父子pom,大致結構如下
FatherEngine 父工程,最頂級工程
Son1Engine 依賴工程
son1-base
son1-test
Son2Engine 依賴工程
son2-mail
son2-user
son2-security
Son3Engine 依賴工程
son3-pa
son3-sa
springbootRun 啓動工程
二 Jenkins多任務部署插件
jenkins想要部署這樣的工程項目,就沒有辦法採用傳統的maven項目去部署,因爲單獨倉庫的工程沒有啓動類,會報main class 找不到,所幸jenkins提供了一個插件,多模塊部署,可以解決這種問題。
Multijob plugin
Multiple SCMs plugin
三 創建多任務
將上述插件安裝成功以後便可以創建一個mutijob project任務
任務創建成功後,仍然按照部署一個springboot工程的正常思路,拉取git源碼,maven打包,jar包啓動
git源碼管理
選擇新插件 Mutiple ScMS, 選擇git,然後輸入git倉庫的地址…
注意:因爲是多倉庫多pom工程,在配置了多個git地址的時候,如果按照以前的方式直接拉下來,會導致pom文件覆蓋,所以我們需要爲每個git倉庫地址都新建一個文件夾來存放,就如同剛開始的工程目錄結構一樣,jenkins可以通過 check out to a sub-directory 實現,在當前任務空間下創建一個子目錄
配置完一個之後,將其他倉庫的git也按照同樣的方式配置下來
maven構建
因爲都是父子pom,所以我們構建的時候直接選擇 構建最頂層maven目標,這裏需要注意的是,因爲我們的項目有多個,所以需要將每個倉庫目錄下的pom打包一次,這就需要指定特定目錄的pom,jenkins也可以實現這一功能,在高級選項中可以指定pom的位置
多添加幾個構建過程,分別指向不同目錄下的pom將他們打包
maven打包成功後,便是執行shell腳本去啓動項目
構建成功後還可以通過ssh 發送到目標服務器上
四 構建
保存後便可以直接構建。
shell腳本
echo "check $port"
grep_port=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }')
echo "grep port is $grep_port"
if [ -n "$grep_port" ]
then
echo "port $port is in use"
kill -9 "$grep_port"
else
echo "port is not in use"
fi
cd bootRun
nohup mvn clean install -DskipTests spring-boot:run -Dspring-boot.run.arguments="p.lifecycle=AUTO" > out 2>&1 &