118 lines
3.0 KiB
Markdown
118 lines
3.0 KiB
Markdown
|
# 🔧 SonarQube Scanner 工具声明修复指南
|
|||
|
|
|||
|
## 🔍 问题分析
|
|||
|
|
|||
|
从 Jenkins 错误信息可以看出:
|
|||
|
|
|||
|
```
|
|||
|
Invalid tool type "sonarRunnerInstallation".
|
|||
|
Valid tool types: [..., hudson.plugins.sonar.SonarRunnerInstallation, ...]
|
|||
|
```
|
|||
|
|
|||
|
**问题根源**:
|
|||
|
|
|||
|
- ❌ 错误:`sonarRunnerInstallation 'sonarQube'`
|
|||
|
- ✅ 正确:需要在 pipeline 中使用`tool`方法动态获取
|
|||
|
|
|||
|
## ✅ 正确的解决方案
|
|||
|
|
|||
|
### 方案 1:使用 tool 方法(推荐)
|
|||
|
|
|||
|
```groovy
|
|||
|
stage('代码质量扫描') {
|
|||
|
steps {
|
|||
|
script {
|
|||
|
withSonarQubeEnv('sonarQube') {
|
|||
|
// 动态获取SonarQube Scanner工具
|
|||
|
def scannerHome = tool name: 'sonarQube', type: 'hudson.plugins.sonar.SonarRunnerInstallation'
|
|||
|
|
|||
|
sh """
|
|||
|
${scannerHome}/bin/sonar-scanner \\
|
|||
|
-Dsonar.projectKey=\${PROJECT_KEY} \\
|
|||
|
-Dsonar.sources=.
|
|||
|
"""
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 方案 2:PATH 方式(如果 Scanner 已在 PATH 中)
|
|||
|
|
|||
|
```groovy
|
|||
|
stage('代码质量扫描') {
|
|||
|
steps {
|
|||
|
script {
|
|||
|
withSonarQubeEnv('sonarQube') {
|
|||
|
sh '''
|
|||
|
sonar-scanner \\
|
|||
|
-Dsonar.projectKey=${PROJECT_KEY} \\
|
|||
|
-Dsonar.sources=.
|
|||
|
'''
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 方案 3:手动路径查找(备用方案)
|
|||
|
|
|||
|
```groovy
|
|||
|
sh '''
|
|||
|
# 查找Scanner路径
|
|||
|
SCANNER_PATH=""
|
|||
|
for path in \
|
|||
|
"/var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonarQube/bin/sonar-scanner" \
|
|||
|
"$(which sonar-scanner 2>/dev/null)"; do
|
|||
|
if [ -f "$path" ]; then
|
|||
|
SCANNER_PATH="$path"
|
|||
|
break
|
|||
|
fi
|
|||
|
done
|
|||
|
|
|||
|
if [ -n "$SCANNER_PATH" ]; then
|
|||
|
"$SCANNER_PATH" -Dsonar.projectKey=${PROJECT_KEY}
|
|||
|
else
|
|||
|
echo "❌ 未找到SonarQube Scanner"
|
|||
|
fi
|
|||
|
'''
|
|||
|
```
|
|||
|
|
|||
|
## 🎯 最佳实践
|
|||
|
|
|||
|
1. **不要在 tools 块中声明 SonarQube Scanner**
|
|||
|
2. **使用 tool 方法动态获取工具路径**
|
|||
|
3. **提供备用方案以提高可靠性**
|
|||
|
4. **在环境检查阶段验证工具可用性**
|
|||
|
|
|||
|
## 🔧 Jenkins 配置要求
|
|||
|
|
|||
|
确保 Jenkins 中正确配置:
|
|||
|
|
|||
|
1. **Global Tool Configuration**:
|
|||
|
|
|||
|
```
|
|||
|
SonarQube Scanner
|
|||
|
├─ 名称: sonarQube
|
|||
|
├─ 自动安装: ✅
|
|||
|
└─ 版本: SonarQube Scanner 7.1.0.4889
|
|||
|
```
|
|||
|
|
|||
|
2. **System Configuration**:
|
|||
|
```
|
|||
|
SonarQube servers
|
|||
|
├─ 名称: sonarQube
|
|||
|
├─ 服务器URL: http://your-sonar-server:9000
|
|||
|
└─ 认证Token: 配置在Credentials中
|
|||
|
```
|
|||
|
|
|||
|
## 📊 性能优化效果
|
|||
|
|
|||
|
| 修复前 | 修复后 |
|
|||
|
| ------------------ | --------------------------- |
|
|||
|
| 语法错误,构建失败 | 构建成功 |
|
|||
|
| 无法使用缓存工具 | 使用 Jenkins 管理的缓存工具 |
|
|||
|
| 重复下载(7 分钟) | 快速启动(30 秒) |
|
|||
|
|
|||
|
通过这个修复,你的 SonarQube Scanner 将正确使用 Jenkins 的工具管理系统,避免重复下载问题。
|