1. 程式人生 > 其它 >Jenkins+git+maven自動化打包並部署到伺服器(Jenkins服務在Linux系統)

Jenkins+git+maven自動化打包並部署到伺服器(Jenkins服務在Linux系統)

實現Jenkins自動化部署後臺服務,其實比較簡單。

首先,在Linux系統把Jenkins,git,maven,jdk這些常用工具安裝好,接下來開始建立Job做構建。

先看一下構建頁面如下圖,選擇構建的git分支就可以了:

開始構建配置及構建步驟的實現

一、引數配置

Job描述,寫一下後臺服務的一些資訊,不過寫不寫都無關緊要

引數:

git引數這裡配置一下高階如下:

二、原始碼管理:

三、構建步驟

1.maven外掛,maven編譯打jar包,即步驟新增Invoke top-level Maven targets

maven編譯打包指令碼clean package -U -Ppack -Dmaven.repo.local=$JENKINS_HOME/workspace/zzb/repository -Dmaven.test.skip=true

2.把打的包以及需要放到伺服器的檔案及目錄重新打成gz包

Executeshell指令碼如下:

#!/bin/bash
packagename=zzbservice
if [ -d $WORKSPACE/Deploy ];then
rm -rf Deploy
fi
mkdir Deploy
if [ -d "$WORKSPACE/target/$packagename" ];then
if [ -f "$WORKSPACE/target/$packagename/$packagename.jar" ];then
cp $WORKSPACE/target/$packagename/$packagename.jar $WORKSPACE/Deploy/
else
echo 不存在$packagename.jar && exit 1 fi if [ -d "$WORKSPACE/target/$packagename/lib" ];then mkdir Deploy/lib cp -R $WORKSPACE/target/$packagename/lib/* $WORKSPACE/Deploy/lib else echo 不存在lib不存在 fi else if [ -f "$WORKSPACE/target/$packagename.jar" ];then cp $WORKSPACE/target/$packagename.jar $WORKSPACE/Deploy/ else echo 不存在$packagename.jar && exit 1 fi fi # 把所要上傳的到部署伺服器的jar包和其他檔案打包 cd $WORKSPACE/Deploy echo 進入$WORKSPACE/Deploy目錄,並檢視當前目錄下的子目錄及檔案 ls echo 打包當前目錄 tar zcvf Deploy.tar.gz * echo 返回之前目錄 cd -
View Code

四、構建後步驟

新增步驟Send build artifacts over SSH,外掛可以在Jenkins外掛裡面搜尋安裝

完整指令碼如下:

#!/bin/bash
systemname=zzbservice
packagename=zzbservice
echo 進入專案所在目錄/zzb/$systemname
cd /zzb/$systemname
echo ""> ./nohup.out
if [ -f /zzb/$systemname/$packagename.jar ];then
echo 已存在$packagename.jar
if [ $product == Y ];then
echo Product引數為Y,需要做投產備份
if [ -d "lib" ];then
echo 存在lib目錄
echo 備份gz包包含lib目錄、$packagename.jar包
tar -czvf sourceproduct_$packagename.tar.gz lib $packagename.jar
mv /zzb/$systemname/sourceproduct_$packagename.tar.gz /scss/zzbsource/sourceproduct_$packagename.tar.gz.bak
else
echo 不存在lib目錄
echo 備份gz包只包含$packagename.jar包
tar -czvf sourceproduct_$packagename.tar.gz $packagename.jar
mv /zzb/$systemname/sourceproduct_$packagename.tar.gz /scss/zzbsource/sourceproduct_$packagename.tar.gz.bak
fi
else
echo Product引數為N,需要做普通備份
if [ -d "lib" ];then
echo 存在lib目錄
echo 備份gz包包含lib目錄、$packagename.jar包
tar -czvf $packagename.tar.gz lib $packagename.jar
mv /zzb/$systemname/$packagename.tar.gz /scss/zzbsource/$packagename.tar.gz.bak
else
echo 不存在lib目錄
echo 備份gz包只包含$packagename.jar包
tar -czvf $packagename.tar.gz $packagename.jar
mv /zzb/$systemname/$packagename.tar.gz /scss/zzbsource/$packagename.tar.gz.bak
fi
fi
else
echo 不存在$packagename.jar
echo "file is not exist"
fi
echo 複製構建的包/zzb/$systemname/Deploy/Deploy.tar.gz到專案所在目錄,即當前目錄
cp /zzb/$systemname/Deploy/Deploy.tar.gz Deploy.tar.gz
echo 刪除掉原有的lib目錄
rm -rf lib
echo 解壓Deploy.tar.gz包到當前目錄
tar zxvf Deploy.tar.gz
echo 解壓完成,刪除掉目錄Deploy
rm -rf Deploy
Modifytime=`stat /zzb/$systemname/$packagename.jar|grep -i Modify | awk -F. '{print $1}'`
echo "$packagename.jar包的更新時間為: $Modifytime"
echo 重啟專案
nohup sh /zzb/$systemname/restart.sh &
echo 正在重啟,請耐心等待.....
sleep 90
cat /zzb/$systemname/nohup.out
pid=`ps -ef |grep $packagename.jar |grep -v grep |awk '{print $2}'`
if [ "${pid}" ]; then
    echo "restart ok,server is running and pid=$pid"
    echo 部署完成
else
   echo "restart fail,server is not started"  
    exit 1
fi
View Code

SSHServer高階裡面要把Execinpty勾上

SSH Publishers層面的高階點開,設定伺服器引數SSH_Server

完成。

晚生不才,請多指教!