CentOS 上 Jenkins 团队协作落地方案
一 基础环境与安装
- 在 CentOS 上安装 Java 11+ 与 Jenkins(建议 ≥ 2.300),并启动服务与开机自启:
- 安装 Java:sudo yum install -y java-11-openjdk-devel
- 添加 Jenkins 仓库并安装:
- sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
- sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
- sudo yum install -y jenkins
- 启动:sudo systemctl start jenkins && sudo systemctl enable jenkins
- 建议:为 Master 节点保留 2–4 个执行器,避免资源被构建任务占满;其余资源用于 Agent/从节点 执行。
二 多用户与权限模型
- 安装并启用 Role-based Authorization Strategy 插件,在「系统管理 → 全局安全配置」将授权策略切换为 Role-Based Strategy。
- 角色设计建议:
- 全局角色:admin(全部权限)、viewer(只读)。
- 项目角色:按项目命名正则分配,如 it-. → it-dev*,授予“构建、取消、查看结果”等;可按环境再细分(如 it-dev、it-test、it-prod)。
- 节点角色:对分布式构建按节点标签(如 slave-*)授权,隔离资源访问。
- 用户与分配:在「系统管理 → 管理用户」创建成员账号,在「Manage and Assign Roles → Assign Roles」绑定对应全局/项目/节点角色,做到最小权限。
三 分布式构建与资源隔离
- 节点规划:
- Master 负责调度与少量轻量任务;Agent 承载编译、测试、打包等耗时任务。
- 在「系统管理 → Manage Nodes and Clouds → New Node」添加 Agent,设置 # of executors 与 工作目录(如 /var/lib/jenkins)。
- 连接方式:
- JNLP:在 Agent 上执行 java -jar agent.jar -jnlpUrl http://jenkins-server/computer/your-node/slave-agent.jnlp -secret your-secret -workDir “/var/lib/jenkins”
- SSH:预先配置 SSH 免密,由 Master 分发任务到 Agent。
- 任务调度:在 Pipeline 中使用 label 指定节点,如 node(‘ubuntu-agent’) { … },确保任务落到目标环境/架构。
四 版本控制与自动化触发
- 插件与源码管理:安装 Git 插件;在任务「配置 → 源码管理」选择 Git,填写仓库 URL(如 git@github.com:team/project.git),并配置 Credentials(SSH 密钥或账号密码)。
- 触发器与分支策略:
- Webhook(推荐):在 GitHub/GitLab 配置 Webhook 指向 Jenkins(如 http://jenkins-server/github-webhook/),代码推送即触发构建。
- 轮询 SCM:无 Webhook 时可用 H/5 * * * *(每 5 分钟检查一次变更)。
- 分支策略:结合团队采用 Git Flow 或 GitHub Flow,在 Jenkinsfile 中用 when { branch ‘main’ } / when { branch ‘develop’ } 控制阶段执行。
五 Pipeline 标准化与质量门禁
- 采用 Pipeline as Code(Jenkinsfile) 统一管理流程,示例(Maven 项目):
- pipeline {
agent any
stages {
stage(‘Checkout’) { steps { git branch: ‘main’, url: ‘git@github.com:team/project.git’ } }
stage(‘Build’) { steps { sh ‘mvn clean package’ } }
stage(‘Test’) { steps { sh ‘mvn test’ } }
stage(‘Deploy to Test’) {
when { branch ‘develop’ }
steps { sh ‘scp target/*.war user@test-server:/opt/tomcat/webapps/’ }
}
}
post {
success { slackSend channel: ‘#dev-team’, message: “Build ${env.BUILD_NUMBER} succeeded!” }
failure { mail to: ‘team@example.com’, subject: “Build ${env.BUILD_NUMBER} failed”, body: “Check Jenkins logs.” }
}
}
- 质量与协作增强:
- 集成 SonarQube(代码质量)、JUnit/TestNG(测试报告)、Email Extension(邮件)、Slack Notification(即时通讯)等插件,形成质量门禁与结果通知闭环。
- 生产部署建议以 手动审批 触发,测试环境可自动部署,降低风险。
六 通知反馈 安全与治理 性能与可维护性
- 通知与反馈:在 post 阶段统一发送构建结果到 Slack/邮件,失败告警直达相关成员,缩短恢复时间。
- 安全与治理:
- 使用 SSH 密钥 进行节点通信与代码拉取,凭据统一托管在 Jenkins Credentials。
- 通过 Role-based 策略与项目命名规范实现“谁可以构建/部署到哪个环境”的可审计治理。
- 性能与可维护性:
- 调整 JVM 堆大小、限制 并发构建数、利用 缓存/制品库 减少重复工作;必要时引入 Docker 层缓存提升构建效率。
- 采用 JCasC(Configuration as Code) 将 Jenkins 配置纳入版本控制,支持快速迁移与环境一致性;沉淀 Jenkinsfile 模板 与 插件清单,降低新成员上手成本。