2019-5-17更新,此文章过于简陋不再具有参考性,请移步:https://blog.csdn.net/u012280292/article/details/90241596
================================================================================================
在生产或者仿真的环境下我们通过docker可以轻松部署到多台服务器上,但是测试机上不需要搞这么多,也许我只希望我修改了代码后测试机上的服务自动构建而已,也不想搞什么docker容器,因为没必要,于是我就研究了下jenkins+spring cloud自动化部署,这个搞起来要比docker简单些,在这记录一下吧,也许能帮到有需要的人。
一、安装jenkins的maven插件
在jenkins的系统管理,插件管理中安装
Maven Integration plugin
等插件
二、创建一个Jenkins任务
好了,先让我们创建一个jenkins自动化部署的job,打开jenkins页面,点new任务,选择构建一个maven项目输入名字点ok,然后点configure进入项目设置,细的我就不说了,重点说一下重要的配置
三、配置jenkins job
Source Code Management
第一个是:Source Code Management下的配置,由于我用的是SVN,因此我点的是Subversion,然后配置了一下svn地址,这个地址配的是你的项目地址,如svn://192.168.1.1/svnrepos/java/myproject-master
Build Triggers
Build Triggers可以配置定时任务构建,或者每隔多长时间检查一下代码有没有变更,如果有变动则自动重新部署。
Build
下一个要配的是Build:
Goals and options
Goals and options 配你的maven打包命令如 package -Ddockerfile.skip -Dmaven.test.skip=true ,这个-Ddockerfile.skip是有用的,具体作用后面再说。
Post Steps
最后是Post Steps:
我是填的sh build.sh,也就是构建完成后执行的任务,我这里选执行sh脚本,毕竟启动spring boot还是得靠命令来启动,把这个build.sh放项目的根目录下就行了。
目前手头没有源码,简单说下我的”笨方法“,其实就是通过maven打包插件把所有子项目打包到master下的target目录下,然后build.sh循环target下的jar ,再通过java - jar 命令启动,当然如果你是tomcat 之类的可以通过jenkins的插件自动启动,这个更方便。
需要注意的点:
启动之前检查程序是否已经启动,如果已经启动则先Kill,第一次启动可以把PID存在文件里,下次启动直接读取文件再调用kill命令杀掉程序。
如果我还记得的话,下次补上源码,下一章写下最关键的:使用jenkins自动化部署docker。
2019-1-15 加上sh命令:
export BUILD_ID=dontKillMe
#指定最后编译好的jar存放的位置
www_path=/home/compent
#jar位置
jar_path=$WORKSPACE/target
#进入指定的编译好的jar的位置
cd ${jar_path}
#遍历target文件夹
for file in ./*
do
#只要jar文件
if [ "${file##*.}"x = "jar"x ];then
#Jenkins中编译好的jar名称
jar_name=$file
#获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
pid=$(cat ${www_path}/${jar_name}.pid)
#先删除同名文件
rm -f ${www_path}/${jar_name}
#将编译好的jar复制到最后指定的位置
cp ${jar_path}/${jar_name} ${www_path}
#进入最后指定存放jar的位置
cd ${www_path}
#杀掉以前可能启动的项目进程
kill -9 ${pid}
#启动jar,指定SpringBoot的profiles为test,并后台启动
nohup java -jar -Dspring.profiles.active=test ${www_path}/${jar_name} > ${jar_name%-*.*.*-SNAPSHOT.jar}.out 2>&1 &
#将进程ID存入到ufind-web.pid文件中
echo $! > /home/compent/${jar_name}.pid
fi
done
希望能帮到有需要的人。
|