SonarCloud 分析任务在 Azure DevOps PR 管道中失败

SonarCloud analysis task fails in Azure DevOps PR pipeline

我在 Azure DevOps 中有一个由 PR 请求触发的管道。此管道中有三个 SonarCloud 任务 - 在 SonarCloud 上准备分析,(我的项目构建步骤在这里),运行 代码分析,然后发布质量门结果。

当此管道由 PR 触发时,一切正常,直到进入 运行 代码分析任务,然后该任务失败并显示以下错误消息:

INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 9.173s
INFO: Final Memory: 7M/48M
INFO: ------------------------------------------------------------------------
##[error]ERROR: Error during SonarScanner execution
ERROR: Error during SonarScanner execution
##[error]ERROR: Not authorized. Please check the properties sonar.login and sonar.password.
ERROR:
ERROR: Not authorized. Please check the properties sonar.login and sonar.password.
ERROR: 
##[error]The SonarScanner did not complete successfully
The SonarScanner did not complete successfully
##[error]18:32:43.506  Post-processing failed. Exit code: 1
18:32:43.506  Post-processing failed. Exit code: 1

事情是这样的:每当同一管道不是由 PR 触发时,无论是手动还是按每日计划自动触发,它都会在任何分支上毫无问题地运行和通过。如果我触发被拉入的分支的管道(不是通过 PR),它运行并通过。

为什么只在PR触发时授权失败?!为什么它不使用手动触发时 SAME 管道使用的来自 SonarCloud 的相同 PAT 令牌?

Why is authorization failing only when it's triggered by a PR?! Why isn't it using the same PAT token from SonarCloud that the SAME pipelines use when triggered manually??

根据描述,好像是PAT没有足够的权限。

您可以尝试使用 完全访问权限 更新 PAT 以测试:

更新 SonarCloud 中的 PAT。

您可以查看 this document 了解更多详情。

我现在找到了答案,问题是 Azure DevOps 发布的 PAT 没有设置在 SonarCloud 上的正确位置。我把它放在 [SonarCloud Project] -> Administration -> General Settings -> Pull Requests -> Personal access token,而实际上它应该存储在 [SonarCloud Organisation] -> Administration -> Organization settings -> Azure DevOps connectivity management -> Personal Access Token,如下图: