我编写了powershell脚本,我在(tfs 2013版本)中的testrunner之前执行。当脚本使用ssh调用远程存储库上的git push时,构建会挂起。如果我使用相同的用户在构建代理程序上从powershell运行相同的脚本,它可以正常工作。如果它通过buildcontroller触发,它就会挂起。
我的LAN中有一个测试系统,它也可以正常工作。登台服务器托管在此环境之外。但正如我之前所说:当我直接从构建代理程序的powershell执行脚本作为同一用户时,它可以正常工作。
这就是我正在做的事情
Set-Location $Env:TF_BUILD_SOURCESDIRECTORY
$gitArgs = @(
'remote -v add {0} ssh://{1}@{2}{3}' -f $DeploymentEnvironment, $DeploymentUser, $ServerHost, $ServerRepoPath; ,
'push -v --progress {0} master ' -f $DeploymentEnvironment; )
Write-Verbose "Executing git commands"
$gitArgs | ForEach {
Write-Host $_
$proc = Start-Process -FilePath $GitExe -ArgumentList $_ -Wait -NoNewWindow;
if($proc.ExitCode -ne 0){
Write-Error "Git is having errors..."
exit $proc.ExitCode
}
}
这是我得到的构建日志输出:
remote -v add staging ssh://user@MYSERVERIP/path/to/my/repo.git
push -v --progress staging master
推送到ssh://user@MYSERVERIP/path/to/my/repo.git
答案 0 :(得分:0)
经过数小时的研究,我终于找到了解决方案。
在构建代理上实际上有两个.ssh目录。 如果您直接使用powershell,则使用用户目录中的那个。 在构建期间,它使用C:\ Program Files \ Git.ssh \
中的.ssh目录将主机添加到 known_host文件并将它们复制到两个(!)目录。
答案 1 :(得分:0)
当我从http切换到ssh时,我遇到了类似的问题。
我正在运行以下命令来完成它:
remote set-url origin $sshRemoteUrl
我甚至检查过一切都是正确的:
git remote get-url origin
只有在构建服务器上的powershell中进行测试,搜索SSH条目以及没有查询后,我才发现set-url命令只更改了获取引用,没有更改推送引用。因为需要--push
:
remote set-url origin $sshRemoteUrl --push