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

我在Win 2008服务器机器上设置Jenkins,并且在configurationJenkins连接到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相同的命令来validation我的SSH密钥是否有效。
  • validation我所有的path是正确的。

jenkinsconfiguration设置

  • jenkins1.418
  • GitHub插件0.5
  • Git插件1.1.9

msysgit工作,但CMD提示不当我浏览到一个有效的回购,并从DOS提示符执行命令,也失败。

你有什么想法我可能会失踪?

谢谢你的帮助。

正如我所说,使用ssh协议时,指定HOME环境变量是关键。
由于Windows没有HOME ,所以你需要明确地定义它到你想要的任何目录。

但是, Vestnik评论道:

我已经指定在Windows从属节点上覆盖HOME ,将其指向C:\jenkins
我已经把C:\jenkins\.ssh下的正确的id_rsa ,但仍然有这个问题。
我的奴隶代理在SYSTEM帐户下作为服务运行。

  • 类似的问题:“ 窗口上的Hudson + Git + Gitosis问题 ”
  • 类似的解决方案:“ 与哈德森+ Git + Gitosis窗口问题 ”

两个建议:

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

从作业定义中显示env

  • 不要忘记在%HOME%\.ssh目录中同时包含id_rsaid_rsa.pub :您需要public和private ssh密钥。 (正如在“ git clone with ssh issue ”中提到的)

如果你有一个参数化版本,你也可以这样定义HOME ,并检查你的slave是否为HOME选择了正确的值:

定义自定义变量

jenkins中有两个与ssh相关的插件可以使用: 通过SSHJenkins SSH插件 发布

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

接下来,您需要再安装两个插件,这些插件将用于项目配置GitHub PluginJenkins Git Plugin

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

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

从我的博客文章复制的话题 :

詹金斯配置:
Jenkins SSH插件提供了为每个主机设置私钥的可用性,第二个插件为全局主机做了工作。
如果使用Jenkins SSH插件,则在SSH远程主机中写入主机,用户,密码和私钥的路径。
如果使用通过SSH发布,则在SSH设置中写入密码并粘贴私钥或写入路径。
项目配置是:
GitHub项目https://github.com/GitUser/iOS-project/
*源代码管理
– > Git
– > – >存储库
– > – > – >存储库的URL:git@github.com:GitUser / iOS-project.git
– 这取决于你配置一个分支或采取默认的一个 –
*建立触发器
– >民意调查SCM – Seted –
– >日程安排:* * * * *
*建立
– >执行shell

 -> -> 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>" 

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

  1. 点击凭据添加按钮。

在这里输入图像说明

  1. 詹金斯指向你的私钥。

在这里输入图像说明

  1. 从列表中选择新添加的凭据。

在这里输入图像说明

在我的环境中(Jenkins 64位,Java 32位,运行于Windows server 2016 64位),解决方案将密钥放在C:\ Windows \ SysWOW64 \ config \ systemprofile \ .ssh文件夹中。 根据Git插件文档 :

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