TeamCity - 来自代理商的Git推送

时间:2013-09-20 13:00:32

标签: git push teamcity agent

我有一个TeamCity服务器设置为使用“默认私钥”在代理上从GitHub签出src,并且.ssh中的配置文件如下所示:

Host git@github.com
    IdentityFile ~/.ssh/id_rsa.shop
    StrictHostKeyChecking no

Host github.com
    IdentityFile ~/.ssh/id_rsa.shop
    StrictHostKeyChecking no

这很好用。 现在我想从代理商那里推出。 但是当我这样做时,push命令因用户输入而挂起:

The authenticity of host 'github.com (192.30.252.130' can't be established.
RSA key fingerprints is 'xxx....xxx'
Are you sure you want to continue (yes/no)
Warning: Permently added '' to known hosts.
Connection closed by 192.30.252.130
Fatal: The remote end hung up unexpectedly.

如果我手动执行此操作,它仍会失败并且拒绝权限,无论我输入是/否。

“默认私钥”具有符合github的读/写权限,所以有点丢失。 我唯一观察到的是github ip看起来很本地,但是当代理刚刚完成代理端签出时怎么办?这可能是防火墙吗?

任何人都可以向我解释我缺少什么吗?

2 个答案:

答案 0 :(得分:3)

事实证明,设置有一个相当大的优势。 显然有理由我不太明白一旦我调用git就改变了用户上下文/配置文件。 这将改变homedir。 这可以通过查看调用配置文件更改的Git etc文件来验证:profile:

# Set up USER's home directory
if [ -z "$HOME" -o ! -d "$HOME" ]; then
  HOME="$HOMEDRIVE$HOMEPATH"
  if [ -z "$HOME" -o ! -d "$HOME" ]; then
    HOME="$USERPROFILE"
  fi
fi

if [ ! -d "$HOME" ]; then
    printf "\n\033[31mERROR: HOME directory '$HOME' doesn't exist!\033[m\n\n"
    echo "This is an error which might be related to msysGit issue 108."
    echo "You might want to set the environment variable HOME explicitly."
    printf "\nFalling back to \033[31m/ ($(cd / && pwd -W))\033[m.\n\n"
    HOME=/
fi

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

我通过强制将主目录强制为当前用户来修复此问题:

set HOME=%env.USERPROFILE%

问题出在git的init脚本中。

此外,我不得不将配置修改为:

Host webshop_github
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa.shop

答案 1 :(得分:1)

实际上我已经进一步深入了解并找到了另一个解决方案,感谢@Christian Mikkelsen以及此主题中的答案:git.cmd vs git.exe - what is the difference and which one should be used?

在手动使用git时,您不应该使用原始git.exe,而是使用包装器gitk.cmdcmd\git.exe。请注意,cmd\git.exebin\git.exe不同。 Teamcity本身使用bin\git.exe,因为它知道如何使用它。但是如果你手动使用git,你应该使用cmd\git.exe

您必须解决的问题是如何将cmd\git.exe的路径传递到您的脚本中。我支持它可以使用自定义参数完成,也可以在执行脚本之前覆盖env.TEAMCITY_GIT_PATH