在DevOps构建中,我们有一个powershell脚本,可查找自上次良好构建以来的变更集详细信息。
$TfsUrl = 'https://' + $RestAPIAccount + '.visualstudio.com/defaultcollection/' + $ProjectName
$BaseUrl = "https://" + $RestAPIAccount + ".visualstudio.com/defaultcollection/_apis/tfvc/changesets"
$ChangeSetHistoryUrl = $TfsUrl + "/_apis/build/builds/$BuildId/changes?api-version=$RestAPIVersion"
$changeSetHistoryDef = (Invoke-RestMethod -Uri $ChangeSetHistoryUrl -Headers $Headers -Method Get).Value
最后一条语句开始失败,并出现以下错误:
"Invoke-RestMethod : {"$id":"1","innerException":null,"message":"An item with the same key has already been added.","typeName":"System.ArgumentException, mscorlib, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","typeKey":"ArgumentException","errorCode":0,"eventId":0}"
在过去的一年或更长时间里,我们一直在运行相同的脚本,没有任何问题。
关于可能导致此问题或如何进一步解决问题的任何想法。
答案 0 :(得分:0)
这是因为自上次良好构建以来,您请求的构建没有任何更改。
根据我的测试,如果您具有 2 个构建定义 A 和 B ,并且它们设置了相同的源...编辑并修改一些文件/代码,然后签入更改。
触发构建定义 A 并生成build#1
,这一次
它可以通过调用以下REST API来工作:
_apis/build/builds/build#1/changes?api-version=$RestAPIVersion
然后触发构建定义 B 并生成build#2
,即使他们使用相同的Source版本,但这
时间REST API无法正常工作...并且您将收到错误消息...因为build#2
与build#1
相比没有任何变化...
_apis/build/builds/build#2/changes?api-version=$RestAPIVersion
(build#2 / changes在这里将无法工作,因为没有任何更改...。)
使用以下脚本进行了测试:(Allow Scripts to Access OAuth Token)
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/builds/$env:Build_BuildId/changes"
Write-Host $url
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline:" $pipeline.value | ConvertTo-Json -Depth 100
答案 1 :(得分:0)
今天上午,我们的构建步骤正在运行,而我们的流程没有任何更改。
我本周早些时候使用失败的特定内部版本ID来解决此问题的测试用例现在也可以正常工作。
Microsoft必须更改了某些内容,此问题随后已得到解决??