如何通过API获取Jenkins构建中使用的SonarQube项目密钥与名称
可行,以下是几种程序化获取的方法
1. 从Jenkins构建参数/环境变量提取
如果你的Jenkins流水线是通过参数化构建传入SonarQube项目密钥、名称,或者在流水线脚本中将这些值存入了环境变量,可直接通过Jenkins REST API获取:
- 调用构建详情API,请求格式:
http://<jenkins地址>/job/<任务名>/<构建编号>/api/json - 可通过
tree参数过滤返回字段,比如只取参数:curl -u <用户名>:<API令牌> "http://jenkins-url/job/my-sonar-job/100/api/json?tree=parameters[name,value]" - 解析返回的JSON,找到对应参数(比如你定义的
SONAR_PROJECT_KEY、SONAR_PROJECT_NAME)的value值即可。 - 如果是流水线脚本中设置的环境变量,可将API请求的
tree参数改为envVars,获取构建的环境变量集合后提取目标值。
2. 从构建日志中匹配提取
如果SonarQube分析命令(比如sonar-scanner)在构建日志中明文输出了项目密钥和名称(例如-Dsonar.projectKey=my-project-key -Dsonar.projectName=MyProject),可通过API拉取日志后用正则匹配:
- 拉取构建日志的API请求:
http://<jenkins地址>/job/<任务名>/<构建编号>/logText/progressiveText - 用正则表达式匹配关键参数:
- 匹配项目密钥:
-Dsonar.projectKey=([^\s]+) - 匹配项目名称:
-Dsonar.projectName=([^\s]+)
- 匹配项目密钥:
- 示例curl命令结合grep提取:
curl -u <用户名>:<API令牌> "http://jenkins-url/job/my-sonar-job/100/logText/progressiveText" | grep -oP '-Dsonar.projectKey=\K[^\s]+'
3. 从Jenkins SonarQube插件的构建动作中获取
如果使用了官方SonarQube Jenkins插件触发分析,插件会将SonarQube项目信息绑定到构建动作中:
- 调用构建详情API,在返回的
actions数组中查找SonarQube相关的动作对象(通常包含sonarQubeReport或类似关键字) - 该对象内一般会直接包含
projectKey、projectName等字段,直接解析即可。
注意事项
- 所有API调用需要使用Jenkins的用户名和API令牌进行身份验证,令牌可在Jenkins个人设置中生成。
- 具体字段名需匹配你流水线中实际定义的参数/变量名,比如你可能用自定义的参数名而非
SONAR_PROJECT_KEY,需对应调整。
内容的提问来源于stack exchange,提问作者KUSHAL MUDDANA
相关产品推荐
相关产品推荐

