本文不探讨如何安装配置jdk、maven、git等环境,不探讨jenkins如何安装,该安装哪些插件等。你要知道这些,可以看看 使用Jenkins配置SpringBoot的自动化构建,讲得很详细了。
全局工具配置
如果你的jdk、maven、git
环境都是正常的,并且都配置了环境变量。那么只需在【全局工具配置】中做下环境配置
Post Steps
然后新建项目,很显然,我这里通过git来管理代码。并在Post Steps
配置一把如下脚本。
#export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
export BUILD_ID=dontKillMe
#指定最后编译好的jar存放的位置 即是发布目录
www_path=/home/pec/www
#Jenkins中编译好的jar位置 即是编译目录
jar_path=/var/lib/jenkins/workspace/demo-test/target
#Jenkins中编译好的jar名称
jar_name=demo-test-0.0.1-SNAPSHOT.jar
#获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
pid=$(cat /home/pec/www/demo-test.pid)
#进入指定的编译好的jar的位置
cd ${jar_path}
#将编译好的jar复制到最后指定的位置
cp ${jar_path}/${jar_name} ${www_path}
#进入最后指定存放jar的位置
cd ${www_path}
if ${pid}; then #判断进程号id是否存在
echo "pid is null"
else
kill -9 ${pid} #杀掉以前可能启动的项目进程
fi #if结束标志
#启动jar,指定SpringBoot的profiles为dev,后台启动
#java -jar -Dspring.profiles.active=dev ${jar_name} &
#启动jar,后台执行
java -jar ${jar_name} &
#将进程ID存入到demo-test.pid文件中
echo $! > /home/pec/www/demo-test.pid
这个脚本的意思是当jenkins
编译完成,将编译的jar文件
复制到copy
目录/home/pec/www/
下,执行jar包文件,并记录进程id。
实际上,编译的过程
是jenkins
通过pom.xml
以及maven插件的配合做得。之前配置的maven环境就是为了jenkins
根据pom下载依赖和编译使用。 而发布的过程
是通过Post Steps
写的linux命令脚本
来实现的。
遇到的问题
权限不足
权限不足,估计是很常见的问题之一了。执行vi /etc/sysconfig/jenkins
命令,可以看到下图:
由上图可知,JENKINS_USER
是jenkins
,不是root,而我的目录/home/pec/www
还有jenkins相关操作目录是root用户新建的,使用权限都是root组的用户或者root用户(ps:不明白用户与组概念的,可以看看我的这篇文章)。所以执行以下命令:
[root@localhost ~]# chown -R jenkins:jenkins /var/lib/jenkins
[root@localhost ~]# chown -R jenkins:jenkins /var/cache/jenkins
[root@localhost ~]# chown -R jenkins:jenkins /var/log/jenkins
[root@localhost ~]# chown -R jenkins:jenkins /home/pec/www
重启jenkins服务:
service jenkins restart
还有另一种解决方法,就是,你可以把JENKINS_USER
改成是jenkins
,然后重启即可。
kill 执行失败问题
其实最开始的脚本,我是直接使用的kill -9 pid
,而没有做判断,这样是不对的。所以才改成了判断脚本
if ${pid}; then #判断进程号id是否存在
echo "pid is null"
else
kill -9 ${pid} #杀掉以前可能启动的项目进程
fi #if结束标志
事实上,这样也还是有可能执行不成功,因为,可能由于不可知因素导致pid进程已经死掉了,这样的话,会不会也会执行失败。笔者就不深入了,留给读者发挥的空间。
还有值得一说的是,root 用户可用 kill 命令来停止任何进程。如果您并非 root 用户,那么您要停止的进程必须已由您启动。