Jenkins流水线Checkout Bitbucket分支时远程仓库拉取报错
问题描述
我是Jenkins初学者,尝试创建流水线实现从Jenkins端拉取Bitbucket私有仓库代码、安装依赖并完成构建的流程,但在第一步Checkout仓库分支环节就遇到问题。我已完成凭证配置与SSH链接设置,具体报错信息如下:
The recommended git tool is: NONE using credential 02cb4299-3a20-424f-a541-1771e5b2e0b9 C:\Users\ahsan.alam\AppData\Local\Programs\Git\bin\git.exe rev-parse --resolve-git-dir C:\Windows\system32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\SCM-Pipline\.git # timeout=10 Fetching changes from the remote Git repository C:\Users\ahsan.alam\AppData\Local\Programs\Git\bin\git.exe config remote.origin.url ssh:///git@bitbucket.org:Arsalanakhtar123/etisalat-jenkins.git/ # timeout=10 Fetching upstream changes from ssh:///git@bitbucket.org:Arsalanakhtar123/etisalat-jenkins.git/ C:\Users\ahsan.alam\AppData\Local\Programs\Git\bin\git.exe --version # timeout=10 git --version # 'git version 2.37.0.windows.1' C:\Users\ahsan.alam\AppData\Local\Programs\Git\bin\git.exe fetch --tags --force --progress -- ssh:///git@bitbucket.org:Arsalanakhtar123/etisalat-jenkins.git/ +refs/heads/*:refs/remotes/origin/* # timeout=10 ERROR: Error fetching remote repo 'origin'
当前使用的流水线配置代码如下:
pipeline { agent any stages { stage('Git Checkout') { steps { git branch: 'master', credentialsId: '<credentialIdsHere>', // 已替换为实际凭证ID url: 'ssh://git@bitbucket.org:company/repo.git/' // 已替换为实际仓库地址 } } } }
我已在Jenkins配置中指定git.exe路径,相关配置截图:
故障原因与修复方案
核心问题:SSH仓库地址格式错误
从报错日志可以看到,Jenkins实际调用时使用的远程仓库地址为ssh:///git@bitbucket.org:Arsalanakhtar123/etisalat-jenkins.git/,协议段出现3个斜杠,属于非法Git SSH地址格式。
Git的SSH地址仅支持两种合法写法,二者不能混写:
- SCP风格(Bitbucket默认推荐写法):
git@bitbucket.org:Arsalanakhtar123/etisalat-jenkins.git,注意该写法前面不能加ssh://前缀 - 标准URL风格:
ssh://git@bitbucket.org/Arsalanakhtar123/etisalat-jenkins.git,注意域名和仓库路径之间用斜杠/分隔,不能用冒号:
你当前配置中填写的URL为ssh://git@bitbucket.org:company/repo.git/,属于两种格式混写:添加了ssh://前缀的同时,域名后仍使用冒号分隔路径,Git解析时会错误补出第三个斜杠,将地址识别为本地路径,最终导致拉取失败。另外仓库地址末尾不要加多余斜杠。
其他需校验的配置项
- 确认Jenkins中添加的凭证类型为SSH Username with private key,录入的私钥和你配置在Bitbucket仓库部署公钥列表中的公钥是匹配的密钥对
- Windows环境下如果Jenkins以系统服务形式运行,要先切换到Jenkins服务的运行账号,手动在命令行执行一次对目标仓库的
git fetch操作,自动录入Bitbucket的host指纹到known_hosts文件,避免首次连接的host校验拦截 - 确认Jenkins服务运行账号有权限访问你配置的Git安装路径
修正后的Checkout配置参考
pipeline { agent any stages { stage('Git Checkout') { steps { git branch: 'master', credentialsId: '替换为你实际的凭证ID', // 二选一即可,不要混写 url: 'git@bitbucket.org:Arsalanakhtar123/etisalat-jenkins.git' // url: 'ssh://git@bitbucket.org/Arsalanakhtar123/etisalat-jenkins.git' } } } }
内容的提问来源于stack exchange,提问作者Ahsan Alam
相关产品推荐
相关产品推荐

