是否有一个变量可以找到最后成功部署到阶段的变量?

时间:2019-07-18 16:07:55

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

当部署到发布管道中的某个阶段时,当前已完成的过程的一部分是整理该阶段所部署的先前版本,这意味着告诉当前部署先前的部署版本是什么。目前,这是使用自定义变量手动完成的,但似乎应该可以从代理中检索到。鉴于在发行版的较早版本中将发行不同数量的版本,且版本增加,因此使用的变量是每个阶段的,而不是知道整个发行版中的先前版本。 有人知道是否有办法找回这个吗?

1 个答案:

答案 0 :(得分:0)

predefined Release Variables中没有先前的发行版本,但是,您应该能够通过在管道中使用PowerShell任务查询Azure DevOps REST API来实现此目的

您的脚本在构建管道的安全上下文下运行。要启用此功能,请打开agent phase needs to have the "allow scripts to access the OAuth token"

List Deployments endpoint可以用于查询所有部署,但是可以对其进行过滤以找到适合您的版本定义和当前环境的成功版本。

使用以下脚本添加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]