繁体   English   中英

Jenkins:无法连接到存储库

[英]Jenkins: Failed to connect to repository

我正在尝试在 github 存储库上连接 jenkins。

当我指定 Repo URL jenkins 返回以下错误消息:

无法连接到存储库:命令“git ls-remote -h git@github.com:adolfosrs/jenkins-test.git HEAD”返回状态代码 128:stdout:stderr:主机密钥验证失败。 致命:无法从远程存储库读取。 请确保您拥有正确的访问权限并且存储库存在。

当使用 HTTPS:// Url jenkins 返回:

无法连接到存储库:无法连接到https://github.com/adolfosrs/jenkins-test.git (状态 = 407)

我可以在运行 jenkins 的同一台机器上成功克隆 repo,我还运行git ls-remote -h git@github.com:adolfosrs/jenkins-test.git HEAD命令。 所以我在 github 有正确的 SSH。

问题是我以某种方式使用 root 用户创建了 ssh 文件。 所以文件所有者是root。

解决方案只是将所有权更改为 jenkins 用户。

chown jenkins id_rsa.pub 
chown jenkins id_rsa

我有同样的问题。 我在 Mac 上解决它的方法是这样的:

  1. 切换到 jenkins 用户 (sudo -iu jenkins)
  2. 运行:ssh-keygen(注意 - 您现在正在为 jenkins 用户创建 ssh 密钥对。您应该看到如下内容:输入用于保存密钥的文件 (/Users/Shared/Jenkins/.ssh/id_rsa):
  3. 一直按 Enter 键获取默认值直到结束
  4. 在您的终端上运行 Jenkins 错误消息中显示的命令(例如:“git ls-remote -h git@github.com:adolfosrs/jenkins-test.git HEAD”)
  5. 系统会询问您是否要继续。 说是
  6. Github 存储库将添加到您的 known_hosts 文件中:/Users/Shared/Jenkins/.ssh/
  7. 返回 Jenkins 门户并尝试您的 Github SSH url
  8. 它应该工作。 祝你好运

这是一个非常棘手的问题 - 即使您熟悉 https 与证书的工作方式(OTOH,如果您看到我的解决方法,这似乎非常合乎逻辑:)

如果您想从 shell 通过 http(s) 连接到 GIT 存储库,您将确保将公共证书(作为文件)存储在您的机器上。 然后您将该证书添加到您的 GIT 配置中

git config [--global] http.sslCAInfo“证书”

(用 PEM 文件的完整路径/名称替换“证书”:)

对于 shell 使用,您还可以提供一个“.netrc”来证明您的 http-server 登录凭据。 完成后,您将能够执行“git clone https://...”而无需任何交互式凭据配置。

然而,对于 Jenkins-service 来说有点不同......这里,jenkins 进程需要知道服务器证书 - 它不使用 shell 设置(在全局 git 配置文件 '.gitconfig ') :P

我需要做的是在 Jenkins 的启动选项中添加另一个参数。

... -Djavax.net.ssl.trustStore="keystore" ...

(用完整的路径/名称替换“keystore”,如下所述:)

secure :) and refer to it with the '-Djavax.net.ssl.trustStore=' parameter.现在将持有证书的网络服务器的密钥库文件复制到某个路径(我知道这是一个肮脏的黑客,安全:) 并使用“-Djavax.net.ssl.trustStore=' 参数引用它。

现在 Jenkins 服务将接受来自通过 https 提供存储库的网络服务器的证书。 配置 GIT 存储库 URL,如

https://yourserver.com/your-repositorypath

请注意,您仍然需要 jenkins-user 主文件夹下的“.netrc”才能登录!!! 因此,我所描述的将被视为一种解决方法......直到提供了一个正常工作的凭据帮助程序插件。 恕我直言,这个插件(在其当前版本 1.9.4 中)有问题。

无论我尝试什么,我都无法让凭证助手从 Jenkins 工作:( 充其量我看到了一些关于不可访问的临时凭证助手文件等的错误。你可以在 Jenkins 中看到很多关于它的错误报告JIRA,但没有修复。

所以如果有人让它正常工作,请分享知识......


PS:使用以下版本的Jenkins插件:

凭据插件 1.9.4、GIT 客户端插件 1.6.1、Jenkins GIT 插件 2.0.1

当我尝试将 Windows 服务器中的 jenkins 与我的私人 GIT 存储库连接时,我遇到了类似的问题。 以下是Jenkins作业源码管理部分返回的错误

无法连接到存储库:命令“git.exe ls-remote -h ssh://git@my_server/repo.git HEAD”返回状态代码 128: stdout: stderr: Load key "C:\\Windows\\TEMP\\ssh4813927591749610777. key": 无效格式 git@my_server: 权限被拒绝 (publickey)。 致命:无法从远程存储库读取。

请确保您拥有正确的访问权限并且存储库存在。

抛出此错误是因为 jenkins 无法从其用户目录中选择私有 ssh 密钥。 我通过以下方式解决了这个问题

第1步

在jenkins作业中,在Source Code Management下填写以下信息

存储库

存储库 URL:ssh://git@my_server/repo.git
凭据:-无-

第2步

在我的设置中 jenkins 是在本地系统帐户下运行的,所以用户目录是C:\\Windows\\System32\\config\\systemprofile (这是这个设置中不是很明显的重要事情)。

现在通过git bash shell 使用ssh-keygen -t rsa -C "key label"创建 ssh 私钥和公钥。 ssh 私钥和公钥位于您登录用户目录的 .ssh 目录下。 只需复制 .ssh 文件夹并将其粘贴到C:\\Windows\\System32\\config\\systemprofile

第 3 步

将您的公钥添加到您的 GIT 服务器帐户。 运行 jenkins 作业,现在您应该能够通过 jenkins 的 ssh 连接到 GIT 帐户。

在我们的例子中, git必须安装在 Jenkins 服务器上。

检查以下设置。 那总是对我有用。

詹金斯配置:

1) 检查是否正确指定了 git 可执行文件

2)提供SSH仓库链接git@blahblah

3) 在凭据下 >> 选择用户名和身份验证密钥(转到您的服务器,生成 SSH 密钥 ssh-keygen... 将密钥复制到 JENKINS_HOME/,ssh)您应该能够从 Jenkins 连接到您的 GIT 存储库

在 Ubuntu 上,将id_rsaid_rsa.pub文件放在/var/lib/jenkins/.ssh

让詹金斯拥有它们sudo chown -R jenkins /var/lib/jenkins/.ssh/

确保在 GitHub(或类似)中将 Jenkins 密钥添加为具有 RW 访问权限的部署密钥 - 为此使用id_rsa.pub密钥。

现在一切都应该与 SCM 同步插件配合使用。

Jenkins 以另一个用户的身份运行,而不是您的普通登录名。 所以,这样做来解决ssh问题:

  1. 以 jenkins su jenkins身份登录(您可能首先必须执行sudo passwd jenkins才能为 jenkins 设置密码。我找不到默认值...)
  2. 生成 ssh 密钥对: ssh-keygen
  3. 将公钥( id_rsa.pubid_rsa.pub到您的 github 帐户(或任何地方)
  4. 将 repo 克隆为 jenkins ,以便将主机添加到 jenkins known_hosts ,这是必要的。 现在,您可以根据需要再次删除克隆的存储库。

让我在这里补充一点,可能会产生此类错误的一个非常小的问题是存储库 URL 中缺少.git扩展名。 确保输入以.git结尾的完全限定 URL。 我使用 bitbucket,所以我要做的是单击“克隆”,然后会自动为我生成完全限定的 URL。 github 也有类似的方法。

就我而言,我使用 root 用户编辑了 known_hosts 文件。 因此它将文件所有权更改为 root 并且 jenkins 用户开始在克隆 git 图像时抛出“git@github.com:xxxxxx/xxxx.git HEAD”返回状态代码 128: stdout: stderr: Host key verification failed” 错误。恢复所有权解决了这个问题。

确保将 RSA 主机密钥和 bitbucket 服务器的 IP 添加到“已知主机”文件中。 内容应该看起来像

bitbucket.org,xx.xx.xx.xx ssh-rsa host_key

请记住将/var/lib/jenkins/.ssh/所有文件的所有权更改为 Jenkins

到目前为止这里没有提到,但这也可以来自 stash。 我们遇到了同样的问题,我们问题的根本原因是我们用于 jenkins 的 stash 实例确实崩溃了。 在我们的案例中,重新启动 stash 解决了这个问题。

就我而言,我通过以下方式解决了这个问题

  • 单击“凭据”文本旁边的“添加”按钮
  • 添加凭据( loginpassword
  • 在“添加”按钮左侧的弹出菜单上选择这些凭据
  • 等待几秒钟

我的环境是 Jenkins 安装在 Windows 中。 UI 问题是为什么将警告放在解决它的工具之前。

我在以下步骤中解决了同样的问题:

  1. 在 CMD 行上运行 > git.exe ls-remote URL
  2. 然后提供 git 凭据:您将找到 git 存储库的所有负责人
  3. 返回Jenkins,在SCM中提供你的git仓库URL,然后在credentials中添加你的Git repo的凭证。

如果您使用的是 dockerized Jenkins 和 github,请按照以下步骤操作。

  1. 使用 docker 命令访问 Jenkins 容器docker exec -it your-container-id bash
  2. 然后使用命令ssh-keygen生成 ssh 密钥回车直到提示完成。
  3. 使用命令cat ~/.ssh/id_rsa.pub访问您的公钥
  4. 复制显示的密钥,然后将其添加到您的 github,如下图所示。 在此处输入图像描述

对于 jenkins 通过 SSH 进行通信:

  1. 我们go下的用户jenkins:su jenkins(第一次需要给他设置密码:sudo passwd jenkins)
  2. 在根目录下创建 jenkins'a.ssh: mkdir.ssh
  3. 创建 SSH 个密钥:ssh-keygen
  4. 将.pub密钥上传到GitHub,将私钥上传到项目中
  5. 在 GitHub 上克隆 SSH 下的任何存储库:git clone git@github.com:username/forJenkins.git 全部完成!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM