我在Windows上使用git与Jenkins有问题,我可以使用ssh凭据从BitBucket获取git存储库但是当它尝试获取同一帐户上的子模块存储库时,我获得了权限异常。
从git@bitbucket.org获取上游变更:mycomp / at.git
C:\ CI \ Git \ bin \ git.exe --version 使用GIT_SSH设置凭证Bitbucket密钥 C:\ CI \ Git \ bin \ git.exe fetch --tags --progress git@bitbucket.org:mycomp / at.git + refs / heads / :refs / remotes / origin / C:\ CI \ Git \ bin \ git.exe rev-parse“origin / ci ^ {commit}” 检查修订版a079842300ba7fc9e6f4e7182c94af2cfc3af0ba(origin / ci) C:\ CI \ Git \ bin \ git.exe config core.sparsecheckout C:\ CI \ Git \ bin \ git.exe checkout -f a079842300ba7fc9e6f4e7182c94af2cfc3af0ba C:\ CI \ Git \ bin \ git.exe rev-list a079842300ba7fc9e6f4e7182c94af2cfc3af0ba C:\ CI \ Git \ bin \ git.exe远程 C:\ CI \ Git \ bin \ git.exe子模块初始化 C:\ CI \ Git \ bin \ git.exe子模块同步 C:\ CI \ Git \ bin \ git.exe config --get remote.origin.url C:\ CI \ Git \ bin \ git.exe子模块更新 致命:命令“C:\ CI \ Git \ bin \ git.exe子模块更新”返回状态码1: 标准输出: stderr:克隆到'include / portal_air'...... 权限被拒绝(publickey)。 致命的:无法从远程存储库读取。
Please make sure you have the correct access rights
and the repository exists.
Clone of 'git@bitbucket.org:mycomp/portal_air.git' into submodule path 'include/portal_air' failed
hudson.plugins.git.GitException: Command "C:\CI\Git\bin\git.exe submodule update" returned status code 1:
stdout:
stderr: Cloning into 'include/portal_air'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Clone of 'git@bitbucket.org:mycomp/portal_air.git' into submodule path 'include/portal_air' failed
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1406)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$400(CliGitAPIImpl.java:87)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$6.execute(CliGitAPIImpl.java:741)
at hudson.plugins.git.extensions.impl.SubmoduleOption.onCheckoutCompleted(SubmoduleOption.java:77)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:908)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1414)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:671)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:580)
at hudson.model.Run.execute(Run.java:1684)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:231)
答案 0 :(得分:3)
是的,这是克隆项目及其子模块时遇到的问题。
我使用https代替git @来克隆repos,git scm插件只将通过jenkins传递的凭据应用于主模块而不是子模块。 要解决这个问题,我必须运行一个存储凭证的进程,并将其传递给任何需要身份验证的git操作。像这样 http://www.scmtechblog.net/2014/12/git-authentication-for-automation-script.html
现在,您正试图通过git @访问并仍然获得权限被拒绝,请您确保该帐户在您添加了ssh密钥的子模块存储库中具有正确的访问权限。
答案 1 :(得分:0)
使用与父存储库相同的凭据和协议的子模块身份验证现在支持Jenkins git插件。 2016年9月10日发布的Jenkins git插件3.0.0中添加了支持。
作业定义页面的子模块配置部分("附加行为">"高级子模块行为")"现在包含一个复选框"使用来自父存储库的默认远程的凭证"。检查该框和父存储库中的凭据是否将用于子模块。
请注意,父存储库和子模块的存储库克隆协议必须相同(ssh或https),否则父资源不能与子模块存储库一起使用。