Build Steps中选择执行Shell,内容如下
⚠️
如果纯写
nohup java -jar
肯定会出现发布后显示成功,但实际用jps
命令查询并未运行的情况,这是因为jenkins根据BUILD_ID 识别某个进程是否为构建过程的衍生进程,所以添加BUILD_ID后,jenkins就无法识别是否为衍生进程,则此进程能在后台保留运行。结论:Jenkins程序只负责运行伪命令行nuhup 命令,并不保证是否成功运行 nuhup后面的命令。
shell
TARGET_DIR=/opt/app/springboot-test # 自定义存放jar包的目录
JAR_NAME=demo-0.0.1.jar # 根据实际产物名调整
mkdir -p "$TARGET_DIR"
# 拷贝最新构建产物
cp -f target/*.jar "$TARGET_DIR/"
# 检测并停止旧进程(更稳妥的 ps+grep)
PID=$(ps -ef | grep java | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
echo "发现旧进程 PID: $PID,正在停止..."
kill -9 "$PID"
echo "旧进程已停止"
else
echo "没有发现旧进程"
fi
# 启动新进程
echo "启动新版本服务..."
BUILD_ID=spring_test_demo # 这个值随便写
nohup java -jar $TARGET_DIR/$JAR_NAME > $TARGET_DIR/app.log 2>&1 &