为什么使用jenkins:我们使用jenkins的目的是后端代码push后可以直接在测试服务器上运行,方便前端随时调用最新的后端接口,测试人员也可以更快的得到修改后的功能。
流程:在配置好jenkins基本配置之后,我们push完代码,阿里code或github 用webhook请求到jenkins,让jenkins拉取最新的代码,然后用gradle命令进行build和运行。
构建方式是通过执行shell脚本构建。
- 第一个问题:gradle运行build命令会使jenkins一直卡顿,使得下一次的构建请求无法执行。
那就关掉上一次的进程
pid=lsof -i:8081|awk '{print $2}' | tail -n 1
#获取8080端口号
的进程id
echo $pid
kill -9 $pid
#杀掉原先的服务
- 但是因为本次的请求无法执行,所以这段shell脚本是不会执行的。
解决方式:
让gradle构建和运行在后台进行
使用nohup命令
nohup /usr/local/src/gradle-5.2.1/bin/gradle bootRun > build.log 2>&1 < /dev/null &
但是新的问题有出现了
jenkins会自动杀掉衍生进程
所以nohup 在后台启动后,jenkins构建完会关掉它
加上这个
export BUILD_ID=dontKillMe
临时改变BUILD_ID值,这样Jenkins就不会找到并结束掉nohup
- 完整的脚本如下:
#!/bin/sh
echo ‘开始运行gradle启动脚本’
pid=lsof -i:8081|awk '{print $2}' | tail -n 1
#获取8080端口号的进程id
echo $pid
kill -9 $pid
#杀掉原先的服务
cd /var/lib/jenkins/workspace/psp-backend
#进入项目目录
export BUILD_ID=dontKillMe
nohup /usr/local/src/gradle-5.2.1/bin/gradle bootRun > build.log 2>&1 < /dev/null &
#执行gradle 构建和启动命令