Jenkins Pipeline Groovy克隆GitHub仓库失败及SSH参数疑问
Jenkins Pipeline Git克隆报错问题解答
问题原因及修复方法
核心错误是Host key verification failed,主要有两个问题:
- Git未信任GitHub的主机密钥:Jenkins执行克隆的Agent机器上,没有将GitHub的主机密钥添加到
known_hosts文件中,导致克隆时触发主机密钥验证失败。 - Git未指定使用Jenkins提供的私钥:你通过
sshUserPrivateKey获取了私钥文件路径,但git clone命令默认读取默认路径的私钥(比如~/.ssh/id_rsa),没有用到key_file_var指向的临时私钥文件。
修复后的Pipeline代码示例:
pipeline { agent any stages { stage("Checkout") { steps { withCredentials([sshUserPrivateKey(credentialsId: 'mySshUserCred', keyFileVariable: 'key_file_var', usernameVariable: 'username_var')]) { // 先添加GitHub主机密钥到known_hosts,跳过验证 sh 'ssh-keyscan github.com >> ~/.ssh/known_hosts' // 指定Git使用Jenkins生成的临时私钥文件 sh 'GIT_SSH_COMMAND="ssh -i $key_file_var" git clone git@github.com:SorryAssInc/ops.git' } } } } }
插件相关说明
你用到的sshUserPrivateKey语法依赖Credentials Plugin和SSH Credentials Plugin,既然能正常编写并执行这段代码,说明这两个插件已经安装,无需额外添加。
keyFileVariable: 'key_file_var'的作用
- 这个参数的作用是让Jenkins自动把你在凭证中心存储的SSH私钥,写入一个临时文件,然后将该临时文件的完整路径赋值给
key_file_var环境变量。 - 不需要你预先创建这个文件,Jenkins会全权处理文件的创建、私钥写入,在
withCredentials代码块执行完毕后,还会自动删除这个临时文件,避免私钥泄露。
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

