# Jenkins 生产实践:RBAC、Pipeline、分布式构建与 SonarQube 集成
本文根据实际生产笔记整理,覆盖 Jenkins 部署、权限管理、Pipeline、Agent 分布式构建、GitLab 触发、SonarQube 质量门禁、制品交付和回滚。原笔记中的旧版本命令仅用于理解流程,生产部署请使用当前受支持版本,并先在测试环境验证。
## 一、DevOps 工具链
一个完整交付平台通常包括:项目管理(Jira/Redmine)、代码管理(GitLab)、持续交付(Jenkins/GitLab CI)、运维平台与监控。Jenkins 负责把代码拉取、编译、测试、扫描、制品归档、部署和通知串成可审计流水线。
## 二、生产部署原则
Jenkins Controller 只承担任务编排,不直接执行构建。构建工作放到独立 Agent,避免编译任务耗尽 Controller 的 CPU、内存和磁盘。
安装完成后立即完成:创建管理员、修改默认口令、配置 HTTPS、限制管理入口、关闭匿名访问、安装必要插件、配置备份和监控。插件越少越好,升级前先备份 JENKINS_HOME 并在测试环境验证。
常用检查:
```bash
systemctl status jenkins
journalctl -u jenkins -f
df -h /var/lib/jenkins
du -sh /var/lib/jenkins/workspace/* | sort -h
```
## 三、RBAC 权限管理
安装 Role-based Authorization Strategy 后,按“用户—角色—项目”分配权限:
1. 创建个人账号,禁止多人共享管理员账号。
2. 创建全局角色,例如管理员、审计员、普通用户。
3. 创建项目角色,用正则限制可访问的 Job 或文件夹。
4. 把用户或用户组绑定到角色。
5. 使用测试账号验证最小权限,避免误授予 Configure、Credentials、Script Console。
生产环境建议用 Folder 隔离项目,凭据保存在 Jenkins Credentials 中,Pipeline 只引用凭据 ID,绝不能把密码、Token 或私钥写进 Jenkinsfile。
## 四、Pipeline 核心概念
- Stage:构建阶段,如 Build、Test、Scan、Deploy。
- Agent:执行步骤的节点或容器。
- Step:最小操作单元,如 sh、git、archiveArtifacts。
- Jenkinsfile:应随代码进入 Git 管理,接受审查和版本追踪。
推荐声明式流水线:
```groovy
pipeline {
agent { label 'linux-builder' }
options { timestamps(); timeout(time: 30, unit: 'MINUTES') }
stages {
stage('Checkout') { steps { checkout scm } }
stage('Build') { steps { sh 'mvn -B clean package' } }
stage('Test') { steps { sh 'mvn -B test' } }
stage('Quality') { steps { withSonarQubeEnv('sonarqube') { sh 'mvn sonar:sonar' } } }
stage('Archive') { steps { archiveArtifacts artifacts: 'target/*.jar', fingerprint: true } }
}
post { always { junit allowEmptyResults: true, testResults: 'target/surefire-reports/*.xml' } }
}
```
## 五、分布式构建
Agent 节点安装所需 JDK、Git、Maven 或容器运行时,配置独立工作目录和标签。Job 通过标签选择节点。Agent 使用非 root 账号运行,限制 sudo 权限,并定期清理 workspace、缓存和历史制品。
上线前测试 Agent 断线、Controller 重启、任务超时和磁盘占满场景。
## 六、GitLab 自动触发
在 GitLab 创建专用 Token 或 Deploy Key,在 Jenkins 配置连接和 Webhook。推送或合并请求触发流水线,Jenkins 将构建状态回写 GitLab。Webhook 必须校验 Secret Token,并限制来源地址。
推荐流程:开发分支提交 → 单元测试与扫描 → 合并请求审核 → 主分支构建 → 生成不可变制品 → 测试环境 → 人工审批 → 灰度生产。
## 七、SonarQube 质量门禁
Jenkins 安装 SonarQube Scanner 插件,配置服务器地址和 Token;构建节点安装 Scanner,或直接使用 Maven/Gradle 插件。扫描后必须等待 Quality Gate,未达到覆盖率、重复率、漏洞和严重缺陷阈值时终止后续部署。
注意:旧笔记中的 SonarQube 6.x、MySQL 5.6 和 Java 8 方案已经过时。当前 SonarQube 应严格按官方支持矩阵选择 Java 与数据库,数据库密码通过 Secret 管理。
## 八、制品、部署与回滚
构建一次,多环境使用同一制品。制品上传到 Nexus、Harbor 或对象存储,并记录 Git Commit、版本、校验和与构建号。部署阶段只负责下载已验证制品、注入环境配置、健康检查和切换流量。
回滚不要重新编译旧代码,应切换到已保存的旧制品。脚本需要锁文件、防并发、超时、日志、错误退出和清理逻辑。发布后验证 HTTP 状态、核心接口、日志、监控和业务指标。
## 九、备份与日常治理
备份范围包括 JENKINS_HOME、Job、凭据密文、插件清单、系统配置和密钥材料;备份必须定期做恢复演练。配置构建保留策略,避免 workspace、日志和制品占满磁盘。
最后建立四类指标:Controller/Agent 健康度、队列等待时间、构建成功率与耗时、部署频率与失败回滚率。Jenkins 的生产价值不只是自动执行命令,而是让交付过程可重复、可审计、可回滚。