VSTS API REST无法正确下载源

时间:2018-03-01 14:54:48

标签: rest api powershell azure-devops

在尝试搜索我的问题的解决方案后,我发现了一些可以使用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\_work\194\s /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中正确运行或没有此值。

任何人都可以帮助我吗?

非常感谢,我会帮助你。

1 个答案:

答案 0 :(得分:0)

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

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

由于PowerShell任务在BuildA中针对$/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代替