引发警告时更改 Azure DevOps 管道构建状态

And*_*rew 8 azure-devops azure-devops-pipelines

我们有一个 Azure DevOps 管道,它使用带有 Azure DevOps Server 2019 的自托管 Windows 代理。该管道运行我们的前端测试,没有任何问题。然而,有时我们的 linting 步骤会发现它作为警告抛出的问题(例如未使用的变量)。这就是我们希望它做的,但问题是这些警告没有被提升。因此,查看它们的唯一方法是查看构建执行。

我们可以通过向 linting 命令添加 vso 格式化程序来解决这个问题:npm run nx run-many -- --target="lint" --all --skip-nx-cache=true --parallel --format=vso。所以现在警告是这样抛出的:

警告截图

如绿色框中所示,警告正确显示。然而,在红色圆圈中,构建、作业和 linting 任务的状态都是成功。有没有办法可以将此构建、作业和任务标记为警告,以便我们知道要进一步查看?感谢您的帮助,如果我可以提供更多信息,请告诉我。

Kev*_*SFT 9

您可以在管道末尾添加一个powershell任务,然后运行Rest API(Timeline - Get)来遍历上一个任务中的警告消息。最后可以使用logging命令来设置管道状态

这是 PowerShell 示例:

$token = "PAT"

$url=" https://{instance}/{collection}/{project}/_apis/build/builds/$(build.buildid)/timeline?api-version=5.0"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$count = 0

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json

ForEach( $issues in $response.records.issues )
{
  if($issues.type -eq "warning")
  {
    echo $issues.Message
    $count ++
  }
  
} 

echo $count

if($count -ne 0 )
{ 

  Write-Host "##vso[task.complete result=SucceededWithIssues;]"
   
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

  • 效果非常好,非常感谢!我唯一需要更改的是将 url 从 `GET https://{instance}/{collection}/{project}/_apis/build/builds/$(build.buildid)/timeline?api-version=5.0` 更改为`http://{instance}/tfs/{collection}/{project}/_apis/build/builds/$(build.buildid)/timeline?api-version=5.0`。我认为 GET 可能是一个错误,但其余的可能只是我的具体情况。(还需要获得实际的 PAT) (3认同)