【问题标题】:Execute WIndows bat file in Jenkins在 Jenkins 中执行 Windows bat 文件
【发布时间】:2020-04-18 17:26:32
【问题描述】:

我正在使用 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'''
}

init 阶段,如果进程已经打开,我想终止它,并且在 deploy 阶段它应该打开一个新的命令窗口并运行我的批处理文件。 问题是上述方法不起作用。构建成功,但没有打开命令窗口。请建议

【问题讨论】:

标签: windows jenkins jenkins-pipeline devops


【解决方案1】:

从技术上讲,按照您的要求,您应该能够运行

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

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

【讨论】:

  • Jenkins 作为 Windows 服务运行。在这种情况下我无法打开一个新的命令窗口吗?
  • 我希望它在新的命令窗口中打开的原因是因为批处理文件将运行服务器。只要服务器正在运行,命令窗口就会保持打开状态。因此,构建将始终显示为“正在执行”,而永远不会显示为“已完成”
  • 据我所知没有简单的方法,它是 Windows 服务设计的一部分。您可以通过循环无限期地挂起 bat 进程。当然,这会绑定该构建节点。如果你真的想一起破解一些东西,你可以有一个由事件日志中的事件触发的计划任务,然后让你的 bat 文件/服务创建该事件。
【解决方案2】:

如果代理在服务中运行并且您希望获得输出,则另一种解决方案:

bat(readFile("mybat.bat"))

注意:bat 文件需要在您的工作区中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-30
    • 2011-11-25
    • 2010-12-25
    • 1970-01-01
    • 2022-01-11
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多