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
相关产品推荐
相关产品推荐

