1. 项目背景与核心价值
在当前的DevOps实践中,轻量级CI/CD系统已经成为中小团队提升交付效率的标配方案。不同于企业级解决方案的复杂性,基于Jenkins的轻量化部署特别适合资源有限但需要快速建立自动化流水线的场景。CentOS7作为长期支持版本,其稳定性和广泛的兼容性使其成为部署基础设施的首选平台。
这个方案最吸引人的地方在于:
- 资源占用极低:单台2核4G的服务器即可支撑中小团队的完整CI/CD需求
- 技术栈精简:仅依赖Jenkins核心功能+必要插件,避免过度设计
- 可扩展性强:后续可无缝集成Docker Compose、Gitea等组件形成完整工具链
我在三个创业团队实际落地过类似方案,平均部署时间控制在2小时内,最快的一次只用了45分钟就完成了从裸机到可运行流水线的全过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 系统初始化
首先确保使用干净的CentOS7 minimal安装环境。我强烈建议先执行以下标准化操作:
bash复制# 更新系统并安装基础工具
sudo yum update -y
sudo yum install -y wget curl vim net-tools epel-release
# 配置阿里云镜像源(国内环境必备)
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum makecache
重要提示:生产环境务必配置swap分区,建议大小为物理内存的1.5倍。遇到过多次构建过程OOM崩溃的情况,都是因为没配置swap。
2.2 Java环境部署
Jenkins需要Java8或Java11环境,这里推荐OpenJDK11:
bash复制sudo yum install -y java-11-openjdk-devel
# 验证安装
java -version
配置JAVA_HOME环境变量:
bash复制echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrc
source ~/.bashrc
3. Jenkins安装与配置
3.1 官方源安装
使用官方仓库能确保获得最新安全更新:
bash复制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
国内用户可能会遇到下载慢的问题,可以尝试以下替代方案:
bash复制# 使用清华镜像源加速
sudo sed -i 's|https://pkg.jenkins.io|https://mirrors.tuna.tsinghua.edu.cn/jenkins|g' /etc/yum.repos.d/jenkins.repo
3.2 服务配置优化
修改Jenkins默认配置以提升性能:
bash复制sudo vim /etc/sysconfig/jenkins
# 关键参数调整
JENKINS_USER="root" # 避免权限问题
JENKINS_PORT="8080" # 可按需修改
JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpPort=$JENKINS_PORT"
JAVA_OPTS="-Xms512m -Xmx1024m -Djava.awt.headless=true"
启动服务并设置开机自启:
bash复制sudo systemctl start jenkins
sudo systemctl enable jenkins
3.3 初始安全配置
首次访问需要解锁:
bash复制sudo cat /var/lib/jenkins/secrets/initialAdminPassword
安装推荐插件时,建议额外勾选:
- Pipeline
- Blue Ocean
- Git
- Docker Pipeline
经验之谈:插件安装经常失败是因为网络问题,可以尝试修改更新中心地址为国内镜像:
管理Jenkins -> 插件管理 -> 高级 -> 更新站点URL改为
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
4. 关键插件深度配置
4.1 Pipeline插件配置
在"系统管理"->"全局工具配置"中设置:
- JDK: 使用已安装的Java11路径
- Git: 建议使用yum安装的版本(
/usr/bin/git) - Maven: 按需安装特定版本
4.2 凭据管理系统
安全存储各类敏感信息:
- 添加SSH密钥用于代码仓库访问
- 配置Docker Hub账号密码
- 设置服务器登录凭据
避坑指南:使用SSH密钥时,务必在目标服务器上提前配置好known_hosts,否则会因主机验证失败导致构建中断。
5. 集成Gitea实战
5.1 Gitea安装配置
bash复制# 快速安装
sudo yum install -y git
sudo useradd -m -d /var/lib/gitea -s /bin/bash gitea
sudo su - gitea
wget -O gitea https://dl.gitea.io/gitea/1.17.3/gitea-1.17.3-linux-amd64
chmod +x gitea
./gitea web
5.2 Jenkins与Gitea联动
- 安装Gitea插件
- 配置Webhook:
- Payload URL: http://jenkins_ip:port/gitea-webhook/post
- 触发事件: push, pull request
- 在Jenkins任务中配置SCM为Gitea仓库地址
实测技巧:Gitea的Webhook经常因SSL证书问题失败,可以在Jenkins系统配置中取消"Enable SSL verification"选项。
6. Docker Compose集成
6.1 安装Docker环境
bash复制sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
6.2 Docker Compose安装
bash复制sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
6.3 Jenkins中的Docker集成
- 将jenkins用户加入docker组:
bash复制sudo usermod -aG docker jenkins sudo systemctl restart jenkins - 在Pipeline中使用:
groovy复制pipeline { agent any stages { stage('Build') { steps { sh 'docker-compose build' } } } }
7. 典型问题排查指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 插件安装失败 | 网络连接问题 | 更换更新中心镜像源 |
| 构建卡在git clone | SSH密钥配置错误 | 检查known_hosts和私钥权限 |
| Docker命令无权限 | 用户组未生效 | 重启jenkins服务 |
| Webhook不触发 | 防火墙阻挡 | 开放8080端口或配置nginx反向代理 |
| 内存不足崩溃 | JVM配置不合理 | 调整JAVA_OPTS中的内存参数 |
8. 性能优化建议
- 定期清理工作空间:
bash复制# 在Jenkins脚本控制台执行 hudson.model.Hudson.instance.items.each { item -> if (item.class.simpleName == 'WorkflowJob') { item.builds.each { build -> if (build.isBuilding()) return build.workspace.deleteRecursively() } } } - 配置构建保留策略:
- 最大保留构建数:10
- 制品保留天数:7
- 使用Jenkinsfile管理流水线,避免在UI中配置复杂任务
9. 安全加固措施
- 启用RBAC:为不同角色分配精确权限
- 定期备份JENKINS_HOME:
bash复制
tar -czvf jenkins_backup.tar.gz /var/lib/jenkins - 配置防火墙规则:
bash复制sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload - 禁用旧版协议:在"全局安全配置"中只启用较新的加密协议
这套方案在我负责的多个项目中表现稳定,最长的已经持续运行18个月无重大故障。对于刚开始实践CI/CD的团队,建议先从简单的Pipeline开始,逐步增加复杂度。记住:轻量化的核心不是功能简陋,而是保持架构简洁和可维护性。
