【问题标题】:Azure devops build pipeline depends on other build pipelineAzure devops 构建管道依赖于其他构建管道
【发布时间】:2021-09-27 20:42:58
【问题描述】:

我有四个项目。一个是其他三个项目的共同项目。

其他三个项目构建管道依赖于通用构建管道。当公共构建管道正在进行时,其他三个构建管道应该等到公共构建完成。如何在本地 azure devops 中实现这一目标?

【问题讨论】:

    标签: azure azure-devops


    【解决方案1】:

    如何在本地 azure devops 中实现这一目标?

    您可以在其他三个管道的开头添加一个 PowerShell 任务。

    这是 Powershell 脚本示例:

    $token = "PAT"
    
    $url="https://{instance}/{collection}/{project}/_apis/build/definitions/{definitionId}?includeLatestBuilds=true&api-version=5.1"
    
    $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
    
    
    
    $response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
    
    $buildid = $response.latestBuild.id
    
    $success = $false
    
    do{
        try{
        $Buildurl2 = "https://{instance}/{collection}/{project}/_apis/build/builds/$($buildid)?api-version=5.0"
        $Buildinfo2 = Invoke-RestMethod -Method Get -ContentType application/json -Uri $Buildurl2 -Headers @{Authorization=("Basic {0}" -f $token)}
        $BuildStatus= $Buildinfo2.status 
        $result = $Buildinfo2.result
        echo $result
        echo $BuildStatus
     
       
            if($BuildStatus -eq "completed") {            
    
                write-output "No Running Pipeline, starting Next Pipeline"
                $success = $true 
                           
          } else {   
                Write-output "Pipeline Build In Progress, Waiting for it to finish!"  
                Write-output "Next attempt in 30 seconds"
                Start-sleep -Seconds 30         
    
                }
        
          
        }
        catch{
            Write-output "catch - Next attempt in 30 seconds"
            write-output "1"
            Start-sleep -Seconds 30
          # Put the start-sleep in the catch statemtnt so we
          # don't sleep if the condition is true and waste time
        }
        
        $count++
        
    }until($count -eq 2000 -or $success -eq $true )
    if ($result -ne "succeeded")
    {
       echo "##vso[task.logissue type=error]Something went very wrong."
    }
    
    if(-not($success)){exit}
    

    说明:

    这个powershell脚本运行以下两个Rest API:

    Definitions - Get

    Builds - Get

    脚本检查正在进行的管道状态(通过轮询)。如果管道完成并且结果成功,它将运行其他三个管道。否则它将等待管道完成构建。

    结果示例:

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 1970-01-01
      • 2022-11-24
      • 2022-06-10
      • 2020-01-30
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 2019-12-05
      相关资源
      最近更新 更多