最近在学习使用Jenkins+Github+Maven部署spring boot项目,这其中踩了巨多坑,跟大家分享下,希望出现同样问题可以做个参考。
我这里不对如和结合Jenkins和Github使用介绍,网上一堆教程参考,我也是看网上教程来的。另外我的Jenkins是跑在docker里面的,而不是以war包形式跑在web服务器里,所以就遇到了很多问题,以下遇到的问题也仅对使用docker方式启动Jenkins提供参考。
1、工具问题
有三个重要工具:Git、JDK、Maven。其中Git新版Jenkins貌似在你选择安装推荐插件时就已经安装,所以我们需要配置JDK和Maven,开始我选择的是自动安装,然后构建的时候就一直出很奇怪的问题,多次尝试无果后换成自己去下载。因为启动docker是配置了数据卷,所以把安装好的JDK8(我的项目JDK也是8)和maven3放在挂载在宿主机上的数据卷里,而且我替换了原来的setting.xml,改了一些镜像源。
换成自己的工具后,再次构建发现还是报错,错误提示是说JDK8不适配maven3.3.9,要我换更高版本的JDK。这里有些奇怪,我在本地就是JDK8,照样编译的好好的,始终不明白为啥,后来直接换了JDK12。
这下倒是能开始执行package操作了,可是又报了个maven jvm terminated unexpectedly with exit code 137的错误。网上一查说是内存不足,马上回到服务器上用free -h
查看内存,果然,我那1G内存的垃圾服务器就只有十几兆可用了,又花了点钱升级到了2G,然后就打包编译成功啦。
2、war包上传到远程服务器
在全局工具配置里面配置远程ssh的主机。注意这里的配置里面的Remote Directory就是你要把文件上传到远程服务器的目录,如果这里做了配置,那么在项目的配置里就不需要再配置,否则会在这目录下再建立一次这样的目录结构。
下面是项目配置里面的发送文件或者执行远程shell的配置。这里的Remote directory为空是因为在全局工具里面已经配置过了。而且我们还需要去掉前缀target,这样文件传过去就不会分目录,就是一个war包。
Exec command是需要执行的放在远程服务器上的脚本。
3、执行远程脚本
脚本写得比较烂,因为在这里卡了很久。总之在这里需要注意的是你用账号密码ssh进来远程服务器执行脚本时,环境变量是用不了的,比如java -version
,其次要使用绝对路径,就比如projectname
我一开始写成projectname=./wechatocr-1.0.0-SNAPSHOT.war
,下面的if判断就一直是false,用相对路径就找不到此文件。
#!/bin/sh
deployPath=/usr/local/tomcat9/apache-tomcat-9.0.22/webapps
projectname=/usr/local/tomcat9/wechatocr-1.0.0-SNAPSHOT.war
echo "执行部署脚本"
echo ${projectname}
if [ -f "${projectname}" ]
then
rm -rf ${deployPath}/wechatocr.war
rm -rf ${deployPath}/wechatocr
echo "删除原war包"
mv ${projectname} /usr/local/tomcat9/wechatocr.war
echo "将新的war包部署到webapps目录下"
mv /usr/local/tomcat9/wechatocr.war ${deployPath}
else
echo "war包不存在"
exit 1
fi
echo "success"
exit 0
折腾许久后,终于构建部署成功,刚开始用Jenkins必然会踩很多坑,以后再去熟悉他的更高级的应用,比如分布式部署等。
网友评论