VSTS REST API-更新版本

时间:2018-08-20 09:51:25

标签: rest powershell azure-devops

我正在尝试使用记录在here上的REST API和PowerShell来自动化VSTS版本的标记,并且似乎不可能使用该API添加/编辑Release标签。

我可以使用以下方法来GET发布OK:

$release = Invoke-RestMethod -Method GET -Uri $releaseUri -Headers $headers

但是当我尝试更新发行版时,我得到了一个错误,或者标签保持不变。我试图将发布设置为保留,并使用语义版本号进行标记,所以首先,正如文档所说,我尝试了一个PUT请求:

$body = ConvertTo-Json @{ keepForever = "true"; tags = @($semanticVersion)}
Invoke-RestMethod -Method PUT -Uri $releaseUri -Headers $headers -ContentType "application/json" -Body $body

哪个错误:

  

“ VS402892:版本的ID与原始ID不匹配   释放资源。确保您尝试更新正确的   资源。”

如果我尝试添加ID以匹配,它说我需要一个名称,如果添加名称我会收到错误

  

“ VS402886:不是从发行版添加或删除环境   允许。”

因此,似乎需要在体内提供所有发行信息才能正常工作。因此,我改为尝试将信息添加到从GET请求中获得的发布信息中:

$release = Invoke-RestMethod -Method GET -Uri $releaseUri -Headers $headers
$release.tags += "$semanticVersion"
$release.keepForever = "True"
$body = ConvertTo-Json $release
Invoke-RestMethod -Method PUT -Uri $releaseUri -Headers $headers -ContentType "application/json" -Body $body

哪个给出错误:

  

“ VS402897:具有别名:“ build alias”的工件源已   改性。字段更改为:“ DefinitionReference””

然后我尝试从$body删除Artifacts属性,但又出现另一个错误:

  

“ VS402885:不是从发行版添加或删除工件   允许。”

我刚刚注意到DefinitionReference属性中没有任何信息-这可能是导致错误的原因吗?为什么在我获取版本时不会返回该错误? ?

因此,似乎此时PUT请求不会执行此操作,因此我尝试使用PATCH。这似乎更好用-以下内容没有任何错误:

$body = ConvertTo-Json @{ keepForever = "true"; tags = @($semanticVersion)}
Invoke-RestMethod -Method PATCH -Uri $releaseUri -Headers $headers -ContentType "application/json" -Body $body

这可以正确更新'keepForever'属性,但是标记保持不变。我也尝试过再次使用GET获取完整的发布信息,只是添加标签,但是在更新keepForever信息而不是标签时,我仍然得到同样的东西。

我也尝试过使用POST,但再次遇到与PUT相同的错误:

  

“ VS402897:具有别名:“ build alias”的工件源已   改性。字段已更改:'DefinitionReference'“ *和*” VS402885:   不允许在发行版中添加或删除工件。”

有什么想法我在这里做错了吗?看起来它应该对我有用,并且我能够在VSTS中对构建进行类似的操作,并且它可以正确更新一些属性-只是不标记!我可以通过浏览器手动添加标签,而不是通过API。

1 个答案:

答案 0 :(得分:1)

看起来像发布的Tag API只是针对发布的Tags属性发出PATCH。从用户界面捕获:

Invoke-WebRequest 
-Uri "https://{account}.vsrm.visualstudio.com/{team-project}/_apis/Release/releases/{id}/tags/{tagname}" 
-Method "PATCH" 
-Headers 
@{
   "X-TFS-FedAuthRedirect"="Suppress"; 
   "Origin"="https://{account}.visualstudio.com"; 
   "X-VSS-ReauthenticationAction"="Suppress"; 
   "Accept-Encoding"="gzip, deflate, br"; 
   "Accept-Language"="nl,en-US;q=0.9,en;q=0.8,nl-NL;q=0.7"; 
   "Accept"="application/json;api-version=5.0-preview.1;excludeUrls=true"; 
} 
-ContentType "application/json"