我正在尝试使用记录在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。
答案 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"