简体   繁体   English

使用 RestAPI 过滤 Azure DevOps 版本

[英]Filter Azure DevOps releases with RestAPIs

I have been working on a requirement with a release API to retain all the production releases.我一直在处理发布 API 的要求,以保留所有生产版本。

Code -代码 -

param (
    [string]$token="",
    [string]$collection="",
    [string]$projectName =""
)
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $token)))
$response = Invoke-RestMethod "https://vsrm.dev.azure.com/$collection/$projectName/_apis/release/definitions?`$expand=Environments&`$top=1000&api-version=6.0" -Method 'GET' -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo)}
foreach ($releaseDefinition in $response.value){
   write-host $releaseDefinition.name
   write-host $releaseDefinition.id
   $releaseDefinitionid =  [convert]::ToInt32($releaseDefinition.id)
   write-host "--------------------------------------------------"
   
   [string] $releases = "https://vsrm.dev.azure.com/$collection/$projectName/_apis/release/releases?definitonid="
   [string] $defid = $releaseDefinitionid
   [string] $geturl = $releases + $defid + "&api-version=6.0"


   
$releaseresult = Invoke-RestMethod $geturl -Method 'GET' -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo)}
#Write-Host $releaseresult.value
#Write-host $releaseresult.keepForever

foreach ($retain in $releaseresult.value)
{

Write-host $retain.id

$temp = $retain.id.ToString()


    $id = "https://vsrm.dev.azure.com/$collection/$projectName/_apis/release/releases/$temp/?api-version=6.0"


$retainrelease = Invoke-RestMethod  $id -Method 'GET' -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo)}
if( $retainrelease.environments.name -eq 'PRD' -and $retainrelease.environments.status -eq 'succeeded')
{
if([string]$retainrelease.keepForever -eq 'False')
{
 
  $keepforever = @{
     keepforever='true'}
    $jsonKeepForever = $keepforever | ConvertTo-Json -Depth 100
     $uriForBuildUpdate = "https://vsrm.dev.azure.com/$collection/$projectName/_apis/release/releases/$temp/?api-version=6.0"
   $patchreq = Invoke-RestMethod -Uri $uriForBuildUpdate -Method Patch -Body $jsonKeepForever -ContentType "application/json" -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo)}


   Write-Verbose "Result: $patchreq" -Verbose
}

}

 
else
{


}
}
}

It retains the releases, but the requirement is to retain only release definitions created in the last 60 days (or a particular date) and retain only releases happened in last 10 days to prod.它保留发布,但要求仅保留在过去 60 天(或特定日期)创建的发布定义,并仅保留在过去 10 天内发生的发布以进行生产。

I couldn't find any querystring param to filter it by.我找不到任何查询字符串参数来过滤它。 How can I do this?我怎样才能做到这一点?

I found that you can get a list of associated environments like prod/stage/dev (for each definition) by adding the $expand=environments to query string.我发现您可以通过将$expand=environments添加到查询字符串来获取相关环境的列表,例如 prod/stage/dev(对于每个定义)。

https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/deployments?$expand=environments&api-version=6.0

So you'll get the list of all environments and their ids for each definition.因此,您将获得所有环境的列表及其每个定义的 ID。 The ids can be used as definitionEnvironmentId for the other endpoints that seem to have what you're looking for (eg: maxCreatedTime or minCreatedTime ) like this one for Releases: id 可以用作其他端点的definitionEnvironmentId ,这些端点似乎具有您正在寻找的内容(例如: maxCreatedTimeminCreatedTime ),例如发布:

https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/list?view=azure-devops-rest-6.0#uri-parameters https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/list?view=azure-devops-rest-6.0#uri-parameters

Reference:参考:

List of properties that can be expanded - https://docs.microsoft.com/en-us/rest/api/azure/devops/release/definitions/list?view=azure-devops-rest-6.0#releasedefinitionexpands可以扩展的属性列表 - https://docs.microsoft.com/en-us/rest/api/azure/devops/release/definitions/list?view=azure-devops-rest-6.0#releasedefinitionexpands

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM