Jenkins+git+maven自動化打包並部署到伺服器(Jenkins服務在Linux系統)
阿新 • • 發佈:2021-09-28
實現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/ elseView Codeecho 不存在$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 -
四、構建後步驟
新增步驟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 fiView Code
SSHServer高階裡面要把Execinpty勾上
SSH Publishers層面的高階點開,設定伺服器引數SSH_Server
完成。
晚生不才,請多指教!