首页 > 解决方案 > 是否有变量可以找到最后一次成功部署到某个阶段?

问题描述

当部署到发布管道中的某个阶段时,当前执行的部分流程是整理在该阶段部署的先前版本,这意味着告诉当前部署先前部署的版本是什么。目前这是使用自定义变量手动完成的,但它似乎应该是可以从代理中检索到的那种东西。鉴于在流水线的较早阶段会出现不同数量的版本并增加修订,因此使用的变量是每个阶段的,而不是知道整个流水线中以前的版本是什么。有谁知道是否有办法找回这个?

标签: azure-devopsazure-pipelines-release-pipeline

解决方案


预定义的发布变量中没有以前的发布变量,但是,您应该能够通过使用管道中的 PowerShell 任务查询 Azure DevOps REST API 来实现此目的。

您的脚本在构建管道的安全上下文中运行。要启用此功能,代理阶段需要打开“允许脚本访问 OAuth 令牌”

List Deployments 端点可用于查询所有部署,但可以对其进行过滤以查找适合您的发布定义和当前环境的成功发布。

使用以下脚本添加 PowerShell 任务:

param( )

# use this function to invoke the scripts locally with a PAT token
function getAuthToken($user, $accessToken) {
  $userString = "{0}:{1}" -f $user, $accessToken
  $base64String = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($userString))
  return "Basic {0}" -f $base64String
}

function getOAuthToken() {
  return "Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN
}

function getServerUrl() {
  return [string]::Format("https://{0}{1}", $env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI, $env:SYSTEM_TEAMPROJECTID)
}

function InvokeRestApi($relativeUri, $authHeader) {
   $baseUrl = getServerUrl
   $url = [Uri]::EscapeUriString((getServerUrl) + $relativeUri + "?api-version=5.0")
   Write-Host "Querying:" $url
   return Invoke-WebRequest $url -Headers @{Authorization=($authHeader)} | ConvertFrom-Json
}

$auth = getAuthToken

$url =  "/release/deployments?definitionId=" + $env:RELEASE_DEFINITIONID
$url += "&definitionEnvironmentId=" + $env:RELEASE_DEFINITIONENVIRONMENTID
$url += "&deploymentStatus=succeeded"
$url += "&queryOrder=descending"

$json = InvokeRestApi $url $auth

$lastRelease = $json.value[0]

推荐阅读