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

Jenkins多SSH执行异常:仅完成首个SSH步骤后续未执行

问题分析与解决方案

核心问题原因

  1. 初始代码语法错误:第一个SSH块的结束标记写成了<< EOF,属于无效的here-doc语法,导致shell解析失败,直接终止了整个sh脚本执行,后续的scp和第二个SSH步骤根本没运行。
  2. 修改后缩进引发的错误:ksh的here-doc默认要求结束标记EOF必须完全顶格(不能有任何前导空格或缩进),你修改后的代码里EOF前面有缩进,ksh会把它当成普通命令文本,找不到正确的结束标记,因此抛出EOF: not found错误。

修复方案

方案1:移除结束标记的缩进(最稳妥)

将所有here-doc的结束标记EOF改成顶格书写,去掉前面的缩进,同时保证标记前后没有多余空格。修正后的代码如下:

stage('(02) Export file') {
    withCredentials([gitUsernamePassword(credentialsId: gitCredentials, gitToolName: 'Default')]) {
        sh '''
            ssh user@env << EOF
                mkdir /alim1 || true; 
                mkdir /alim2 || true; 
                mkdir /alim3 || true; 
EOF

            scp script1.ksh user@env:/alim1
            scp script2.ksh user@env:/alim2
            scp script3.ksh user@env:/alim3

            ssh user@env << EOF
                echo "Starting export"
                ksh /alim1/script1 || error1=1;
                ksh /alim2/script2 || error2=1;
                ksh /alim3/script3 || error3=1;
EOF
        '''
    }
}

方案2:使用<<-EOF忽略制表符缩进(仅支持Tab)

如果希望保留代码的缩进美观,ksh支持<<-EOF语法,它会忽略结束标记前面的制表符(Tab)(注意必须是Tab,不能是空格)。修正后的代码示例:

stage('(02) Export file') {
    withCredentials([gitUsernamePassword(credentialsId: gitCredentials, gitToolName: 'Default')]) {
        sh '''
            ssh user@env <<-EOF
                mkdir /alim1 || true; 
                mkdir /alim2 || true; 
                mkdir /alim3 || true; 
            EOF

            scp script1.ksh user@env:/alim1
            scp script2.ksh user@env:/alim2
            scp script3.ksh user@env:/alim3

            ssh user@env <<-EOF
                echo "Starting export"
                ksh /alim1/script1 || error1=1;
                ksh /alim2/script2 || error2=1;
                ksh /alim3/script3 || error3=1;
            EOF
        '''
    }
}

注意:这里EOF前面的缩进必须是Tab键输入的制表符,不能用空格代替,否则ksh依然会识别不到结束标记。

额外建议:使用Jenkins SSH插件替代原生shell命令

对于Jenkins中的远程SSH操作,更推荐使用Publish Over SSH或SSH Agent插件,这些插件专门为Jenkins设计,能更可靠地处理远程连接、文件传输和命令执行,避免shell here-doc的语法陷阱,同时更容易管理凭据和错误处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:52:41