如何使基于 Fortify 扫描结果的 TFS 构建失败

How to fail a TFS build based on Fortify scan results

在 PowerShell 查询中,如何从 .NET 代码的 Fortify 安全扫描中获取新的严重或高漏洞的计数?查询不应包含 SSC 服务器上已记录为 "not an issue" 或 "suppressed".

的任何结果

我们有 Team Foundation Server 2017u2。作为构建和发布过程的一部分,我们执行 HP/Micro Focus Fortify 安全扫描并将结果上传到 Fortify SSC 服务器。每当扫描器在代码中检测到新的关键或高发现时,我们正试图使 build/release 失败。我们使用 TFS 的 Micro Focus Fortify 插件来配置扫描步骤并上传到 SSC:(Fortify TFS plugin)。之后我们添加了一个 PowerShell 任务以尝试查询结果并在需要时使构建失败。

我们找到的示例和建议使用 FPRUtility 查询从当前扫描生成的 .fpr 文件。但是,当前的扫描不包括开发人员之前输入的任何记录误报或抑制问题的内容。这导致我们的构建总是失败。

我尝试查看 REST API 文档,但是,虽然 Swagger 使查看参数和合同变得容易,但我找不到任何好的文档来说明所有不同的控制器是什么或我需要什么编排一系列调用以获取我想要的数据。

我找到了我需要的答案。扫描并上传到 SSC 完成后,您可以从 PowerShell 脚本调用问题 REST API,格式如下:

[host:port]/ssc/api/v1/projectVersions/[versionid]/issues?q=[fortify+priority+order]:high+OR+[fortify+priority+order]:critical&qm=issues

因此,在 TFS 构建步骤中执行此操作的简化 PowerShell 脚本如下所示:

    $jsonResults  = Invoke-RestMethod -Method Get -Uri "https://{host:port}/ssc/api/v1/projectVersions/{projectVersionNumberHere}/issues?q=[fortify+priority+order]:high+OR+[fortify+priority+order]:critical&qm=issues" 
    $undocumentedFindings = $jsonResults.data | where {$_.primaryTag -eq $null}
    if ($undocumentedFindings.Count -gt 0)
    {
        Write-Error "Fortify detected $undocumentedFindings.Count undocumented critical and high vulnerabilities. These findings must be remediated or documented before the build can continue."
    }