如何在声纳扫描仪的詹金斯管道中等待后台任务

How to wait for background task in jenkins pipeline for sonar scanner

我有一个使用命令扫描项目的 jenkins 管道

/opt/sonar-scanner/bin/sonar-scanner

但是在jenkins pipeline中完成sonarscan后,结果并没有立即反映在sonarqube中,因为我的项目非常大,在后台任务中至少需要10分钟

所以我正在寻找一个 jenkins 阶段,它不断检查天气声纳扫描是否在后台完成。 完成后,我需要从已完成的 sonarqube 中提取扫描详细信息。

有几种方法可以做到这一点。

如果您使用的是 Jenkins 脚本管道,您应该使用“withSonarQubeEnv”和“waitForQualityGate”管道步骤,并且您应该在 SonarQube 中配置一个 webhook 以连接到 Jenkins。如果一切就绪并正常工作,则“waitForQualityGate”会在执行 webhook 时完成,它会在后台任务完成时执行。

在大多数情况下,这应该就是您所需要的。奇怪的是,在我的企业中,从 sonarqube 到 jenkins 的 webhook 不起作用(有一天当一些 Jenkins 安全配置被更改时停止工作,而且没有人知道为什么)。我放弃了等待修复,所以我不得不深入研究细节。

扫描将创建一个名为“report-task.txt”的文件。你得弄清楚它在哪里。它可能位于“target/sonar/report-task.txt”。该文件的结构类似于 Java 属性文件,但它只有一个您关心的 属性(它可能是文件中定义的唯一 属性),称为“ceTaskId”。

获得该值后,您必须调用 SonarQube REST api:“/api/ce/task?id="。查看 WebApi 文档以获取有关此端点的信息。这将有一个“task.status”属性。如果值不等于“IN_PROGRESS”或“PENDING”,则任务完成。