我Github Organisation在詹金斯有一件东西。在存储库的根目录中,我Jenkinsfile看起来像这样:
Github Organisation
Jenkinsfile
node { def jenkinsCredsId = 'xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb' stage 'Checkout' checkout scm // I also tried the following: // checkout scm: [$class: 'GitSCM', source: 'ssh://git@github.com:MY_ORGANISATION/jenkins-testing-temp.git', clean: true, credentialsId: jenkinsCredsId] stage 'Build' // generate some artefact (dist.zip) stage 'Release' sshagent([jenkinsCredsId]) { sh ''' git remote -v // show remotes ssh-add -l // show currently loaded ssh keys fingerprints git fetch --all --tags // IT FAILS HERE CURRENT_BUILD_TAG="some_build/${BUILD_NUMBER}" git tag ${CURRENT_BUILD_TAG} git push --tags github-release release \ --security-token ${GITHUB_RELEASE_TOKEN} \ --user MY_ORGANIZATION \ --repo MY_REPO \ --tag ${CURRENT_BUILD_TAG} \ --name ${CURRENT_BUILD_TAG} github-release upload \ --security-token ${GITHUB_RELEASE_TOKEN} \ --user MY_ORGANIZATION \ --repo MY_REPO \ --tag ${CURRENT_BUILD_TAG} \ --name ${CURRENT_BUILD_TAG} \ --file dist.zip ''' }
这里有几行用于测试存储库访问的行,并且当前由于git fetch部分错误而失败:
致命:无法读取“的用户名 ”https://github.com ‘:没有此类设备或地址
git remote -v上面的命令Jenkinsfile输出 类似的内容origin https://github.com/MY_ORGANIZATION/MY_REPO。
事实证明,该Github Organization项目只使用HTTPS证书的Scan credentials(如上图中)。
Github Organization
HTTPS
Scan credentials
解决方案是点击Advanced按钮,然后ssh在Checkoutcredentials下拉列表中实际选择一个凭证,而不是默认值- Same as scan credentials -。
Advanced
ssh
Checkoutcredentials
- Same as scan credentials -
高级视图签出凭证
请注意,带有星号的凭据是用户/密码条目,这就是我发现 问题的方式。
这样,checkout scm将使用ssh代替,并且该sshagent([jenkinsCredsId]) {块将按预期工作,让您可以根据自己的权利创建标签,提取和推送。:)
checkout scm
sshagent([jenkinsCredsId])