Как пакетные выпуски в TFS? - PullRequest
0 голосов
/ 29 июня 2018

В TFS 2018 мы можем «Пакетные изменения во время сборки», чтобы, если во время сборки происходило нажатие Git, второй ожидает, пока первым завершит . Таким образом, мы можем остановить одновременное выполнение нескольких сборок.

Тем не менее, похоже, что аналогичная опция для релизов.

Учитывая мою сильно ограниченную пропускную способность, данный выпуск может занять гораздо больше времени, чем сборка, которая его инициировала. Вполне возможно, что эта вторая сборка, даже в очереди, вызовет новую версию, когда она уже выполняется. Мне нужно поставить в очередь весь конвейер до завершения текущего выпуска, а не только сборку.

Я смог сделать это с помощью неуклюжей и хрупкой серии скриптов PowerShell (которую очень сложно настраивать в ее текущем состоянии), но я бы хотел что-то более солидное, если это возможно.

Как мне лучше всего это сделать?


Тест-PipelineStatus.ps1

$BuildDefinitionName = (Get-Item Env:BUILD_DEFINITIONNAME).Value
$ArtifactsDirectory = (Get-Item Env:BUILD_ARTIFACTSTAGINGDIRECTORY).Value
$SourcesDirectory = (Get-Item Env:BUILD_SOURCESDIRECTORY).Value
$LocatorFilePath = "$ArtifactsDirectory\Locator.txt"
$StatusDirectory = "$SourcesDirectory\Pipeline"
$StatusFilePath = "$StatusDirectory\Status.txt"

Set-Content $LocatorFilePath $StatusFilePath

If ((Test-Path $StatusDirectory) -eq $False) {
  Write-Output "Creating pipeline status directory"
  New-Item $StatusDirectory -ItemType Directory
}

Write-Output "Getting current pipeline status"

If (Test-Path $StatusFilePath) {
  $Status = Get-Content $StatusFilePath

  If ($Status -eq "Stopped") {
    Write-Output "Setting current pipeline status to [Running]"
    Set-Content $StatusFilePath "Running"
  } Else {
    Write-Error "Pipeline [$BuildDefinitionName] is already in progress. Failing this build."
    Exit 1
  }
} Else {
  Write-Output "Setting current pipeline status to [Running]"
  Set-Content $StatusFilePath "Running"
}

Get-StatusFilePath.ps1

$ArtifactsDirectory = (Get-Item Env:SYSTEM_ARTIFACTSDIRECTORY).Value
$ReleaseDefinition = (Get-Item Env:RELEASE_DEFINITIONNAME).Value
$LocatorFilePath = "$ArtifactsDirectory\$ReleaseDefinition\drop\Locator.txt"
$StatusFilePath = Get-Content $LocatorFilePath

Write-Output "Setting variable [StatusFilePath] to [$StatusFilePath]"
Write-Host "##vso[task.setvariable variable=StatusFilePath]$StatusFilePath"

Remove-Item $LocatorFilePath

Set-ReleaseComplete.ps1

[CmdletBinding()]
param(
  [Parameter(Mandatory)][string] $StatusFilePath
)

Write-Output "Marking pipeline as complete"
Set-Content $StatusFilePath -Value "Stopped"

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете сделать это в редакторе определения релиза, ничего особенного не требуется. Для всех сред в выпуске в условиях, предшествующих развертыванию (где вы устанавливаете разрешения и ворота перед развертыванием), расширьте параметры очереди развертывания и измените число параллельных развертываний на 1, а последующие выпуски будут настроены для развертывания. последний и отмените остальные.

Таким образом, если вы работаете с выпуском 1 и выпуском в очередь выпусков 2, 3, 4, 5 и 6, он отменит 2-5 и развернет 6 после завершения 1.

enter image description here

...