设置Jenkins时权限被拒绝(publickey)

时间:2011-06-29 02:07:02

标签: windows git github jenkins

我在Win 2008服务器计算机上设置Jenkins,但在配置Jenkins连接到GitHub时遇到了一些麻烦。我收到以下错误:

Command "git.exe fetch -t git@github.com:USER/REPO.git +refs/heads/*:refs/remotes/origin/*" returned status code 128: Permission denied (publickey).
fatal: The remote end hung up unexpectedly

ERROR: Could not fetch from any repository
FATAL: Could not fetch from any repository
hudson.plugins.git.GitException: Could not fetch from any repository
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:950)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:908)
    at hudson.FilePath.act(FilePath.java:758)
    at hudson.FilePath.act(FilePath.java:740)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:908)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1184)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:537)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:425)
    at hudson.model.Run.run(Run.java:1376)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:175)

我检查的内容

  • Jenkins服务以我的用户名运行。
  • 我更改了SSH密钥,因此它不再有密码。
  • 我已使用msysgit执行与Jenkins相同的命令验证了我的SSH密钥是否有效。
  • 验证了我的所有路径都是正确的。

Jenkins配置设置

  • Jenkins 1.418
  • GitHub插件0.5
  • Git插件1.1.9

msysgit正常但CMD提示不会 当我导航到有效的仓库并从DOS提示符执行命令时,它也会失败。

你知道我可能缺少什么吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:13)

正如我评论的那样,在使用ssh协议时,指定HOME环境变量是关键 由于Windows没有HOME,因此您需要明确地将其定义到您想要的任何目录。

然而,Vestnik评论:

  

我已指定覆盖Windows从属节点上的HOME以将其指向C:\jenkins
  我已将id_rsa置于C:\jenkins\.ssh下方,但仍有此问题   我的奴隶代理在SYSTEM帐户下作为服务运行。

两个建议:

  • 您需要让您的奴隶显示“set”,以便在与SYSTEM帐户一起使用时检查是否定义了HOME。
    如果不是,那可能意味着您需要将该变量添加到“系统环境变量”,而不是“用户环境变量”。

display env from the job definition

  • 不要忘记在id_rsa目录中同时拥有id_rsa.pub%HOME%\.ssh:您需要公钥和私钥ssh。 (如“git clone with ssh issue”中所述)

如果你有一个参数化版本,你也can define HOME that way并检查你的奴隶是否为HOME选择了正确的值:

define custom variables

答案 1 :(得分:5)

jnskins中有两个与ssh相关的插件可供使用:Publish Over SSHJenkins SSH plugin

第一个插件提供了设置全局ssh密钥的可用性,第二个插件提供了设置各种ssh密钥的可用性。

接下来,您需要安装另外两个将在项目配置GitHub PluginJenkins Git Plugin中使用的插件。

GitHub插件将用于设置 GitHub项目。 Jenkins Git插件将用于设置“存储库的URL”和其他东西,如分支等。

所有插件都可以从Jenkins插件管理器中的选项卡中获得。

my blog post, on the topic复制:

  

詹金斯配置:
  Jenkins SSH插件提供了为每个主机设置私钥的可用性,第二个插件为全局主机完成了工作   如果使用Jenkins SSH插件,则在SSH远程主机中写入主机,用户,密码和私钥路径。
  如果使用Publish Over SSH,则在SSH设置中编写密码并粘贴私钥或写入路径。
  项目配置如下:
  GitHub项目https://github.com/GitUser/iOS-project/
  *源代码管理
   - > Git的
   - > - >库
   - > - > - >存储库的URL:git@github.com:GitUser / iOS-project.git
   - 由您配置分支或采用默认分支 -
  *构建触发器
   - >民意调查SCM - Seted -
   - >时间表:* * * * *
  *构建
   - >执行壳牌

-> -> Command:  xcodebuild -target iOS-project -configuration AdHoc -sdk iphoneos5.0 clean
-> -> Command:  agvtool new-version -all $BUILD_NUMBER 
-> -> Command:  xcodebuild -target iOS-project -configuration AdHoc -sdk iphoneos5.0
-> -> Command:  xcrun -sdk iphoneos5.0 PackageApplication -v $WORKSPACE/build/AdHoc-iphoneos/iOS-project.app -o  $WORKSPACE/build/AdHoc-iphoneos/iOS-project-$BUILD_NUMBER.ipa PROVISIONING_PROFILE="<provisioning profile>" 
-> -> Command:  curl http://testflightapp.com/api/builds.json -F file=@$WORKSPACE/build/AdHoc-iphoneos/iCushion-1.0-$BUILD_NUMBER.ipa -F api_token=<api_token> -F team_token=<team_token> -F notes="This is an autodeploy build from Jenkins!" -F notify=True -F distribution_lists="<distributedlist 1>, <distributedlist 2>"

答案 2 :(得分:0)

现在看来,git插件提供了一种将Jenkins指向主目录的方法。

  1. 点击凭据添加按钮。
  2. enter image description here

    1. 将Jenkins指向您的私钥。
    2. enter image description here

      1. 从列表中选择新添加的凭据。
      2. enter image description here

答案 3 :(得分:0)

在我的环境中(Jenkins 64位,带有Java 32位,在Windows Server 2016 64位中运行),解决方案是将密钥放在 C:\ Windows \ SysWOW64 \ config \ systemprofile \ .ssh 文件夹。根据{{​​3}}:

  

默认情况下,Jenkins Windows安装程序将Jenkins设置为在Windows上作为服务运行,该服务作为“本地系统帐户”运行,而不是您的用户帐户。由于“本地系统帐户”没有设置SSH密钥或known_hosts,因此“git clone”将在构建期间挂起。可以保持Jenkins作为“本地系统帐户”运行并通过SSH克隆存储库,确保“本地系统帐户”设置了正确配置的.ssh目录(即id_rsa,id_rsa.pub和AND known_hosts)< / p>