如何设置TFS 2018以通过SSH从Git提取源?

时间:2018-12-19 16:11:48

标签: git ssh tfs

我正在使用内部TFS 2018设置连续部署服务器。该项目的源代码托管在可通过SSH或HTTPS访问的另一台Git服务器上。我打算仅使用TFS来使用TFS的Git轮询来自动化新的构建/部署。

我有两个代理,一个在Windows上,一个在Linux上。 Linux代理作为Docker容器运行。我正在使用Windows代理来构建ASP.NET代码,并且使用HTTPS身份验证可以正常工作。我现在正在尝试为Linux代理程序建立一个构建并获取JavaScript代码。问题是Linux代理无法获取代码。

  • 在使用与Windows代理完全相同的凭据尝试HTTPS时,出现“身份验证失败”的消息:

    2018-12-19T15:43:57.0878068Z ##[command]git fetch --tags --prune --progress --no-recurse-submodules origin
    2018-12-19T15:43:57.0883732Z fatal: Authentication failed for 'https://***:***@<redacted>/'
    2018-12-19T15:43:57.0936665Z ##[warning]Git fetch failed with exit code 128, back off 2.956 seconds before retry.
    
  • 我决定尝试使用SSH来获取源。我生成了SSH私钥/公钥对,并将公钥添加到了远程Git服务器中的帐户中。但是,我无法将TFS Git“获取源”任务配置为使用私钥身份验证使用SSH。 Git服务配置中没有为此提供的选项,仅提供了一个用户/密码对。尝试简单地将私钥粘贴到密码框中即可:

    2018-12-19T15:49:46.2303693Z ##[command]git remote set-url origin ssh://emptyusername:***@<redacted>
    2018-12-19T15:49:46.2312696Z ##[command]git remote set-url --push origin ssh://emptyusername:***@<redacted>
    2018-12-19T15:49:46.2315992Z ##[command]git fetch --tags --prune --progress --no-recurse-submodules origin
    2018-12-19T15:49:46.2318791Z ssh: Could not resolve hostname emptyusername:-----begin rsa private key----- miieowibaakcaqeav7dgukagzcpr: Name or service not known
    2018-12-19T15:49:46.2319131Z fatal: Could not read from remote repository.
    
  • 在TFS的服务管理器中创建SSH服务无效,因为我认为这是通过SSH运行远程命令,而不是获取源代码。 (以这种方式添加的服务根本不会在构建配置中显示,因此无法选择它。)

  • 我找到了说明您可以使用PAT(个人访问令牌)作为HTTPS查询用户名的文档。因此,我尝试了一下,但是得到的结果与尝试使用实际凭据时得到的结果相同:

    2018-12-19T15:57:45.3279943Z ##[command]git fetch --tags --prune --progress --no-recurse-submodules origin
    2018-12-19T15:57:45.3281813Z fatal: Authentication failed for 'https://voy2wog...@<redacted>'
    2018-12-19T15:57:45.3341431Z ##[warning]Git fetch failed with exit code 128, back off 4.71 seconds before retry.
    

所以,总结一下:

  • 从Windows代理到主Git服务器的HTTPS身份验证工作正常。
  • 从Linux代理到Git的HTTPS身份验证似乎总是失败。
  • 无法对Git进行SSH身份验证,或者在TFS中如何进行配置也不明显。

如何解决以上两个问题之一,以便可以设置我的连续构建?

我确实需要直接从Git存储库中提取信息,以便每当对给定分支进行推送时,就可以使用轮询功能自动构建。换句话说,打包源并将它们以其他方式馈​​送到TFS是不合适的。

我现在正在尝试向Windows代理添加必要的工具,但是我希望最终部署更多的代理,Linux代理将是更可取的,尤其是当我们开始转向.NET Core时,不必依赖Windows进行构建。 (Windows许可费用及所有费用)

0 个答案:

没有答案