【问题标题】:Get task status in next step在下一步中获取任务状态
【发布时间】:2020-03-12 10:42:22
【问题描述】:

我有一个任务 Maven@3 正在运行我的测试,我想在下一个任务中获得它的状态。有没有变量可以获取?

例如:

  - task: Maven@3
    displayName: UnitTest
    name: UnitTest
    inputs:
      ...maven options...
      goals: 'test'
  - script: echo $(succeeded('UnitTest'))

在脚本步骤中,我想打印 UnitTest 任务状态。

【问题讨论】:

    标签: azure-pipelines


    【解决方案1】:

    解决方法是使用多作业管道将 UnitTest 任务分离到单独的作业和依赖于它的其他作业。然后您可以使用表达式$[ dependencies.A.result ] 来获取 UnitTest 状态。请查看以下示例:

    jobs:
    
    - job: A
      pool: 
        vmImage: windows-latest
      steps:
        - checkout: none  #use checkout step to void syncing repo
    
        - task: Maven@3
    
    - job: B 
      dependsOn: A
      condition: always()
      variables:
        testStatus: $[ dependencies.A.result ]
      steps:
        - script: echo $(testStatus) 
    

    您也可以submit a feature request(单击建议功能并选择 Azure devops)支持变量以获取 Microsoft 开发团队的任务状态。

    更新:

    使用 Azure devops rest api 获取任务状态。以下是脚本:

    - powershell: |  
        $url = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/timeline?api-version=5.1"
    
        $result = Invoke-RestMethod -Uri $url -Headers @{authorization = "Bearer $(system.accesstoken)"} -ContentType "application/json" -Method get
    
        $taskResult = $result.records | where {$_.name -eq "UnitTest"} | select result
    
        echo $taskResult 
      condition: always()
    

    【讨论】:

    • 感谢您的回答,我已经测试过了,如果我的工作中有多个任务,它就不起作用。例如,第一个任务失败并将 Agent JobStatus 设置为失败,然后第二个任务成功,但 Agent Job Status 仍然标记为失败。
    • 嗨@victorgallet 我更新了上面的答案,请检查一下。
    • 嗨@victorgallet 你检查了上面的解决方法吗?它可以作为您问题的答案吗?
    • 我正在测试它。事实上,它不适用于多个任务。例如,我的第一个任务失败了,所以它转到带有failed() 条件的脚本。然后,第二个任务成功了,它仍然进入带有failed()条件的脚本。
    • 是的,你是对的,第一个解决方法不适用于多个任务。您能否尝试使用多个作业作为解决方法。
    猜你喜欢
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多