如何在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,但提前手动验证一次能少踩坑)
如果还是有问题,你可以检查这几点:
- 远程节点有没有安装Git?这是基础,没装的话先补上
- 远程节点的
/root/.ssh/known_hosts里有没有GitHub的公钥?如果没有,手动执行一次ssh git@github.com确认,会自动添加 - 确认Jenkins的sshagent确实加载了正确的密钥,你可以在Pipeline里加一步
sh "ssh-add -l"来查看当前加载的密钥列表
备注:内容来源于stack exchange,提问作者Сергей Дударев
相关产品推荐
相关产品推荐

