Jenkins拉取Bitbucket代码时遭遇SSH并发连接数超限问题
解决Jenkins从Bitbucket拉取代码时的并发连接超限问题
嘿,这个错误我之前帮团队排查过好几次,核心原因很明确:你的Jenkins(不管是单实例还是集群)同时发起的SSH连接数已经撞了Bitbucket服务器的上限——250个,服务器直接把新连接掐断了,后面的认证失败其实是连接断开导致的连锁反应。
下面给你几个实用的解决办法,按实施难度和效果排序:
1. 先给Jenkins流水线“降降温”——限制并发
- 限制单项目的并行构建数:如果这个仓库的流水线同时跑了太多份,先去Jenkins项目配置里找「并发构建限制」,设个合理的数值(比如50-100,根据你们的业务量调整),避免短时间内炸出一堆SSH连接。
- 开启Git连接复用:Jenkins的Git插件有个隐藏的好用功能——共享连接。在流水线的SCM配置里,点开Git的「高级」选项,勾选「Use shared connections」,这样多个流水线可以共用同一个SSH连接,不用每次拉代码都新建连接,能直接砍掉一大半并发数。
2. 给Git客户端加个“连接池”
修改Jenkins运行用户的SSH配置,让Git自动复用连接:
- 找到Jenkins用户的
~/.ssh/config文件(如果没有就新建一个),添加这段配置:
这段配置会让Git在第一次连接后保持连接60秒,后续的fetch操作直接复用这个连接,不用重新握手,能大幅减少并发连接数。Host bitbucket.tecnotech.com HostName bitbucket.tecnotech.com Port 7999 User git ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 60s - 如果你们的流水线不需要完整的Git历史,还可以用浅克隆,既快又省连接:在Git拉取命令里加
--depth=1,比如:git fetch --tags --progress --depth=1 ssh://git@bitbucket.tecnotech.com:7999/qat/sgi-linkingtool-web-test.git +refs/heads/*:refs/remotes/origin/*
3. 找Bitbucket管理员“扩容”
如果上面的优化都顶不住,说明你们的业务确实需要更多连接,这时候直接找公司的Bitbucket服务器管理员,让他们把并发连接上限从250调高一点。顺便提醒他们开一下闲置连接自动回收,避免旧连接占着坑不释放。
4. 临时救急:加个重试机制
如果暂时没法调整配置,先给流水线加个重试逻辑,碰到连接超限错误自动重试。用Jenkins的retry步骤就行:
pipeline { agent any stages { stage('拉取代码') { steps { retry(3) { // 最多重试3次 git url: 'ssh://git@bitbucket.tecnotech.com:7999/qat/sgi-linkingtool-web-test.git', credentialsId: '你的SSH凭据ID', branch: '你的分支' } } } } }
这样第一次碰上限的时候,流水线会自动再试两次,大概率能抢到空闲连接。
内容的提问来源于stack exchange,提问作者Gonz




