【问题标题】:How to access a remote Git repository in Jenkins using aliases?如何使用别名访问 Jenkins 中的远程 Git 存储库?
【发布时间】:2016-04-06 23:59:34
【问题描述】:

短版

我正在使用别名来连接我的远程 Git 存储库。它可以工作,但是当我将这样的存储库添加到 Jenkins 时,它无法访问存储库并显示错误:

无法连接到存储库:命令“git -c core.askpass=true ls-remote -h git@github.com-foo:myaccount/myrepository.git HEAD" 返回状态码 128:stdout:stderr:ssh:无法解析 主机名 github.com-foo:名称或服务未知致命:无法 从远程存储库中读取。

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


详细的问题描述

为了将commit/push 编码为不同的用户,我使用了别名:

C:\Users\myusername\.ssh\config

...

#github.com-foo account
Host github.com-foo
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_foo

#github.com-bar account
Host github.com-bar
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_bar

...

然后代替

git clone git@github.com:myaccount/myrepository.git

我只是使用

git clone git@github.com-foo:myaccount/myrepository.git

.ssh 目录可作为共享文件夹从我的本地 VM 访问,因此也可以在 VM 上使用我的凭据。

一切正常。

现在我在 VM 上安装了 Jenkins,并希望配置与存储在 GitHub 上的远程存储库的连接。我做了什么:

  1. 凭据:Jenkins -> Credentials -> [link] Global credentials (unrestricted) -> [radio button] Enter directly -> [textarea] Key -> added -> [button] Save

  2. Git 插件:Jenkins -> Configuration -> [section] Git plugin -- 电子邮件和姓名设置:

  1. 项目 Git 设置:[project] -> Configuration -> [section] Source Code Management -> [section] Git -- 存储库 URL 和凭据:

如屏幕截图所示,连接失败。

为什么它不工作以及如何让它工作,以便使用别名连接 Jenkins 中的远程 Git 存储库?

【问题讨论】:

    标签: git github jenkins ssh domain-aliasing


    【解决方案1】:

    您需要为jenkins 提供ssh 配置。文件

    C:\Users\myusername\.ssh\config
    

    适用于您的用户,但您还需要 jenkins 用户的别名,在其下运​​行的是 jenkins。找到jenkins 用户的主目录并在其中添加文件.ssh\config

    那么您可能还需要在其主目录中为jenkins 复制/创建不同的ssh 密钥,因为您无法从jenkins 用户访问。

    在此之后,应设置文件评估权限。 chown -R jenkins /var/lib/jenkins/.ssh可以轻松搞定。

    在全局 Jenkins 设置中,可以将私钥设置为“来自 Jenkins master ~/.ssh”:

    【讨论】:

    • 感谢您的回答!我没有将我的 SSH 密钥复制到 Jenkins .ssh 目录——我将密钥文件内容直接添加到了配置中。但我找到了 Jenkins 主文件夹,并将$JENKINS_HOME/.ssh/known_hosts 替换为~/.ssh/known_hosts 的符号链接。我还在 SSH config 文件中添加了一个符号链接:ln -s ~/.ssh/config /var/lib/jenkins/.ssh/config。尽管如此,我仍然遇到同样的连接错误。
    • 符号链接可能还不够,因为jenkins 用户可能无法访问它们。
    • 你是对的。好的,我试过这个:我将known_hostsconfig 和(以防万一)密钥文件id_rsa_fooid_rsa_foo.pub 复制到/var/lib/jenkins/.ssh/。在此之后,我重新启动了 Jenkins。但它没有帮助 - 仍然是同样的错误。
    • jenkins 甚至可能会忽略 ssh 配置。为什么不直接使用存储在 jenkins 中的凭据和 github.com 主机名?
    • 有效!我必须将我的私人 SSH 密钥文件和 SSH config 复制到 Jenkins 主目录。在此之后我遇到了权限问题,但它们已被chown -R jenkins /var/lib/jenkins/.ssh 解决。非常感谢您的帮助!
    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多