我很难配置作为 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.exe
和git.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 语句来演示如何引用该值: