Azure DevOps Build - Invoke-RestMethod - элемент с тем же ключом уже был добавлен ошибка - PullRequest
0 голосов
/ 24 сентября 2018

У нас есть сценарий powershell в качестве шага в нашей сборке DevOps, который находит подробности набора изменений со времени последней удачной сборки.

$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}" 

Мы выполняли один и тот же сценарий без каких-либо проблем за последний год или более.

Любые идеи о том, что может быть причиной этого или как устранить неполадки в дальнейшем.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Наши этапы сборки работают сегодня утром, без каких-либо изменений в нашем процессе.

Тестовые случаи, которые я использовал для устранения этой проблемы ранее на этой неделе с использованием определенных идентификаторов сборки, которые не работали, теперь также работают.

Что-то должно было измениться Microsoft, которая впоследствии была исправлена ​​??

0 голосов
/ 25 сентября 2018

Это потому, что запрошенная сборка не имеет изменений со времени последней удачной сборки.

На основании моего теста, если у вас есть 2 определений сборки A и B , и они установили одинаковые источники ... Отредактируйте и измените некоторые файлы / код, затем проверьте изменения.

  1. Определение сборки триггера A и сгенерируйте build#1, на этот раз он работает, вызвав ниже REST API:

    _apis/build/builds/build#1/changes?api-version=$RestAPIVersion
    
  2. Затем запустите определение сборки B и сгенерируйте build#2даже они использовали одну и ту же версию Source, но на этот раз REST API не работает ... и вы получите сообщение об ошибке ... Потому что build#2 не имеет изменений по сравнению с build#1 ...

    _apis/build/builds/build#2/changes?api-version=$RestAPIVersion (сборка № 2 / изменения здесь не будут работать без изменений ....)

enter image description here

Протестировано с помощью приведенного ниже сценария: ( Разрешить сценариям доступ к OAuth-токену )

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...