我正在尝试在prem上的TFS 2017/2018上使用TFS发布管理。
每次创建工件时,我都会创建版本。我还可以在几个环境中部署版本。每当我们有新的工件时,QA-1环境都会更新(一天可以更新几次)。QA-2环境应该每天更新一次。
如何获取可部署到QA-2环境的版本列表?
如果我已经在一夜之间部署了Release-20。当天,我们创建了Release-21、22、23 (全部部署到QA-1)。有没有办法使用API告诉QA-2环境有21、22、23可用?
我试过了,但它显示了已经部署的内容:
https://<server>/<project>/_apis/release/deployments?definitionId=12&definitionEnvironmentId=28它没有显示那些还没有部署的(我正在寻找的)。
谢谢。
发布于 2021-11-10 02:16:33
除非有更好的办法,我现在看不到,否则这可能会奏效。
将最新的已部署版本发布到环境中。
https://<server>/<collection>/<project>/_apis/release/deployments?definitionId=<def_ID>&definitionEnvironmentId=<env_ID>&$top=1&api-version=4.1-preview.2获取从JSON创建此版本的时间。在要在下一个命令中使用的中添加一秒:
https://<server>/<collection>/<project>/_apis/release/releases?definitionId=<def_ID>&minCreatedTime=<datetime>&api-version=4.1-preview.2现在我们可以遍历这个JSON结果中的版本。
下面是理解这一概念的powershell脚本:
param(
[String]$TFSurl = "", # URL to access TFS server
[String]$TFScollection = "", # Collection name in TFS
[String]$TFSproject = "", # Name of the project in TFS
[String]$APIversion = "4.1-preview.2", # Version of API to be used
[String]$definitionId = "", # Release definition ID
[String]$definitionEnvironmentId = "", # Environment ID inside the release definition
$debugTrace = "SilentlyContinue" # SilentlyContinue, Continue
)
$dtformat = 'yyyy-MM-ddTHH:mm:ss.FFFFFK' # DateTime format used by TFS API and returned in Json.
# Get last release that was deployed to the environment to get date and time when it was created
$uri = "$TFSurl/$TFScollection/$TFSproject/_apis/release/deployments?definitionId=$definitionId&definitionEnvironmentId=$definitionEnvironmentId&`$top=1&api-version=$APIversion"
Write-Host "Calling REST: $uri"
$result = Invoke-RestMethod -Method 'Get' -ContentType 'application/json' -uri $uri -UseDefaultCredentials
Write-Host "Release Definition: " $result.value.releaseDefinition.name
Write-Host "Environment name: " $result.value.releaseEnvironment.name
Write-Host "Last release deployed: " $result.value.release.name
Write-Host "Release create date: " $result.value.completedOn
# add 1 second to create date to make sure we don't get the same realease again
$dateTimeNew=[datetime]::ParseExact($result.value.completedOn,$dtformat,$Null).AddSeconds(1).ToString($dtformat)
Write-Host "Release time +1 second:" $dateTimeNew
# Get list of releases avaialble since specified date and time
$uri = "$TFSurl/$TFScollection/$TFSproject/_apis/release/releases?definitionId=$definitionId&minCreatedTime=$dateTimeNew&queryOrder=ascending&api-version=$APIversion"
Write-Host "Calling REST: $uri"
$result = Invoke-RestMethod -Method 'Get' -ContentType 'application/json' -uri $uri -UseDefaultCredentials
foreach ($V in $result.value) {
Write-Host "Release: $($V.releaseDefinition.name) (id=$($V.releaseDefinition.id)) $($V.name) (id=$($V.id))"
}https://stackoverflow.com/questions/69892219
复制相似问题