Yirmi Oppenhime
Yirmi Oppenhime

Reputation: 105

Azure DevOps Release - Trigger Build pipeline and wait to finish

I'm working on a Release pipeline in Azure DevOps. The final solution should be as below:

  1. New Artifact package
  2. Stage 1

    2.1 Run Build pipeline and wait to finish

    2.2 If previous step succeeded - Run another build pipeline

I've tried two extensions but neither of them is working. Do you have any successful way to achieve this functionality?

Upvotes: 0

Views: 3243

Answers (1)

Kim Xu-MSFT
Kim Xu-MSFT

Reputation: 2196

1.Intasll this Azure DevOps Extension

enter image description here

2.In your another build pipeline, add "trigger build task" to trigger the build, add PowerShell task to check the status of the pipeline(by polling) that is in process. If the pipeline is completed and the result is successful, it will run the other three pipelines. Or it will wait for the pipeline finishing the build.

enter image description here

$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 -eq "succeeded")
{
   echo "##vso[task.setvariable variable=doThing]Yes"
}

if(-not($success)){exit}

3.Add condition to the next task:

eq(variables['doThing'], 'Yes')

enter image description here

Upvotes: 1

Related Questions