目录

解决Jenkins默认终止Shell产生服务进程的问题

解决Jenkins默认终止Shell产生服务进程的问题

1、Windows环境

  • Jenkins进行Build steps的使用Execute Windows batch command启动微服务(Jar包),Jenkins会默认终止Shell产生的服务进程,而在命令行能够正常运行的服务进程。

1.1 使用命令行启动服务是正常

  • 使用命令行执行

    https://i-blog.csdnimg.cn/direct/9f349b5db7ce4f3dba84fcaf20ac72ec.png

  • 正常启动nacos服务

    https://i-blog.csdnimg.cn/direct/1441d5fd063243539b031240fee44e27.png

  • 正常输出日志

    https://i-blog.csdnimg.cn/direct/2c92f8136b6b45c8a0194cb2d96c4de4.png

1.2 使用Jenkins启动服务则会自动关闭服务

  • 设置启动服务脚本如下:

    https://i-blog.csdnimg.cn/direct/a7021131e2d6418ca23c8bc6fe5c4810.png

  • Jenkins输出成功

    https://i-blog.csdnimg.cn/direct/48b1b897f6db424b882030cf8ec7e722.png

  • 实际服务没启动,在初始化时就被Jenkins关闭了

    https://i-blog.csdnimg.cn/direct/f82c01d8f4f34e70b73055bde0057b03.png

  • 输出日志

    https://i-blog.csdnimg.cn/direct/9032a58d8c2f47e6a1b10a78a1f23b72.png

1.3、 解决方案

  • 修改Execute Windows batch command的脚本,在脚本首行加入 BUILD_ID=dontKillMe ,告诉Jenkins不要关闭进程。
rem 设置局部变量,不让Jenkins自动关闭以下进程
set BUILD_ID=dontKillMe

rem 设置执行的jar包文件
set JAR_FILE_REGISTER=E:\jar\pigx-register.jar

rem 关闭已启动的进程
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :8848') do (
    taskkill /F /PID %%a
)

rem 运行Jar包
start "register" /b  java -Dfile.encoding=utf-8 -Xms256m -Xmx256m -jar %JAR_FILE_REGISTER% > app.log 2>&1