Jenkins(Windows 服务)通过 SSH 与 Git

Jenkins(Windows 服务)通过 SSH 与 Git

我很难配置作为 Windows 服务运行的 Jenkins,以连接到 git 服务器 (gitosis) 并克隆存储库。Jenkins 设置为使用标准Git 插件

一切都由我们托管:Jenkins 服务器已开启win.foo.com并且 gitosis 在 Linux 服务器上运行(git.foo.com)。

如果我通过 RDP 进入,win.foo.com我可以从命令行克隆()而不会出现问题。git.exe clone --progress -o origin [email protected]:myproject.git myproject

Jenkins 作为一项服务运行,并且由于它不在同一个用户帐户下运行,因此我已将文件夹复制.ssh%SystemRoot%\System32\config\systemprofile(如%USERPROFILE%环境变量中所定义)和C:\Program Files (x86)\Git\,但即使在完全重启后,Jenkins 似乎也没有拾取到这些。

我尝试过使用git.exegit.cmd;但两种情况都无济于事。

詹金斯失败并显示以下错误消息:

ERROR: Error cloning remote repo 'origin' : Could not clone [email protected]:myproject.git
ERROR: Cause: Error performing command: C:\Program Files (x86)\Git\cmd\git.cmd clone --progress -o origin [email protected]:myproject.git C:\Program Files (x86)\Jenkins\jobs\myproject\workspace
Command "C:\Program Files (x86)\Git\cmd\git.cmd clone --progress -o origin [email protected]:myproject.git C:\Program Files (x86)\Jenkins\jobs\myproject\workspace" returned status code 128: Cloning into C:\Program Files (x86)\Jenkins\jobs\myproject\workspace...
Access denied
fatal: The remote end hung up unexpectedly

我确信我错过了一些东西,但我不确定是什么。

建议?

答案1

我一直在阅读以下与此密切相关的文章:我如何告诉 Windows 版 Git 在哪里找到我的私钥 RSA 密钥?它给出了一个很好的提示:HOME变量至关重要,但它并没有像我想象的那样发挥作用。

经过大量研究和尝试,我发现了这篇文章: http://markashleybell.com/portable-git-windows-setting-home-environment-variable.html

事实上,当从服务帐户运行 ssh 时,仅仅像往常一样在 Windows 中设置环境变量是不够的,还需要更改配置以便真正找到密钥。

相关简要概述:

导航到 C:\Program Files\Git\etc\profile 并添加以下行

HOME="/c/Users/YourUserAccount"

# normalize HOME to unix path
HOME="$(cd "$HOME" ; pwd)"

这为我解决了这个问题,因为现在 Git总是使用静态分配的 home 路径。只需确保此方法不会对这台计算机上的其他用户造成任何安全问题。

答案2

您需要的唯一参数真的%HOME%当 Jenkins 尝试克隆时,check 是环境变量值。
您需要显示 Jenkins 会话的“set”(环境变量)并查看是否HOME已定义,如果已定义,则定义到哪个路径。

提醒:

  • 默认情况下,Windows 不定义HOME
  • msysgit 默认HOME%USERPROFILE%

要显示变量,请使用参数化构建功能

在生成器中按名称引用参数。我使用“ env”命令显示变量,然后使用 echo 语句来演示如何引用该值:

参数化 Jenkins 作业中的命令 shell

相关内容