在Jenkins中执行Windows批处理文件

5

我正在使用Jenkins 2.46.1版本,安装了构建流水线插件,并希望在其中执行Windows批处理文件。该批处理文件应在新的命令窗口中执行,而不是在Jenkins控制台输出中执行。下面是我的Jenkins流水线Groovy脚本:

node {  
    stage 'Init'
    bat '''
        call C:\\myprj\\mybat.bat stop
        EXIT /B 0
    '''
    stage 'Deploy'
    bat '''call C:\\myprj\\mybat.bat'''
}

初始化 阶段,如果进程已经打开,我想杀死它,在部署阶段,它应该打开一个新的命令窗口并运行我的批处理文件。 问题是上述方法不起作用。构建成功,但没有打开任何命令窗口。请提供建议。

请参考此答案。https://dev59.com/Qmkv5IYBdhLWcg3w9lei#48750441 - Jainish Kapadia
2个回答

5

从技术上讲,要做你所要求的事情,你应该能够运行

bat 'start cmd.exe /c C:\\myprj\\mybat.bat'

这将启动一个新的命令窗口(cmd.exe)并运行给定的批处理文件。根据你的Jenkins从机运行方式,你可能看不到任何东西。(例如,如果它作为Windows服务或不同的用户运行,你将看不到任何东西)


Jenkins正在作为Windows服务运行。在这种情况下,我是否无法打开新的命令窗口? - user5917011
我想让它在一个新的命令窗口中打开的原因是因为批处理文件将运行服务器。只要服务器正在运行,命令窗口就会保持打开状态。因此,构建始终显示为“正在执行”,而不是“已完成”。 - user5917011
我不知道有什么简单的方法,因为这是Windows服务设计的一部分。您可以使用循环无限期地挂起批处理进程。当然,这会占用构建节点。如果您真的想要将某些东西拼凑在一起,您可以创建一个由事件日志触发的计划任务,然后让您的bat文件/服务创建该事件。 - Kendall Trego

1

如果代理在服务中运行并且您想要获取输出,则可以采用另一种解决方案:

bat(readFile("mybat.bat"))

注意:bat文件需要放在您的工作区中。
附加说明:您不再从其原始位置运行bat文件。相反,它是从底层持久性任务系统创建的临时位置运行的。这意味着您脚本中的%~dp0之类的内容将不会返回您期望的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接