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 -
四、构建后步骤
添加步骤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
SSH Server高级里面要把Exec in pty勾上
SSH Publishers层面的高级点开,设置服务器参数SSH_Server
完成。
晚生不才,请多指教!