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包

 

 Execute shell脚本如下:

#!/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

SSH Server高级里面要把Exec in pty勾上

 

SSH Publishers层面的高级点开,设置服务器参数SSH_Server

 

 

 完成。

posted @ 2021-09-28 20:01  JackyLaw  阅读(585)  评论(0编辑  收藏  举报