31

我正在尝试在 Windows Server 2012 机器上设置 Jenkins,但遇到了很多困难。

我做过的事情:

  • 创建了一个无密码的id_rsa,并且id_rsa.pub
  • 使用并接受添加主机known_hosts为 bitbucket.org创建了一个文件。ssh.exe -T bitbucket.org
  • 添加E:到系统范围的 HOME 变量
  • 我已经将这些文件添加C:/Windows/SysWOW64/config/systemprofile/.sshE:/.ssh
  • 我已将我的公钥作为部署密钥链接到 Bitbucket。
  • 我已经三次检查了我所有的 URL、用户名等。
  • 我什至手动从存储库中提取以设置初始基础C:/Program Files (x86)/Jenkins/jobs/MyProject/workspace/

然而它仍然挂在

Building in workspace C:\Program Files (x86)\Jenkins\jobs\MyProject\workspace
Checkout:workspace / C:\Program Files (x86)\Jenkins\jobs\MyProject\workspace - hudson.remoting.LocalChannel@13ca972
Using strategy: Default
Fetching changes from 1 remote Git repository
Fetching upstream changes from origin

我给了它大约 20 分钟,所以这不是回购问题的速度/大小。如果我取消,这就是返回的内容:

ERROR: Problem fetching from origin / origin - could be unavailable. Continuing anyway
hudson.plugins.git.GitException: Error performing command: C:\Program Files     (x86)\Git\bin\git.exe fetch -t origin +refs/heads/*:refs/remotes/origin/*
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:780)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:739)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.fetch(CliGitAPIImpl.java:160)
at hudson.plugins.git.GitAPI.fetch(GitAPI.java:230)
at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:793)
at hudson.plugins.git.GitSCM.access$000(GitSCM.java:57)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:976)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:942)
at hudson.FilePath.act(FilePath.java:865)
at hudson.FilePath.act(FilePath.java:838)
at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.java:942)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1101)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1364)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:670)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:575)
at hudson.model.Run.execute(Run.java:1575)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:237)
Caused by: java.lang.InterruptedException
at java.lang.ProcessImpl.waitFor(Native Method)
at hudson.Proc$LocalProc.join(Proc.java:319)
at hudson.Launcher$ProcStarter.join(Launcher.java:360)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:769)
... 19 more
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:981)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:942)
at hudson.FilePath.act(FilePath.java:865)
at hudson.FilePath.act(FilePath.java:838)
at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.java:942)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1101)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1364)
at     hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:670)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:575)
at hudson.model.Run.execute(Run.java:1575)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:237)

我在这里束手无策,所以我很感激我能得到的所有帮助。这是我尝试过的几篇文章,但没有任何改进。

为 Github 私有存储库验证 Jenkins CI

设置 Jenkins 时权限被拒绝(公钥)

Hudson Git 插件无法在 Windows 上运行

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

4

8 回答 8

31

以下是我解决类似问题的方法:

Msysgit 安装两个git.exe. C:\Program Files (x86)\Git\bin一下,二下C:\Program Files (x86)\Git\cmd。第一个不能与 Jenkins 一起使用。它会在完成它的工作后挂起。第二个完美运行。

更新您的 Jenkins Git 设置以指向正确cmd\git.exe并享受!

于 2013-06-18T17:10:37.263 回答
8

这就是我解决它的方法:

我运行了 sysinternals 工具 psexec 来生成一个在 LocalSystem 帐户下运行的 CMD(与 jenkins 服务相同的帐户正在运行)

PSEXEC -i -s -d CMD

在这个 cmd 提示符中,我从工作区目录执行了与挂起的 GIT.exe 进程相同的 git 命令。例如

d:\Programs\Jenkins\jobs\jobname\workspace>D:\Programs\Git\bin\git.exe 获取 -t ssh+git://gitpub@my.server.com:9360/data/gitpub/myRepository。 git +refs/heads/ :refs/remotes/origin/

瞧:我被提示输入“是”以将 SSH 密钥添加到已知主机的已知列表中。

于 2014-04-10T14:17:51.947 回答
2

在 Windows 上配置 jenkins 时,我发现另一个非常有用的链接,尤其是在使用 MSI 安装程序时:http: //opensourcetester.co.uk/2013/06/28/jenkins-windows-ssh/

还有一件我没有发现明显的事情是:连接到 Github 时必须使用 SSH url 而不是默认的 https 。希望这会为某人节省时间。

于 2013-11-12T05:45:37.643 回答
2

只需体验“从原点获取上游更改”的冻结。

在基于 Windows 的机器上运行 Jenkins 作为服务似乎(根据我的经验)在使用 SSL 时会出现问题。

解决方法]

  1. 更改您的 Jenkins 服务以在本地帐户下运行。
  2. 确保您的本地管理员帐户配置为执行与 SSH 的 Git 交互。
  3. 重新启动 Jenkins(详细信息)。
  4. 如果 Jenkins 没有启动,那么它在尝试从 Git 中提取时会遇到问题。手动杀死 git 和 ssh 进程,从 Jenkins 中杀死你的 java.exe 并手动启动 Jenkins 服务。

关于我为什么选择此解决方案的详细信息]

在设置授权主机以接受服务器并在服务器上注册 Jenkins 的密钥以允许连接之前,我已经遵循了其他步骤。我已经确保我可以在我的本地系统帐户(运行 Jenkins 服务)下成功执行 Git 操作。尽管如此,提取仍会冻结。为了检查我的 Git 和 SSL 配置是否正确,我什至去了我的 Jenkins 作业目录中最初配置的 Git 存储库,并在本地系统帐户下成功执行了拉取请求。有效; 因此密钥已正确设置。

我忘记了我在哪里读到的,但我听说在本地系统下处理 Git/SSH 时会出现问题。有了这些知识,我使用了我的 Git 环境并更改了 GIT_SSH 环境变量以使用plink(结合使用 Putty 来记住服务器密钥、puttygen 将 OpenSSL 密钥转换为 Putty 密钥和选美来记住我的密钥)用于 plink . 一旦我让它与 plink 一起工作,我发现它不是一个可用的解决方案。为了正确使用 plink,我还必须在我的本地系统帐户下运行 pageant 才能让 Jenkins 服务正确协商 SSH 调用。在考虑了如何在重新启动时正确设置我的初始状态之后,我不想把所有这些精力都花在让 SSH 连接正常工作上。

相反,我决定在我的本地管理员帐户下运行 Jenkins 更容易,该帐户也被配置为处理 Git 服务器。无需为本地系统帐户处理配置的 SSH 密钥,我的 git 操作运行良好。


请注意,David Gageot 的回答可能适用于某些人。我不必更改任何 Git 设置,因为在安装 Git 时,我选择了Run Git from the Windows Command Prompt将路径映射到C:\Program Files (x86)\Git\bin\cmd\目录的选项。

于 2013-08-09T20:51:17.543 回答
2

我在笔记本电脑上遇到了同样的问题,我能够找到解决方案,但这仅适用于在设置为 Windows 服务的 Tomcat Web 容器中运行 Jenkins 战争的情况。

我只需要将 Tomcat 服务设置为以我的 Windows 用户身份而不是本地系统身份登录。

于 2014-03-28T19:55:09.593 回答
1

对我来说,这是 $HOME/.ssh 文件夹及其内容的权限。将其设置为对特定用户组可见后,Jenkins 能够在重新启动后获取更改。

于 2015-06-04T17:50:52.900 回答
0

适用于 Windows 的 Git 客户端 2.6.1 版 在 Jenkins 中修复了这个问题。现在“从原点获取上游更改”没有延迟。

我在 Jenkins 中使用 git cmd 从:

C:\Program Files\Git\cmd\git.exe

于 2015-10-14T12:53:38.190 回答
0

我花了几个小时试图弄清楚这一点,我发现将密码添加到 repo URL 解决了这个问题:

https://USERNAME:PASSWORD@bitbucket.org/REPO.git

请注意用户名和密码之间的:

于 2017-02-26T19:25:22.677 回答