VSTS API REST无法正确下载源

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VSTS API REST无法正确下载源相关的知识,希望对你有一定的参考价值。

在尝试搜索我的问题的解决方案后,我发现了一些可以在本地使用tf.exe进行修复但我无法找到VSTS任务的修复程序。

那是我的问题:

在VSTS中创建构建后,我启动了它似乎正确运行。其他构建也是如此。现在我试图从一个主构建定义触发多个构建。全部由Powershell脚本触发。我在互联网上找到了一个能够实现此目的的脚本,只需要使用VSTS REST API和这样的URL:

"$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/builds?api-version=2.0"

即使我可以像这样使用Json发送params:

"{ 'definition' : { 'id' : $sBuildId }, 'sourceBranch' : '$env:BUILD_SOURCEBRANCH', 'parameters' : ""{ 'buildMasterNumber' : '$sBuildMasterNumber', 'BranchName' : '$sBranchName' }"" }"

我面临的问题是,当我通过外部构建对构建进行排队时,它从不下载源代码,输出结果显示:

2018-03-01T12:48:14.6043553Z ##[command]tf vc get /version:7809 /recursive /overwrite E:agent\_work194s /loginType:OAuth /login:.,******** /noprompt
2018-03-01T12:48:24.1992120Z All files are up to date.
2018-03-01T12:48:24.2773348Z ##[section]Finishing: Get Sources

正如您所看到的那样始终显示消息“所有文件都是最新的”,下一个任务是NuGet恢复,它永远无法找到* .sln文件。

但是如果我在不使用REST API的情况下直接触发构建,一切似乎都能正常工作。

注意:$ env:BUILD_SOURCEBRANCH在两个构建定义中都有所不同,但即使我找到了正确的sourcebranch值,它也永远无法在Json params中正确运行或没有此值。

任何人都可以帮助我吗?

非常感谢,我将不胜感激任何帮助。

答案

这是因为您在REST API中使用$env:BUILD_SOURCEBRANCH为同一个TFVC repo排队新的,当您执行PowerShell任务时,该值是TFVC repo。

假设您在buildA中执行PowerShell任务(队列新构建)(为$/project1 TFVC repo构建),并且您希望为$/project2排队新构建。

由于PowerShell任务在BuildA for $/project1中执行,因此当您使用预定义变量$env:BUILD_SOURCEBRANCH时,值为$/project1

如果要为不同的repo $/project2排队新构建,则应在构建定义中指定$/project2并跳过在PowerShell任务中指定sourceBranch(或者可以使用字符串$/project2替换REST API中的$env:BUILD_SOURCEBRANCH):

enter image description here

用于对新构建进行排队的REST API的application / json应该是:

"{ 'definition' : { 'id' : $sBuildId }, 'parameters' : ""{ 'buildMasterNumber' : '$sBuildMasterNumber', 'BranchName' : '$sBranchName' }"" }"

注意:由于您还在第一次构建中使用了预定义变量$env:SYSTEM_TEAMPROJECTID,如果新排队的构建定义位于不同的项目中,则应使用项目名称/ id。

以上是关于VSTS API REST无法正确下载源的主要内容,如果未能解决你的问题,请参考以下文章

无法通过REST API为punlisherId = tfs和eventId tfvc.checkin创建VSTS webhook订阅

无法通过 API 更新发布定义

VSTS REST API 缓存

VSTS REST API 按名称获取 ReleaseDefinition

VSTS:如何使用 REST API 获取由构建触发的发布 ID

使用 VSTS REST API 创建带有标题的版本