【问题标题】:Cannot run Git pull on PowerShell in TFS Build Pipeline无法在 TFS 构建管道中的 PowerShell 上运行 Git pull
【发布时间】:2017-11-15 14:48:55
【问题描述】:

在我当前的管道中,我需要 git pull 其他存储库而不是当前存储库,但是当我尝试执行 git pull(使用 powershell 或 cmd)时,它只会被阻塞并且永远不会继续。

如果我尝试运行代理的命令,它们会正确执行。

这是我的 powershell 脚本:

Write-Host (Get-Location)

Set-Location -Path xxx

Write-Host (Get-Location)

#Update the repository, with no prints

Write-Host "Updating"
Invoke-Expression "& git pull origin develop --verbose" 

Write-Host "Updated"

exit 0

当我运行它时,我得到了“更新”,但它只是在那里阻塞,没有任何反应。

谁能指出正确的方向吗?

【问题讨论】:

  • 不确定,但我的直觉是与 gitserver 握手......你试过 git pull 代理吗?这是我的本地服务器日志,如果可以帮助.../Users/demokritos/work/src/github.com/anotherfolder/projectK/weirdfolder /Users/demokritos/work/src/github.com/abc Updating Looking up github.com ... done. Connecting to github.com (port 9418) ... 192.60.253.113 done. From git://github.com/abc/xyz * branch master -> FETCH_HEAD = [up to date] master -> origin/master Already up-to-date. Updated
  • 您是否只是想将另一个遥控器拉到您的Build.SourcesDirectory,例如您的构建代理中的c:\agent\_work\1\s
  • @Patrick-MSFT 不,我有它在其他文件夹位置,这就是为什么我“设置位置”到另一个路径
  • @JorgeLima 如果是这样,建议您也尝试一下默认Build.SourcesDirectory,看看错误是否与此有关。如果您在使用Build.SourcesDirectory时可以成功拉取,请检查您的构建服务帐户是否有足够的权限,例如在其他路径上写入。

标签: git powershell tfs build continuous-integration


【解决方案1】:

如果这对某人有帮助,我可以通过以下方法解决这个问题:

Invoke-Expression "& git -c http.extraheader='AUTHORIZATION: bearer $(System.AccessToken)' pull --progress origin develop -q"

请求凭据的请求似乎被阻止了。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,有很多 PS1 脚本在 TFS 2017 上构建 Delphi 项目。只要我们一直使用版本 1.105.7 的代理,一切都很好。更新到新代理 (2.120.2) 时,脚本无法再获取更改,只是阻塞了构建管道。

    经过大量研究,我发现两个代理版本之间存在一个区别:

    • 旧代理 (1.105.7) 使用 git credential.manager 属性的系统配置,该属性设置为“ma​​nager
    • 新代理 (2.120.2) 以某种方式清除了此设置,这意味着没有凭据到位,脚本“提示”输入用户名/密码,因此被阻止

    为了遇到这个问题,我只需要在构建机器上再次设置凭证助手。

    \path\to\tfs\agent\externals\git\cmd\git.exe config --system credential.helper manager
    

    【讨论】:

      【解决方案3】:

      您可以通过命令行任务直接使用 git 命令,如下所示:

      首先确保您可以使用您的构建服务帐户在代理上成功手动运行 git 命令。如果其他存储库需要一些身份验证,则脚本或命令也应包含身份验证。

      同时尝试让您的构建定义运行Git.exe。 在变量选项卡上设置这个变量:

      system.prefergit    true
      

      更多详情请参考本教程:Run Git commands in a script

      如果您仍然收到错误,建议您启用更详细的日志记录以进行故障排除。为此,请遵循:通过添加名为 system.debug 的变量并将其值设置为“true”来启用 TFS 构建调试日志记录。

      【讨论】:

      • 嘿,我试过了,但不幸的是我无法让它工作:\我也跟着文档没有成功。
      • @JorgeLima 你有什么详细错误?能分享一下相关的构建日志吗?
      【解决方案4】:

      如果有人遇到此问题并且您尝试在发布而不是构建中使用 System.AccessToken,您需要允许脚本在环境“代理阶段”设置(高级)中使用 OAuth

      此设置也适用于构建

      【讨论】:

        猜你喜欢
        • 2018-12-07
        • 1970-01-01
        • 2012-05-26
        • 2022-08-14
        • 2016-11-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        相关资源
        最近更新 更多