Jenkins在Windows上运行start java报拒绝访问及阶段执行完后取消自动关闭程序的问题解决
版权声明:本文为砷碲原创文章,未经允许,禁止转载本文链接:https://sdpro.top/blog/html/article/1050.html
专栏收录该内容
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♥ 赞助 ♥
尽管去做,或许最终的结果不尽人意,但你不付出,他不付出,那怎会进步呢?