我有下面的代码运行 3 个管道,但我想让它运行第一个管道并构建产品,然后运行其他两个而不是所有它们同时运行,所以先运行第一个然后第一个成功后再做另外两个。
variables:
- group: ReleaseVariables
name: 5.8$(rev:.r)
jobs:
- job: Ring_Web_Policy_Editor
timeoutInMinutes: 360
pool:
name: DATA-AUTOMATION-WIN10
demands: Cmd
steps:
- task: TriggerPipeline@1
inputs:
serviceConnection: 'azure-connection-dev'
project: '46da8f34-c009-4433-a2f5-1790a09b6055'
Pipeline: 'Build'
buildDefinition: 'Web Policy Editor'
Branch: '$(Build.SourceBranch)'
- task: TriggerPipeline@1
inputs:
serviceConnection: 'azure-connection-dev'
project: '46da8f34-c009-4433-a2f5-1790a09b6055'
Pipeline: 'Build'
buildDefinition: '(Chrome) Web Policy Editor Automation'
Branch: '$(Build.SourceBranch)'
- task: TriggerPipeline@1
inputs:
serviceConnection: 'azure-connection-dev'
project: '46da8f34-c009-4433-a2f5-1790a09b6055'
Pipeline: 'Build'
buildDefinition: '(Firefox) Web Policy Editor Automation'
Branch: '$(Build.SourceBranch)'
答案 0 :(得分:0)
做第一个,然后在第一个成功后做另外两个。
您可以在第一个触发管道任务之后添加一个 PowerShell 任务。
这是 Powershell 脚本示例:
$token = "PAT"
$url="https://dev.azure.com/{OrganizationName}/{ProjectName}/_apis/build/definitions/{DeefinitionId}?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://dev.azure.com/{OrganizationName}/{ProjectName}/_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:
脚本检查已触发的管道状态(通过轮询)。如果管道完成并且结果成功,则会触发其他两条管道。否则它将等待管道完成构建。
管道示例:
steps:
- task: TriggerPipeline@1
- task: PowerShell@2
- task: TriggerPipeline@1
- task: TriggerPipeline@1
结果示例:
答案 1 :(得分:0)
$Username=${env:USERNAME}
$PAT=${env:PATTOKEN}
$Buildurl2 = "https://dev.azure.com/{ORGANISATION}/{Project}/_apis/build/builds/$($buildid)?api-version=5.0"
$token = -join("$Username", ":", "$PAT")
$headers = @{
Authorization = "Basic "+ [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($token))
'Content-Type' = "application/json"
}
$Buildinfo2 = Invoke-RestMethod -Method Get -ContentType application/json -Uri $Buildurl2 -Headers $headers
$BuildStatus= $Buildinfo2.status
$result = $Buildinfo2.result
echo $result
echo $BuildStatus
上面的答案是正确的,但我必须添加这个来验证我的。