TFS Build在推送到远程代表时挂起

时间:2014-10-09 13:20:37

标签: git powershell ssh tfs build

我编写了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

2 个答案:

答案 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