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

GitLab仓库镜像至Azure DevOps的Jenkins任务报错排查

GitLab镜像到Azure DevOps的Jenkins流水线报错排查方案

核心错误分析

报错kex_exchange_identification: read: Connection reset by peer本质是Jenkins的Linux执行节点无法通过SSH正常连接到Azure DevOps的Git服务器,结合本地脚本正常的情况,问题集中在Jenkins执行环境的网络、SSH凭证加载或地址解析上。

排查步骤及修复方案

1. 清理无效的代理配置

脚本中针对HTTP协议设置了代理,但目标地址是SSH协议(git@ssh.dev.azure.com),HTTP代理对SSH连接无作用,反而可能干扰网络连接:

  • 移除脚本中的git config http.proxy http://XXXX.XXXXX.XX:0000行

2. 确保SSH凭证正确加载并生效

当前sshUserPrivateKey的keyFileVariable为空,导致Jenkins没有将私钥路径传递给shell脚本,需要修正凭证配置并让Git使用该私钥:

  • 修改withCredentials块:
    withCredentials([
        gitUsernamePassword(credentialsId: 'GITLAB_CRED', gitToolName: 'Default'),
        sshUserPrivateKey(credentialsId: 'AZURE_SSH_KEY', keyFileVariable: 'SSH_KEY_PATH')
    ]) {
    
  • 在shell脚本中添加Git SSH命令配置,指定使用凭证中的私钥:
    export GIT_SSH_COMMAND="ssh -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no"
    
    (注:StrictHostKeyChecking=no用于跳过首次连接的主机密钥确认,生产环境建议提前通过ssh-keyscan ssh.dev.azure.com >> ~/.ssh/known_hosts将Azure的主机密钥加入执行节点的known_hosts)

3. 修正目标仓库地址的空格编码问题

SSH地址中的%20是URL编码格式,shell环境无法正确解析,需替换为实际空格或转义空格:

  • 将TARGET_URL改为:
    TARGET_URL="git@ssh.dev.azure.com:v3/XXXX-XX/XX\ XX\ VV\ ZZ/XYXYX"
    
    或者用引号包裹路径部分:
    TARGET_URL="git@ssh.dev.azure.com:v3/XXXX-XX/'XX XX VV ZZ'/XYXYX"
    

4. 验证执行节点的网络连通性

在Jenkins的Linux执行节点上手动执行以下命令,确认能正常连接Azure DevOps SSH服务器:

telnet ssh.dev.azure.com 22
# 或测试SSH连接
ssh -T git@ssh.dev.azure.com

如果连接失败,需要检查节点的防火墙规则、网络出口是否允许访问Azure的22端口。

5. 确认Azure DevOps的SSH权限配置

  • 检查Azure DevOps中配置的公钥是否与Jenkins凭证中的私钥配对
  • 如果使用的是项目级部署密钥,需确保勾选了允许写入权限(镜像推送需要写入权限)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:20:30