azure-devops - 是否有变量可以找到最后一次成功部署到某个阶段?
问题描述
当部署到发布管道中的某个阶段时,当前执行的部分流程是整理在该阶段部署的先前版本,这意味着告诉当前部署先前部署的版本是什么。目前这是使用自定义变量手动完成的,但它似乎应该是可以从代理中检索到的那种东西。鉴于在流水线的较早阶段会出现不同数量的版本并增加修订,因此使用的变量是每个阶段的,而不是知道整个流水线中以前的版本是什么。有谁知道是否有办法找回这个?
解决方案
预定义的发布变量中没有以前的发布变量,但是,您应该能够通过使用管道中的 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]
推荐阅读
- ocaml - 定义ocaml函数的方法
- html - 在更新面板中回发后,href 不起作用
- sparql - SPARQL - 无法按国家/地区过滤
- light-4j - 在 Light 4j 中执行处理程序
- android - 我应该在 Fragment 中的什么生命周期状态下执行异步任务?
- google-chrome - Google chrom 错误的数字字符
- c# - Magento 1 站点中的 Oauth 启动失败
- python-3.x - tkinter 框架不随画布展开
- excel - VBA Range.Cells 未知方法或数据成员
- assembly - 由 inc BYTE PTR [rip+0xc] 引起的 SIGSEGV