使用Jenkins提取PUBLIC GitHub存储库时,权限被拒绝(公钥);私人回购取得罚款

时间:2019-01-27 12:42:25

标签: git jenkins ssh private-key

我有一个CI设置,如下所示:

  • 私有主存储库(shoot-for-the-moon

  • 私有子模块(ShooterBase

  • 公共子模块(UnrealUtilityAI

所有内容都托管在GitHub上。 Jenkins能够克隆这两个私有仓库,但在克隆公共仓库时却失败了,与您想像的完全相反。我在Windows上运行Jenkins,并且Jenkins作为Windows服务运行(没有专用的Jenkins用户)。私钥没有与之关联的密码短语;这是我刚开始遇到此问题时产生的。

这是日志:

04:23:05  > C:\Program Files\Git\cmd\git.exe rev-parse --is-inside-work-tree # timeout=10
04:23:05 Fetching changes from the remote Git repository
04:23:05  > C:\Program Files\Git\cmd\git.exe config remote.origin.url git@github.com:Jay2645/shoot-for-the-moon.git # timeout=10
04:23:06 Fetching upstream changes from git@github.com:Jay2645/shoot-for-the-moon.git
04:23:06  > C:\Program Files\Git\cmd\git.exe --version # timeout=10
04:23:06 using GIT_SSH to set credentials A private key with no passphrase.
04:23:06  > C:\Program Files\Git\cmd\git.exe fetch --tags --force --progress git@github.com:Jay2645/shoot-for-the-moon.git +refs/heads/*:refs/remotes/origin/* # timeout=180
04:23:07  > C:\Program Files\Git\cmd\git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10
04:23:07  > C:\Program Files\Git\cmd\git.exe rev-parse "refs/remotes/origin/origin/master^{commit}" # timeout=10
04:23:07 Checking out Revision da16645fd46e977a876986f4005f5e7b8d5be57e (refs/remotes/origin/master)
04:23:07  > C:\Program Files\Git\cmd\git.exe config core.sparsecheckout # timeout=10
04:23:08  > C:\Program Files\Git\cmd\git.exe checkout -f da16645fd46e977a876986f4005f5e7b8d5be57e
04:23:09 Commit message: "Updated packaging settings."
04:23:09  > C:\Program Files\Git\cmd\git.exe rev-list --no-walk da16645fd46e977a876986f4005f5e7b8d5be57e # timeout=10
04:23:09  > C:\Program Files\Git\cmd\git.exe remote # timeout=10
04:23:09  > C:\Program Files\Git\cmd\git.exe submodule init # timeout=10
04:23:10  > C:\Program Files\Git\cmd\git.exe submodule sync # timeout=10
04:23:11  > C:\Program Files\Git\cmd\git.exe config --get remote.origin.url # timeout=10
04:23:11  > C:\Program Files\Git\cmd\git.exe submodule init # timeout=10
04:23:12  > C:\Program Files\Git\cmd\git.exe config -f .gitmodules --get-regexp ^submodule\.(.+)\.url # timeout=10
04:23:12  > C:\Program Files\Git\cmd\git.exe config --get submodule.Plugins/ShooterBase.url # timeout=10
04:23:12  > C:\Program Files\Git\cmd\git.exe config -f .gitmodules --get submodule.Plugins/ShooterBase.path # timeout=10
04:23:12  > C:\Program Files\Git\cmd\git.exe submodule update Plugins/ShooterBase # timeout=180
04:23:14  > C:\Program Files\Git\cmd\git.exe config --get submodule.Plugins/UnrealUtilityAI.url # timeout=10
04:23:14  > C:\Program Files\Git\cmd\git.exe config -f .gitmodules --get submodule.Plugins/UnrealUtilityAI.path # timeout=10
04:23:14  > C:\Program Files\Git\cmd\git.exe submodule update Plugins/UnrealUtilityAI # timeout=180
04:23:17 hudson.plugins.git.GitException: Command "C:\Program Files\Git\cmd\git.exe submodule update Plugins/UnrealUtilityAI" returned status code 1:
04:23:17 stdout: 
04:23:17 stderr: Cloning into 'D:/CI/Plugins/UnrealUtilityAI'...
04:23:17 git@github.com: Permission denied (publickey).
04:23:17 fatal: Could not read from remote repository.
04:23:17 
04:23:17 Please make sure you have the correct access rights
04:23:17 and the repository exists.
04:23:17 fatal: clone of 'git@github.com:Jay2645/UnrealUtilityAI.git' into submodule path 'D:/CI/Plugins/UnrealUtilityAI' failed

起初我以为这是一件很有趣的事,它带有权限或很奇怪,所以我尝试在通用Windows命令提示符下运行完全相同的命令,只添加引号并删除注释:

C:\Users\jayst>cd /d D:\CI

D:\CI>"C:\Program Files\Git\cmd\git.exe" submodule update Plugins/UnrealUtilityAI
Cloning into 'D:/CI/Plugins/UnrealUtilityAI'...
Submodule path 'Plugins/UnrealUtilityAI': checked out '1fbb5cea8a3485c902e4e159b410fb921e3e89a7'

在常规命令提示符下工作正常!唯一的区别是我缺少Git配置命令(C:\Program Files\Git\cmd\git.exe config -f .gitmodules --get submodule.Plugins/ShooterBase.path等),直到我发表这篇文章时,我什至没有注意到它-但是即使那样,我也不知道它们是否导致了问题或如何禁用它们,即使它们是引起问题的原因。

老实说,我很困惑-感觉就像我在落后地区。我唯一的猜测是,詹金斯在从私有存储库切换到公共存储库时会以某种方式设置环境变量,这很麻烦。我尝试将GIT_SSH环境变量设置为<PATH_TO_SSH_EXE> -i <PATH_TO_MY_PRIVATE_KEY>,但不确定是否配置正确,因为我收到一条消息,提示它找不到我的私钥(我已经尝试了Windows和Unix风格的路径。

这让我发疯了;我可以通过进入命令提示符轻松地修复它,但是在我手动修复它之前,如果构建失败,这是非常痛苦的。我不知所措。有帮助吗?

0 个答案:

没有答案