代码之家  ›  专栏  ›  技术社区  ›  InteXX

如何在tfs中批量发布?

  •  0
  • InteXX  · 技术社区  · 6 年前

    在TFS 2018中,我们可以“在生成过程中进行批处理更改”,以便如果在生成过程中发生Git推送,则第二个将等待 first to complete 是的。这样,我们就可以阻止多个生成同时运行。

    然而,对于发行版,似乎没有类似的选择。

    鉴于我的带宽非常有限,一个给定的版本可能需要比触发它的构建更长的时间才能完成。很有可能,第二个构建,即使是排队的时候,也会触发一个正在进行的新版本。我需要将整个管道排队,直到当前版本完成,而不仅仅是生成。

    我可以用一系列笨拙而脆弱的powershell脚本(在当前状态下配置起来很乏味)来完成这项工作,但如果可能的话,我希望有一些更可靠的脚本。

    我怎样才能做到最好?


    测试管线状态.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"
    }
    

    获取-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
    

    整套释放装置.ps1

    [CmdletBinding()]
    param(
      [Parameter(Mandatory)][string] $StatusFilePath
    )
    
    Write-Output "Marking pipeline as complete"
    Set-Content $StatusFilePath -Value "Stopped"
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Daniel Mann    6 年前

    您可以在发行版定义编辑器中完成这项工作,无需特殊要求。对于该版本中的所有环境,在预部署条件下(在其中设置预部署批准和入口),展开部署队列设置并将并行部署的数量更改为1,随后的版本设置为最新部署,并取消其他版本。

    这样,如果您运行的是release 1和release 2、3、4、5和6,那么它将在1完成时取消2-5并部署6。

    enter image description here