问题
我正在尝试在Jenkins中构建应用程序,它在Github上的一个私有仓库中,还有一个私有子模块。
我可以通过设置凭据来在Jenkins中克隆私有存储库,但是Jenkins无法克隆子模块,这是构建失败的输出:
Started by an SCM change Building in workspace /var/lib/jenkins/jobs/Project/workspace Fetching changes from the remote Git repository Fetching upstream changes from git@github.com:user/repogit using GIT_SSH to set credentials Checking out Revision 9cc99b67cc676d0ea8ccd489a8327f5c6dbb8d7f (origin/branch) [workspace] $ /bin/sh -xe /tmp/hudson2710403018107019432.sh + git submodule update --init --recursive Initialized empty Git repository in /var/lib/jenkins/jobs/repository/submodule/.git/ ERROR: Repository not found. fatal: The remote end hung up unexpectedly Clone of 'git@github.com:user/submodule.git' into submodule path 'repository/submodule/' failed Build step 'Execute shell' marked build as failure Discard old builds... #156 is removed because status FAILURE is not to be kept Publishing Clover coverage report... No Clover report will be published due to a Build Failure Sending e-mails to: Finished: FAILURE
这就是我在詹金斯试图做的
git submodule update --init --recursive
所有这些都会导致错误,指出Jenkins找不到子模块的存储库。
关于如何解决这个问题的任何想法?
(用户名,路径和存储库是正确的,我只是将它们更改为在此处发布)
解决了。在我的凭证中,我使用的是直接SSH密钥(选项“直接输入”),而不是放入文件中。
我只是将密钥(公共密钥和私有密钥)放在〜/ .ssh中,并将凭据更改为选项“来自Jenkins主〜/ .ssh”。
问题在于,子模块未使用我为主存储库指定的凭据,而是试图使用默认的ssh密钥(.ssh / id_rsa)。
另一种解决方案是将-i my_key传递给git子模块步骤(仅当您的密钥不在默认路径(〜/ .ssh / id_rsa)中时才需要此命令)
另外,不要忘记为您的密钥提供正确的权限,在我的情况下,我必须:
chown apache ~/.ssh/id_rsa* chmod 700 ~/.ssh/id_rsa*