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

如何在Jenkins中通过sshagent使用Git命令?

如何在Jenkins中通过sshagent使用Git命令?

嘿,我来帮你搞定这个问题!你已经能通过sshagent在远程节点执行docker命令了,这步走对了,卡壳的Git命令其实就差一个关键的SSH配置~

首先得搞明白核心问题:当你用sshagent在Jenkins里持有GitHub的SSH密钥时,直接ssh到远程节点执行git命令的话,远程节点是没法直接用到这个密钥的——你需要开启SSH代理转发,把Jenkins这边的sshagent密钥转发到远程的SSH会话里,这样远程的git命令才能用这个密钥去和GitHub认证。

接下来给你调整后的Pipeline写法,你可以直接参考:

pipeline {
    agent any

    stages {
        stage('更新代码并重启容器') {
            steps {
                sshagent(credentials: ['docker-work']) {
                    // 关键:添加-A参数开启代理转发,先到远程节点拉取最新代码
                    sh "ssh -tt -A -o StrictHostKeyChecking=no root@192.168.0.103 'cd /home/CloudToDoList/CloudToDoList && git pull'"
                    // 然后停启容器,这部分你原来的写法没问题
                    sh "ssh -tt -o StrictHostKeyChecking=no root@192.168.0.103 docker-compose -f /home/CloudToDoList/CloudToDoList/docker-compose.yml stop"
                    sh "ssh -tt -o StrictHostKeyChecking=no root@192.168.0.103 docker-compose -f /home/CloudToDoList/CloudToDoList/docker-compose.yml up -d"
                }
            }
        }
    }
}

这里还有几个重点要提醒你:

  • 一定要在ssh命令里加-A参数,这是开启代理转发的核心,没有它远程节点的git命令就拿不到Jenkins sshagent里的密钥
  • 确保你Jenkins里的docker-work凭证对应的SSH密钥,是有GitHub仓库拉取权限的(也就是这个密钥已经加到你的GitHub账号的SSH密钥列表里了)
  • 远程节点上的Git仓库,必须是用SSH地址克隆的(比如git@github.com:你的用户名/你的仓库.git),如果是HTTPS地址的话,SSH密钥是没用的,得改成SSH地址
  • 可以先手动在远程节点上执行一次git pull,确认能正常拉取代码,避免因为GitHub的主机密钥没加到远程节点的known_hosts里导致Jenkins执行失败(虽然你加了StrictHostKeyChecking=no,但提前手动验证一次能少踩坑)

如果还是有问题,你可以检查这几点:

  1. 远程节点有没有安装Git?这是基础,没装的话先补上
  2. 远程节点的/root/.ssh/known_hosts里有没有GitHub的公钥?如果没有,手动执行一次ssh git@github.com确认,会自动添加
  3. 确认Jenkins的sshagent确实加载了正确的密钥,你可以在Pipeline里加一步sh "ssh-add -l"来查看当前加载的密钥列表

备注:内容来源于stack exchange,提问作者Сергей Дударев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:38:04