【问题标题】:Filter Azure DevOps releases with RestAPIs使用 RestAPI 筛选 Azure DevOps 版本
【发布时间】:2021-07-31 12:08:17
【问题描述】:

我一直在处理一个发布 API 的要求,以保留所有生产版本。

代码-

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
{


}
}
}

它保留发布,但要求是仅保留在过去 60 天(或特定日期)内创建的发布定义,并且仅保留在过去 10 天内发生的发布以进行生产。

我找不到任何查询字符串参数来过滤它。我该怎么做?

【问题讨论】:

  • 你试过按创建时间过滤吗?
  • 是的,不知何故,查询字符串参数不会产生输出
  • 苏瑞。我不明白。能详细描述一下吗?

标签: azure powershell azure-devops azure-devops-rest-api


【解决方案1】:

我发现您可以通过将$expand=environments 添加到查询字符串来获取相关环境的列表,例如 prod/stage/dev(针对每个定义)。

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

因此,您将获得所有环境的列表及其每个定义的 ID。 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/definitions/list?view=azure-devops-rest-6.0#releasedefinitionexpands

【讨论】:

    猜你喜欢
    • 2022-12-01
    • 2022-01-01
    • 1970-01-01
    • 2020-10-22
    • 2020-03-30
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    相关资源
    最近更新 更多