【问题标题】:EC2/AWS, Jenkins, Git, SSHEC2/AWS、詹金斯、Git、SSH
【发布时间】:2012-05-13 13:44:09
【问题描述】:

[更新2] 那么当我从 CLI 运行 git 时它会提示我输入密码是否可以?我可以使用 ssh 私钥的密码访问 github 服务器,但在 Jenkins 中从未提示我这样做或被要求提供它。 [/更新2]

[更新] 是的。我在 EC2 上的 ubuntu 实例上运行它。我在 /var/lib/jenkins/.ssh 中生成了 ssh 密钥,这是 Jenkins 创建的用户。我在 Jenkins 中设置了安全选项以使用 Unix 用户/组。 [/更新]

我正在尝试让 Jenkins 从 git (github) 中提取。我收到以下错误:

hudson.plugins.git.GitException: Could not clone [my personal repo]
    at hudson.plugins.git.GitAPI.clone(GitAPI.java:245)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1121)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1063)
    at hudson.FilePath.act(FilePath.java:832)
    at hudson.FilePath.act(FilePath.java:814)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1063)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1218)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:581)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:470)
    at hudson.model.Run.run(Run.java:1434)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:239)
Caused by: hudson.plugins.git.GitException: Command "git clone --progress -o origin git@github.com:bobbylo/Verbify.git /var/lib/jenkins/.jenkins/jobs/build_dev/workspace" returned status code 128:
stdout: Initialized empty Git repository in /var/lib/jenkins/.jenkins/jobs/build_dev/workspace/.git/

stderr: Permission denied (publickey).
fatal: The remote end hung up unexpectedly

我已经阅读了 Github ssh 教程。我在 EC2 实例上生成了一个私钥。将其放入用户 jenkins 的 .ssh 目录中。将公钥放在 Github 上(尝试部署密钥 + 普通 SSH 密钥)。我已经验证我可以进行 git over-the-wire 操作(拉取、克隆等),并且它可以通过 CLI 与用户一起工作。我已经为用户正确设置了 unix 用户/组权限(事实上,当我更改它时,我在 Jenkins 的控制台日志中看到错误日志更改)。当我尝试使用 Jenkins git 插件或执行 Jenkins shell 命令时,出现上述错误。

我已经阅读了 ssh-agent 和 ssh-add 以及如何将其绑定到 shell 启动脚本,这样您就不需要为每个命令输入密码——我不确定这是否相关。

否则我不确定我还能尝试什么。任何提示都会有所帮助!

【问题讨论】:

  • 我认为您使用的是 Linux?如果是这样,那么 Jenkins 可能以用户“jenkins”的身份运行。用户“jenkins”是否有权访问必要的 SSH 密钥(可能在 /var/lib/jenkins/.ssh 中)?
  • 我在 AWS 上的 ubuntu 机器上。是的,我使用的用户是 /var/lib/jenkins 中的 jenkins
  • 如上所述:当我从 CLI 运行 git 命令时,我必须输入 ssh 密钥的释义。一旦正确设置了私有-公共配对,我已经设置了其他 ssh 密钥,它不应该需要密码 - 是吗?我可以使用 .bashrc 中的脚本将它添加到我的 ssh-agent 中。我的问题是:Jenkins 是否会启动一个适当的 shell 并在它分拆进程时执行该脚本?

标签: git ssh github jenkins jenkins-plugins


【解决方案1】:

遇到类似的问题,我所要做的就是确保在您以用户“jenkins”身份登录后生成部署密钥,该用户是作为 jenkins 安装的一部分创建的,然后在复制后重新启动 jenkins 服务器github中部署密钥中的公钥。

【讨论】:

    【解决方案2】:

    想通了:

    -事实证明,如果您不是将它作为守护进程运行,它会使用您运行它的 shell 环境。 - 结果表明,任何需要用户提示(如 ssh 释义)的 cmd 都被 Jenkins 视为错误。

    目前的解决方案是:

    -在我通过 ssh-add 将 github pub 密钥添加到 ssh-agent 后运行 Jenkins,这样它就不会提示输入释义。

    如果我想将 Jenkins 作为守护进程运行,我会想象在运行它之前必须正确设置 ssh-agent(我不认为它使用当前的 shell 环境?)。

    【讨论】:

      【解决方案3】:

      您确定 Jenkins 以您期望的用户运行吗?如果您将 Jenkins 作为服务运行,它通常以用户“本地系统帐户”启动。

      这可能会有所帮助:https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin。请参阅“配置 Jenkins 以使用与 msysgit Windows 安装程序捆绑在一起的 OpenSSH”部分。

      另外,这个帮助了我:

      http://computercamp.cdwilson.us/jenkins-git-clone-via-ssh-on-windows-7-x64

      【讨论】:

        猜你喜欢
        • 2016-04-27
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        相关资源
        最近更新 更多