You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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文件(如果没有就新建一个),添加这段配置:
    Host bitbucket.tecnotech.com
      HostName bitbucket.tecnotech.com
      Port 7999
      User git
      ControlMaster auto
      ControlPath ~/.ssh/sockets/%r@%h-%p
      ControlPersist 60s
    
    这段配置会让Git在第一次连接后保持连接60秒,后续的fetch操作直接复用这个连接,不用重新握手,能大幅减少并发连接数。
  • 如果你们的流水线不需要完整的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

火山引擎 最新活动