Jenkins在Windows上运行start java报拒绝访问及阶段执行完后取消自动关闭程序的问题解决

专栏收录该内容

Hi I'm Shendi




问题描述

卡了我两天,各种搜索各种查都找不到解决办法(基本上没有一篇关于我这个问题的文章),在群友的帮助下终于解决了。

在这里记录下来给遇到同样问题的人解决问题


最近在学Jenkins,系统是Windows,项目是Maven项目,语言是Java,在构建时出了问题

最开始,使用 java -jar 这种方式运行jar包,这样会导致Jenkins的阶段卡在运行Jar包中,无法完成

于是加上 start 命令,start java -jar 这种,在Jenkins构建后,控制台报错:拒绝访问

报错


对于这种问题我是摸不着头脑的,网上搜到有一篇说改 Jenkins 服务的角色,我试了没有卵用,后来想到是不是因为在 C 盘,然后我将工作目录改成 H 盘,依然无法解决


遇见解决不了的问题就只能换方法了,我尝试了下 start echo 这样的命令,发现没有问题,于是使用以下命令来替代上面的命令

start cmd /c java -jar xxx.jar

这样的确解决了问题,阶段也能正常的执行完成,但是程序却好像压根没启动,无法访问



问题解决

Jenkins阶段运行完后是会自动关闭打开的所有进程的,所以并不是程序没有启动,而是启动后就被关闭了


可以在运行的命令后面加下面这行命令,来让阶段在等待中

ping -n 60 127.0.0.1 > nul

运行后,发现可以正常访问项目了,上面的命令执行完,项目又不能访问了


解决办法是给Jenkins配置,让Jenkins不关闭打开的进程

在Jenkinsfile中,step部分用 withEnv 来包裹需要执行的命令,例如

stage('Deliver') {
    steps {
        withEnv(['JENKINS_NODE_COOKIE=noKill']) {
            bat 'start cmd /c java -jar xxx.jar'
        }
    }
}

这样程序就不会在阶段完成就关闭了,但是需要编写在启动前判断程序是否在运行,运行就关闭这样的脚本


至此,问题解决




END

本文链接:https://sdpro.top/blog/html/article/1050.html

♥ 赞助 ♥

尽管去做,或许最终的结果不尽人意,但你不付出,他不付出,那怎会进步呢?