Golang_demo/docs/jenkins-sonarqube-optimization.md

187 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📊 Jenkins SonarQube Scanner 优化指南
## 🔍 问题分析
### 原因
虽然在 Jenkins 全局工具配置中设置了 SonarQube Scanner 自动安装,但 Pipeline 没有正确声明使用该工具,导致:
1. **重复下载**:每次构建都下载 Scanner 和插件
2. **路径查找**:手动查找 Scanner 路径,绕过 Jenkins 工具管理
3. **性能问题**:下载时间长达 5-7 分钟
## ✅ 解决方案
### 1. 正确的 Jenkins 全局配置
`Manage Jenkins` > `Global Tool Configuration` > `SonarQube Scanner` 中:
```
名称: sonarQube (重要这个名称要与Jenkinsfile中一致)
自动安装: ✅ 勾选
版本: SonarQube Scanner 7.1.0.4889
```
### 2. Jenkinsfile 优化
#### ✅ **正确的工具声明**
```groovy
pipeline {
agent any
tools {
go 'go'
sonarRunnerInstallation 'sonarQube' // 关键声明SonarQube工具
}
// ...
}
```
#### ✅ **简化的扫描阶段**
```groovy
stage('代码质量扫描') {
steps {
script {
withSonarQubeEnv('sonarQube') {
sh '''
# 直接使用sonar-scanner命令
sonar-scanner \
-Dsonar.projectKey=${PROJECT_NAME} \
-Dsonar.projectName="${PROJECT_NAME}" \
-Dsonar.projectVersion=${BUILD_NUMBER} \
-Dsonar.sources=. \
-Dsonar.exclusions=**/*_test.go,**/vendor/** \
-Dsonar.go.coverage.reportPaths=coverage.out
'''
}
}
}
}
```
## 🚀 性能优化建议
### 1. 工具缓存优化
在 Jenkins 主机上创建工具缓存目录:
```bash
# 在Jenkins服务器上执行
sudo mkdir -p /var/jenkins_home/tools_cache
sudo chown jenkins:jenkins /var/jenkins_home/tools_cache
```
### 2. 网络优化
如果网络下载慢,可以考虑:
#### 方案 A手动预安装
```bash
# 在Jenkins容器内执行
cd /var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.1.0.4889-linux-aarch64.zip
unzip sonar-scanner-cli-7.1.0.4889-linux-aarch64.zip
mv sonar-scanner-7.1.0.4889-linux-aarch64 sonarQube
```
#### 方案 BDocker 镜像预安装
创建自定义 Jenkins 镜像:
```dockerfile
FROM jenkins/jenkins:lts
# 预安装SonarQube Scanner
USER root
RUN apt-get update && \
apt-get install -y wget unzip && \
mkdir -p /opt/sonar-scanner && \
cd /opt/sonar-scanner && \
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.1.0.4889-linux-aarch64.zip && \
unzip sonar-scanner-cli-7.1.0.4889-linux-aarch64.zip && \
mv sonar-scanner-7.1.0.4889-linux-aarch64 scanner && \
ln -s /opt/sonar-scanner/scanner/bin/sonar-scanner /usr/local/bin/sonar-scanner
USER jenkins
```
### 3. 条件扫描
只在特定分支执行扫描:
```groovy
stage('代码质量扫描') {
when {
anyOf {
branch 'main'
branch 'develop'
changeRequest() // Pull Request时执行
}
}
// ... 扫描逻辑
}
```
## 🔧 故障排除
### 常见问题
1. **工具名称不匹配**
```
错误No such tool 'sonarQube'
解决检查Jenkins全局配置中的工具名称
```
2. **权限问题**
```bash
# 检查工具目录权限
ls -la /var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/
```
3. **网络问题**
```bash
# 测试网络连接
curl -I https://binaries.sonarsource.com/
```
### 验证配置
运行以下命令验证配置:
```bash
# 在Jenkins Pipeline中添加调试步骤
stage('调试SonarQube配置') {
steps {
sh '''
echo "SONAR_SCANNER_HOME: $SONAR_SCANNER_HOME"
which sonar-scanner || echo "未找到sonar-scanner"
sonar-scanner --version || echo "版本检查失败"
'''
}
}
```
## 📈 性能对比
| 配置方式 | 首次构建时间 | 后续构建时间 | 网络依赖 |
| ------------ | ------------ | ------------ | -------- |
| 手动查找路径 | 7-10 分钟 | 7-10 分钟 | 高 |
| 正确工具声明 | 2-3 分钟 | 30-60 秒 | 低 |
| 预安装镜像 | 30-60 秒 | 30-60 秒 | 无 |
## 🎯 最佳实践
1. **始终使用 tools 声明**:让 Jenkins 管理工具生命周期
2. **统一命名约定**:工具名称保持一致
3. **条件执行**:不是每次构建都需要代码扫描
4. **缓存优化**:利用 Jenkins 的工具缓存机制
5. **网络优化**:考虑本地化部署或镜像加速
通过这些优化SonarQube 扫描时间可以从 7 分钟降低到 1 分钟以内!