You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jenkins在Windows远程服务器触发批处理脚本报错如何解决

报错原因与修复方案

语法错误修复(直接解决当前编译报错)

你遇到的unexpected token: }编译报错是由remote变量的非法定义导致的:
你写的def remote = [http://inb*****.com]不符合Groovy Map的定义规则,ssh-steps插件要求remote是键值对格式的Map,初始化空Map需要用def remote = [:]。

同时还有2处配置错误需要修正:

  • remote.host字段不需要带http://前缀,SSH连接仅需要填写主机的域名或IP地址
  • 你本地通过writeFile生成的abc.bat内容是Linux命令ls -lrt,Windows系统无法识别;如果你要执行测试服务器上已经存在的abc.bat,不需要本地生成脚本,直接调用sshCommand执行远程脚本即可。

修正后的流水线代码示例(执行测试服务器已存在的abc.bat)

node {
    // 正确初始化空Map
    def remote = [:]
    remote.name = 'inb***'
    // 去掉http前缀,仅保留域名/IP
    remote.host = 'inb*****.com'
    remote.user = 'jenkinsSSH'
    remote.password = '********34'
    remote.allowAnyHosts = true
    stage('Remote SSH') {
        // 直接执行远程服务器上已存在的abc.bat,注意替换为你实际的文件路径
        sshCommand remote: remote, command: "cmd /c C:\\你的脚本存放路径\\abc.bat"
    }
}

如果你需要传递本地生成的脚本到远程执行,用以下代码

node {
    def remote = [:]
    remote.name = 'inb***'
    remote.host = 'inb*****.com'
    remote.user = 'jenkinsSSH'
    remote.password = '********34'
    remote.allowAnyHosts = true
    stage('Remote SSH') {
        // 写入Windows兼容的bat命令
        writeFile file: 'abc.bat', text: 'echo hello from local bat'
        // 把本地脚本传到远程执行
        sshScript remote: remote, script: "abc.bat"
    }
}

其他实现远程执行脚本的方案

如果不想依赖ssh-steps插件,也可以用以下更简单的方案:

  • 直接调用原生SSH命令:在Jenkins流水线的bat/sh步骤中直接执行ssh命令,前提是Jenkins节点已配置和测试服务器的SSH免密登录,命令示例:
    ssh jenkinsSSH@inb*****.com "cmd /c C:\路径\abc.bat"
    
  • 使用Publish Over SSH插件:在Jenkins系统设置中提前配置好测试服务器的SSH连接信息,流水线中可以直接调用插件提供的步骤执行远程命令、传输文件,配置一次可重复使用。
  • 使用WinRM协议:针对Windows服务器的原生远程管理协议,不需要额外安装OpenSSH,Jenkins有对应WinRM插件,执行Windows批处理命令兼容性更好。

内容的提问来源于stack exchange,提问作者DeekshaAG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:54:03