主题
04 SonarQube 部署
4.1 架构
- PostgreSQL 16(alpine):SonarQube 后端库,PVC 5Gi(nfs)
- SonarQube LTS Community:Deployment 单副本,PVC 10Gi(nfs)
- 特权 initContainer(busybox):调整节点内核参数
vm.max_map_count=524288、fs.file-max=131072(内嵌 Elasticsearch 强制要求) - Service:NodePort 30900(集群内访问
http://sonarqube.sonarqube.svc.cluster.local:9000)
清单文件:
deploy/sonarqube/00-namespace-secret.yaml # namespace + DB 凭据(sonar / xxx)
deploy/sonarqube/10-postgres.yaml # PostgreSQL 16
deploy/sonarqube/20-sonarqube.yaml # SonarQube + initContainer + Service4.2 部署
bash
export KUBECONFIG=~/.kube/config-122.31
K=./tools/kubectl
$K apply -f deploy/sonarqube/00-namespace-secret.yaml
$K apply -f deploy/sonarqube/10-postgres.yaml
$K apply -f deploy/sonarqube/20-sonarqube.yaml
$K -n sonarqube get pods -wSonarQube 首次启动需初始化数据库与 ES 索引,约 2-5 分钟 Ready。
4.3 初始化:修改 admin 密码
默认账号 admin / xxx,首次登录强制改密。用 API 直接修改:
bash
curl -s -u 'admin:xxx' -X POST \
'http://192.168.122.23:30900/api/users/change_password?login=admin&previousPassword=xxx'4.4 生成分析 Token 并接入 Jenkins
bash
# 1) 生成 token(名称 jenkins)
TOKEN=$(curl -s -u 'admin:xxx' -X POST \
'http://192.168.122.23:30900/api/user_tokens/generate?name=jenkins' | jq -r '.token')
echo "$TOKEN"
# 2) 更新 Jenkins 命名空间中的 secret(JCasC 凭据来源)
$K -n jenkins create secret generic sonar-credentials \
--from-literal=sonar-token="$TOKEN" --dry-run=client -o yaml | $K apply -f -
# 3) 重启 Jenkins controller 使挂载的 secret 生效并重新加载 JCasC
$K -n jenkins rollout restart statefulset jenkins原理:
controller.existingSecret: sonar-credentials将 keysonar-token挂载到/run/secrets/additional/sonar-token,JCasC 中以${readFile:/run/secrets/additional/sonar-token}注入到 ID 为sonarqube-token的 Jenkins 凭据;SonarQube 服务器地址http://sonarqube.sonarqube.svc.cluster.local:9000在 JCasC 的unclassified.sonarGlobalConfiguration中配置。
4.6 执行结果
- SonarQube 版本:9.9.8.100196(LTS Community),状态 UP
- admin 密码已修改(API 返回 204)
- 分析 token 已生成(
squ_7a3d...),写入 secretjenkins/sonar-credentials - JCasC reload 后 Jenkins 凭据
sonarqube-token生效(无需重启 controller) - Webhook 已创建:
http://jenkins.jenkins.svc.cluster.local:8080/sonarqube-webhook/(waitForQualityGate依赖 webhook 秒级回调;未配置时会轮询超时导致构建 ABORTED——本次实测踩坑后补上)
4.5 验证
bash
# 系统状态应为 UP
curl -s -u 'admin:xxx' http://192.168.122.23:30900/api/system/status | jq .浏览器访问 http://192.168.122.23:30900 ,账号 admin / xxx。