Jenkins git凭证在阶段中起作用,而不是在下一个阶段中起作用

时间:2019-05-17 08:58:08

标签: jenkins jenkins-pipeline

我有以下管道文件:

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提交消息:“测试提交”

  

1 个答案:

答案 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')
}