如何通过Azure DevOps YAML流水线为Sonarqube项目添加标签
问题原因
你这个问题的核心原因就是缺失了Sonarqube API的身份认证配置。Sonarqube 8.2社区版默认不允许匿名调用项目配置修改类接口,必须携带有权限的身份凭证才能操作,所以你的curl请求虽然在流水线里返回执行成功,但实际接口返回了401未授权错误,标签自然没有添加成功。
修复步骤
- 生成并存储Sonarqube认证token
- 登录Sonarqube平台,在账号设置中生成一个拥有目标项目「管理」权限的用户token
- 将该token存入Azure DevOps流水线的加密变量中,变量名可设置为
SONAR_TOKEN,避免明文泄露
- 修改curl命令添加认证参数
Sonarqube API使用Basic Auth认证规则,请求时以token作为用户名,密码留空即可,需要在curl命令中添加-u $(SONAR_TOKEN):参数,末尾的冒号不可省略。也可以添加-v参数输出详细请求日志,方便后续排查问题。
修改后的完整流水线任务配置如下:
- task: CmdLine@2 displayName: Add Tag Sonarqube inputs: script: 'curl -v -u $(SONAR_TOKEN): -X POST "你的Sonarqube服务地址/api/project_tags/set?project=NameProject&tags=NameTags"'
其他排查点
如果修改后仍然无法正常添加标签,可以按以下顺序排查:
- 确认接口参数中的
project字段填写的是Sonarqube项目的项目唯一Key,而非项目显示名称,二者不一致会导致接口无法匹配到目标项目 - 确认生成token的用户对目标项目拥有「管理」权限,权限不足会导致接口返回403错误
- 可以先在本地环境执行相同的curl命令验证调用结果,接口调用成功时会返回204状态码无返回体,若返回4xx错误可根据具体错误码调整参数或权限配置
内容的提问来源于stack exchange,提问作者Paulo Roberto
相关产品推荐
相关产品推荐

