如何获取触发Azure pipelineFinal的pipelineA执行状态?
如何获取触发Azure Pipeline的上游Pipeline执行状态?
我有一个主Azure Pipeline(pipelineFinal),需要在pipelineA执行完成后触发。以下是两个Pipeline的YAML配置:
pipelineA 配置
trigger: none jobs: - job: BuildA displayName: "Build Pipeline A" pool: name: my-cidc-pool steps: - powershell: | Write-Host "Pipeline A executed successfully!" displayName: "Run Pipeline A"
pipelineFinal 配置
trigger: none pr: none # Ignore pull requests resources: pipelines: - pipeline: pipelineA source: sample/pipelineA # Name in Azure DevOps branch: develop trigger: branches: include: - develop jobs: - job: CheckAllPipelines displayName: "Check Pipeline Results and Commit" pool: name: my-cidc-pool steps: - task: PowerShell@2 inputs: targetType: 'inline' script: | Write-Host "Waiting ....." Start-Sleep -Seconds 30 - powershell: | Write-Host "Pipeline A Result: $(resources.pipelineA.result)" displayName: "Commit Pipeline Status"
我尝试用$(resources.pipelineA.result)获取pipelineA的执行状态,但无法正常工作,请问有可行的解决方法?
解决方法
方法1:修正资源变量的引用格式
你现在的变量引用格式不对,Azure Pipeline里引用管道资源的执行状态,得用正确的层级格式:$(resources.pipeline.<pipeline-resource-name>.result)。
你的pipelineFinal里定义的管道资源名称是pipelineA,所以正确的写法应该是:
Write-Host "Pipeline A Result: $(resources.pipeline.pipelineA.result)"
这个变量会返回上游Pipeline的执行结果,常见的值有Succeeded、Failed、Canceled等。
方法2:通过Azure DevOps REST API获取(更可靠)
如果变量引用的方式不好用,或者你需要更详细的执行信息,可以调用Azure DevOps的REST API来查询pipelineA的状态。
在pipelineFinal的PowerShell步骤里加下面的脚本(记得把{OrganizationName}和{ProjectName}换成你自己的组织和项目名称):
$pipelineRunId = $(resources.pipeline.pipelineA.runID) $orgName = "{OrganizationName}" $projectName = "{ProjectName}" # 用系统自带的访问令牌调用API $headers = @{ "Authorization" = "Bearer $env:SYSTEM_ACCESSTOKEN" } $url = "https://dev.azure.com/$orgName/$projectName/_apis/pipelines/runs/$pipelineRunId?api-version=7.1-preview.1" $response = Invoke-RestMethod -Uri $url -Headers $headers -Method Get Write-Host "Pipeline A Result: $($response.status)" Write-Host "Pipeline A Detailed Status: $($response.result)"
另外,还要在pipelineFinal的作业里开启脚本访问系统令牌的权限,添加对应的配置:
jobs: - job: CheckAllPipelines displayName: "Check Pipeline Results and Commit" pool: name: my-cidc-pool # 开启系统令牌访问权限 variables: system.accesstoken: $(System.AccessToken) steps: # 你的原有步骤...
内容的提问来源于stack exchange,提问作者homan salimi
相关产品推荐
相关产品推荐

