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

Jenkins部署阶段sshPut至远程服务器SFTP失败求助

Jenkins预发布环境SFTP PUT失败排查方案

问题概述

使用Jenkins部署预发布环境,3条流水线中仅第二条的SFTP上传Debian包步骤失败,错误为SSH_FX_FAILURE: An error occurred。Debian包构建正常,同流水线在原项目可正常运行,当前项目为原项目克隆版本,怀疑Jenkins节点配置缺失。

错误日志

[2024-03-18T13:12:42.832Z] Sending a file/directory to oauth-web02.b2bapi-stg.ovh.cloud.de[oauth-web02.b2bapi-stg.ovh.cloud.de]: from: /var/lib/jenkins/workspace/b2b-oauth-new/Oauth-server-Packager/b2b-oauth-server-new-staging_1.0.25_all.deb into: /home/b2bapiadm/b2b-oauth-server-new/

[2024-03-18T13:12:44.659Z] Failed SFTP PUT: /var/lib/jenkins/workspace/b2b-oauth-new/Oauth-server-Packager/b2b-oauth-server-new-staging_1.0.25_all.deb -> oauth-web02.b2bapi-stg.ovh.cloud.de:/home/b2bapiadm/b2b-oauth-server-new/

Failed SFTP PUT: /var/lib/jenkins/workspace/b2b-oauth-new/Oauth-server-Packager/b2b-oauth-server-new-staging_1.0.25_all.deb -> oauth-web02.b2bapi-stg.ovh.fti-cloud.de:/home/b2bapiadm/b2b-oauth-server-new/: (SSH_FX_FAILURE: An error occurred): Failure

相关Groovy代码片段

stage('Deploying to staging') {
              steps {
                script{
                  for(int i=0; i< pipelineParams.STG_SERVER_CONFIG_NAME.size(); i++){
                    echo "Deploying ${pipelineParams.STG_SERVER_CONFIG_NAME[i]}"
                    def remote = [:]
                    remote.name = "${pipelineParams.STG_SERVER_CONFIG_NAME[i]}"
                    remote.host = "${pipelineParams.STG_SERVER_CONFIG_NAME[i]}"
                    remote.allowAnyHosts = true
                    withCredentials([
                      sshUserPrivateKey(
                        credentialsId: "${JENKINS_SSH_KEY_ID}",
                        keyFileVariable: 'identity',
                        passphraseVariable: '',
                        usernameVariable: 'userName'
                      )
                    ]) {
                      remote.user = userName
                      remote.identityFile = identity
                      sshPut remote: remote,
                        from: "${ARTIFACTS_NAME_PREFIX}-staging_${BuildTag}_all.deb",
                        into: "${DEB_FILE_PATH}${ARTIFACTS_NAME_PREFIX}/",
                        dryRun: env.DRY_RUN
                    }
                  }
                }
              }
            }

排查建议

  • 核对Jenkins节点SSH客户端配置
    确认当前项目运行的Jenkins节点是否安装了OpenSSH客户端(ssh/sftp命令),原项目节点可能已预装,克隆项目若分配到新节点可能缺失。执行which sftp验证,未安装则通过包管理器安装(如Debian/Ubuntu用apt install openssh-client)。

  • 验证节点到目标服务器的SSH连通性
    登录Jenkins节点,用流水线使用的SSH私钥手动连接目标服务器:

    ssh -i /path/to/private/key b2bapiadm@oauth-web02.b2bapi-stg.ovh.cloud.de
    

    尝试手动执行SFTP上传:

    sftp -i /path/to/private/key b2bapiadm@oauth-web02.b2bapi-stg.ovh.cloud.de
    put /var/lib/jenkins/workspace/b2b-oauth-new/Oauth-server-Packager/b2b-oauth-server-new-staging_1.0.25_all.deb /home/b2bapiadm/b2b-oauth-server-new/
    

    观察是否有具体错误(如权限不足、目录不存在、密钥未授权),SSH_FX_FAILURE通常是服务器端返回的通用错误,手动操作能暴露细节。

  • 检查流水线参数与环境变量一致性
    对比原项目与当前克隆项目的JENKINS_SSH_KEY_ID、DEB_FILE_PATH、ARTIFACTS_NAME_PREFIX等参数:

    • 确认JENKINS_SSH_KEY_ID对应的凭证在当前项目有权限使用(克隆项目可能未继承凭证权限)
    • 验证DEB_FILE_PATH拼接后的目标目录/home/b2bapiadm/b2b-oauth-server-new/是否存在,且b2bapiadm用户有写入权限
    • 检查BuildTag变量是否正确生成,确保from路径指向的Debian包确实存在于当前节点的工作区
  • 核对Jenkins SSH插件版本
    确认当前节点的SSH插件版本与原项目节点一致,插件版本差异可能导致兼容性问题,尤其是sshPut步骤的参数解析逻辑。

  • 检查节点工作区权限
    确认Jenkins节点运行用户(通常是jenkins)对工作区的Debian包有读取权限:

    ls -l /var/lib/jenkins/workspace/b2b-oauth-new/Oauth-server-Packager/b2b-oauth-server-new-staging_1.0.25_all.deb
    

    若权限不足,调整工作区或文件权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:53:35