为啥我无法在 Windows 10 中运行的詹金斯管道中运行批处理文件?

Posted

技术标签:

【中文标题】为啥我无法在 Windows 10 中运行的詹金斯管道中运行批处理文件?【英文标题】:why am I not able to run batch file in jenkins pipeline running in windows 10?为什么我无法在 Windows 10 中运行的詹金斯管道中运行批处理文件? 【发布时间】:2019-04-08 12:43:03 【问题描述】:

我正在尝试运行 jenkins 工作区中的批处理脚本。我写了一个如下的 groovy 脚本来做到这一点

stage('batchscript') 
   steps
      bat 'start cmd.exe /c C:\\Program Files (x86)\\Jenkins\\workspace\\jenkins Project\\batchfile.bat'\
   

当我构建作业时,它应该打开一个新的命令窗口并在新的命令提示符下运行我的批处理文件,执行所有 bat 命令。构建成功,但没有打开命令窗口。任何建议都会有所帮助

【问题讨论】:

【参考方案1】:

Jenkins 旨在以 background 模式执行 shell 命令,而不是 interactive(UI) 模式。当你运行 start cmd.exe /c c://some/app.exe 时,会打开一个新的 cmd UI,这在 jenkins 中永远不会发生。

单行

如果你需要用 jenkins 执行一个简单的批处理命令:

stage('build') 
      cmd_exec('echo "Buils starting..."')
      cmd_exec('echo "dir /a /b"')


def cmd_exec(command) 
    return bat(returnStdout: true, script: "$command").trim()

这是一个高级示例:

https://gist.github.com/VladFrost/89e8ccabd40eb0f52374d7982b557c8e

多行

steps 
  echo 'Deploy to staging environment'

  // Launch tomcat
  bat """
    cd c:\\qa\\bin
    dir /a /b
    startup
  """
  
  bat """
    cd c:\\qa\\bin
    startup
  """

  // Code to move WAR to Tomcat
  bat "xcopy /y c:\\webapp\\target\\webapp.war ..."
  bat "xcopy /y c:\\webapp\\target\\webapp.war ..."

例子:

https://gist.github.com/timothyshort/a1364b36a0ee1c0dca378e6f438c0e1c

调用批处理文件

如果你需要使用 jenkins 执行批处理文件:

stage('build') 
  dir("build_folder")
      bat "run_build_windows.bat"
  

stage('build') 
  bat "c://some/folder/run_build_windows.bat"

Windows 路径有时很奇怪 :s 。无论如何,linux 是托管 jenkins 的最佳选择。

【讨论】:

【参考方案2】:

参考:https://thenucleargeeks.com/2020/11/24/how-to-run-batch-scripts-commands-in-jenkinsfile/

node 
        stage('Preparation') 
           //Preparations and checkout the code 
        
        stage('Build') 
           //Build command     
        
        stage('Post build action')
     
       bat '''  ECHO Hello World  '''
    
        
     

【讨论】:

以上是关于为啥我无法在 Windows 10 中运行的詹金斯管道中运行批处理文件?的主要内容,如果未能解决你的问题,请参考以下文章

詹金斯:无法将奴隶连接到主人

詹金斯生成文件错误

为啥我在 Windows 10 UWP 上收到“无法注册包”部署错误?

构建步骤“执行 Windows 批处理命令”在詹金斯中将构建标记为失败

为啥詹金斯抱怨我的反向代理设置被破坏了?

无法为詹金斯中的对象堆错误保留足够的空间[重复]