139

我想让 Jenkins 自动从我托管在 Github 上的私有存储库中获取数据。但我不知道如何完成这项任务.. 尝试了文档,为 jenkins 用户生成 ssh-key,我所能看到的只是:“无法克隆 repo”。我检查了 URL - 它们是有效的。

任何线索,也许你知道一些描述这种东西的文档/博客/任何东西?

4

7 回答 7

139

也许 GitHub 对部署密钥的支持正是您想要的?引用该页面:

什么时候应该使用部署密钥?

很简单,当您的服务器需要对单个私有存储库进行拉取访问时。此密钥直接附加到存储库,而不是附加到个人用户帐户。

如果这就是您已经尝试过的并且它不起作用,您可能希望使用正在使用的 URL、密钥文件的名称和位置等的更多详细信息来更新您的问题。


现在是技术部分:如何在 Jenkins 中使用 SSH 密钥?

如果你有一个jenkinsunix 用户,你可以将你的部署密钥存储在~/.ssh/id_rsa. 当 Jenkins 尝试通过 ssh 克隆 repo 时,它将尝试使用该密钥。

在某些设置中,您无法将 Jenkins 作为自己的用户帐户运行,也可能无法使用默认的 ssh key location ~/.ssh/id_rsa。在这种情况下,您可以在不同的位置创建一个密钥,例如~/.ssh/deploy_key,并配置ssh为将其与 中的条目一起使用~/.ssh/config

Host github-deploy-myproject
    HostName       github.com
    User           git
    IdentityFile   ~/.ssh/deploy_key
    IdentitiesOnly yes

因为您使用所有对所有 Github 存储库进行身份验证git@github.com并且您不希望将上述密钥用于与 Github 的所有连接,所以我们创建了一个主机别名github-deploy-myproject。您的克隆 URL 现在变为

git clone github-deploy-myproject:myuser/myproject

这也是您将存储库 URL放入 Jenkins 的内容。

(请注意,您不能ssh://放在前面以使其正常工作。)

于 2011-03-06T18:07:12.990 回答
37

让这对我有用的一件事是确保它github.com~jenkins/.ssh/known_hosts.

于 2011-08-05T05:36:15.870 回答
13

如果您需要 Jenkins 访问超过 1 个项目,您将需要:
1. 将公钥添加到一个 github 用户帐户
2. 将此用户添加为所有者(以访问所有项目)或作为每个项目中的协作者。

一个系统用户的许多公钥将不起作用,因为 GitHub 将找到第一个匹配的部署密钥,并将发送回错误,例如“错误:对用户/repo2 的权限拒绝用户/repo1”

http://help.github.com/ssh-issues/

于 2012-01-31T14:52:31.610 回答
7

Jenkins 在系统上创建一个用户 Jenkins。必须为 Jenkins 用户生成 ssh 密钥。以下是步骤:

sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen

现在您可以使用 SSH 密钥在 Jenkins 仪表板上添加凭据创建 Jenkins 凭据

选择此选项

私钥:来自 Jenkins master ~/.ssh

于 2016-04-09T03:21:09.220 回答
1

我在 gitlab 上遇到了类似的问题。原来我已经限制了允许通过 ssh 登录的用户。这不会影响 github 用户,但如果人们最终因为 gitlab(或类似)问题而来到这里,请确保您添加git到以下AllowUsers设置中/etc/ssh/sshd_config

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git
于 2013-05-23T20:47:08.880 回答
1

另一种选择是使用GitHub 个人访问令牌

  • 转到https://github.com/settings/tokens/new
  • 添加回购范围
  • 在 Jenkins 中,添加一个GitHub
  • 使用存储库 HTTPS URL
  • 添加 git repo 的HTTPS URL(不是SSH的,例如https://github.com/my-username/my-project.git
  • 添加凭据
    • 种类:用户名加密码
    • 用户名:GitHub 用户名
    • 密码:您在 GitHub 上创建的个人访问令牌
    • ID:类似的东西github-token-for-my-username

我在 Jenkins 版本上对此进行了测试。2.222.1 和 Jenkins GitHub 插件 1.29.5 以及私有 GitHub 存储库。

于 2020-06-05T10:46:57.563 回答
-1

sergey_mo 答案的替代方法是在 jenkins 服务器上创建多个 ssh 密钥。

(尽管正如 sergey_mo 回答的第一位评论者所说,这最终可能比管理单个密钥对更痛苦。)

于 2012-03-04T23:37:13.560 回答