Jenkins多任务Job-Full调用Copy_Configs_Pipeline时Git权限报错128
解决方案:Jenkins上游任务调用子Pipeline时Git公钥权限拒绝问题
1. 确保上游任务传递正确的凭证
当Job-Full调用Copy_Configs_Pipeline时,必须显式传递Git所需的SSH凭证,不能依赖子任务的默认配置:
- 如果Job-Full是自由风格项目,在调用子任务的步骤中勾选"传递凭证"选项,并指定对应的Git SSH凭证ID。
- 如果Job-Full是Pipeline项目,调用子任务时要在
build步骤中声明凭证:build job: 'Copy_Configs_Pipeline', parameters: [], wait: true, propagate: true, credentialsId: '你的Git SSH凭证ID'
2. 子Pipeline明确绑定Git凭证
单独运行正常不代表被调用时上下文一致,必须在子Pipeline的Git拉取步骤中硬指定凭证ID,避免依赖节点全局密钥:
checkout([ $class: 'GitSCM', branches: [[name: '*/main']], userRemoteConfigs: [[ url: 'git@你的仓库地址', credentialsId: '你的Git SSH凭证ID' ]] ])
或者用withCredentials包裹Git操作,强制加载指定凭证:
withCredentials([sshUserPrivateKey(credentialsId: '你的Git SSH凭证ID', keyFileVariable: 'SSH_KEY')]) { sh 'export GIT_SSH_COMMAND="ssh -i $SSH_KEY" && git clone git@你的仓库地址' }
3. 验证节点临时目录权限
Jenkins拉取Git代码时会在临时目录生成SSH密钥文件,确保Jenkins运行用户对临时目录(如/tmp或工作目录)有读写权限。可以在子Pipeline开头加调试步骤确认:
sh 'whoami && ls -ld /tmp && ls -ld $WORKSPACE'
如果权限不足,调整目录权限,或在Jenkins全局配置中修改临时目录路径到有权限的目录。
4. 调试SSH凭证加载状态
在子Pipeline中添加SSH测试步骤,确认凭证是否正确加载:
sh 'ssh -T git@你的仓库地址'
如果测试失败,检查:
- SSH凭证的私钥是否无密码(或凭证中已配置密码)
- 公钥已添加到Git仓库的权限列表
SSH_AUTH_SOCK环境变量是否存在(凭证绑定成功的标志)
5. 统一任务运行节点
如果Job-Full和Copy_Configs_Pipeline指定了不同的运行节点,节点间的凭证配置可能不一致。要么让两个任务使用同一节点,要么确保子任务的节点已配置好对应的Git凭证。
内容的提问来源于stack exchange,提问作者Dmytro Ivanov
相关产品推荐
相关产品推荐

