我有以下管道文件:
contain
第1阶段和第2阶段可以完美运行。第三阶段失败,权限被拒绝。
我发现这很奇怪,因为在阶段2中,我已经可以看到上一次提交的内容,因此表明凭据确实起作用。他们为什么不进行第3阶段的工作?
这是我看到的错误:
git clone --bare git@bitbucket.test/test.git tfs克隆 进入裸存储库“ tfs” ...权限被拒绝(公钥)。致命: 无法从远程存储库读取。
在第二阶段,我看到:
git config core.sparsecheckout#timeout = 10 git checkout -f 30f1a7d1b77ef64e1cd44eab11a6ef4541c23b43 git branch -a -v --no-abbrev#超时= 10 git branch -D主站#超时= 10 git checkout -b master 30f1a7d1b77ef64e1cd44eab11a6ef4541c23b43提交消息:“测试提交”
答案 0 :(得分:2)
第1阶段-您在Shell中向本地git添加了一些设置
第2阶段-您指向要使用的实际凭据并使用Jenkins插件-这样就可以了
Satge 3-回到shell,jenkins没有提供任何凭据,因此上下文是slave / local jenkins用户。
解决方案是将withCredentials
用于用户名和密码,将sshagent(credentials...)
用于私钥
// credentialsId here is the credentials you have set up in Jenkins for pushing
// to that repository using username and password.
withCredentials([usernamePassword(credentialsId: 'git-pass-credentials-ID', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
sh("git tag -a some_tag -m 'Jenkins'")
sh('git push https://${GIT_USERNAME}:${GIT_PASSWORD}@<REPO> --tags')
}
// For SSH private key authentication, try the sshagent step from the SSH Agent plugin.
sshagent (credentials: ['git-ssh-credentials-ID']) {
sh("git tag -a some_tag -m 'Jenkins'")
sh('git push <REPO> --tags')
}