1. 持续集成环境搭建概述
在当今快节奏的软件开发环境中,持续集成(CI)已成为现代开发流程中不可或缺的一环。Jenkins作为最流行的开源持续集成工具,配合Maven构建工具和SVN版本控制系统,能够为企业级项目提供稳定可靠的自动化构建、测试和部署能力。这套组合特别适合传统Java Web项目的持续集成需求,能够显著提升开发效率并降低人为错误。
我曾在多个企业级项目中实施过这套技术栈,最大的感受是:看似简单的环境搭建,在实际操作中往往会遇到各种"坑"。从Jenkins插件安装失败到SVN钩子配置不当,每个环节都可能成为阻碍项目顺利进行的绊脚石。本文将基于实战经验,详细介绍如何从零开始搭建这套环境,并分享那些官方文档中不会提及的实用技巧。
2. 环境准备与基础安装
2.1 系统环境要求
搭建持续集成环境前,需要确保基础环境满足以下要求:
- 操作系统:CentOS 7.x/8.x或Ubuntu 18.04/20.04 LTS(本文以CentOS 7为例)
- 硬件配置:至少2核CPU、4GB内存(Jenkins本身资源占用不高,但构建过程可能消耗较多资源)
- 网络环境:能够访问外网以下载必要组件(如遇网络限制,需提前配置好代理或国内镜像源)
提示:生产环境建议使用专用服务器而非虚拟机,以避免资源争用导致的构建失败。
2.2 JDK安装与配置
Jenkins和Maven都依赖Java环境,推荐安装OpenJDK 8或11:
# 安装OpenJDK 8
sudo yum install -y java-1.8.0-openjdk-devel
# 验证安装
java -version
javac -version
配置JAVA_HOME环境变量:
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
2.3 Tomcat安装与优化
虽然Jenkins提供了直接运行的war包,但通过Tomcat部署更便于管理:
# 下载解压Tomcat
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz
tar -xzf apache-tomcat-9.0.37.tar.gz -C /opt
mv /opt/apache-tomcat-9.0.37 /opt/tomcat
# 创建专用用户
useradd -r -s /bin/false tomcat
chown -R tomcat:tomcat /opt/tomcat
优化Tomcat配置(/opt/tomcat/conf/server.xml):
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
maxThreads="200"
minSpareThreads="20"
enableLookups="false"/>
3. Jenkins核心安装与配置
3.1 Jenkins部署与初始化
将Jenkins war包部署到Tomcat:
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war -P /opt/tomcat/webapps/
systemctl start tomcat
访问http://your-server-ip:8080/jenkins完成初始化:
-
获取初始密码:
cat /root/.jenkins/secrets/initialAdminPassword - 选择"安装推荐插件"(网络不佳时可分批次安装)
- 创建管理员账户(建议不使用默认admin账户)
3.2 关键系统配置
3.2.1 全局安全配置
路径:Manage Jenkins > Configure Global Security
- 启用安全:勾选"Enable security"
- 安全域:选择"Jenkins' own user database"并允许用户注册
- 授权策略:生产环境建议使用"Matrix-based security"或"Role-Based Strategy"
3.2.2 全局工具配置
路径:Manage Jenkins > Global Tool Configuration
- JDK:添加别名并指定JAVA_HOME路径
- Maven:添加Maven安装(可自动安装或指定现有安装路径)
- Git:如不使用可忽略
3.3 必备插件安装
持续集成环境需要以下核心插件:
- Maven Integration:Maven项目支持
- Subversion:SVN集成
- Deploy to container:WAR包部署
- Pipeline:流水线支持
- Locale:中文支持(可选)
安装方式:
- Manage Jenkins > Manage Plugins > Available
- 搜索插件名称并勾选
- 点击"Install without restart"
经验:插件安装失败时,可尝试更换更新中心为清华镜像:
- 修改
/var/lib/jenkins/hudson.model.UpdateCenter.xml- 将url改为
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json- 重启Jenkins服务
4. Maven与SVN环境搭建
4.1 Maven安装与配置
# 下载安装
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -xzf apache-maven-3.6.3-bin.tar.gz -C /opt
mv /opt/apache-maven-3.6.3 /opt/maven
# 环境变量配置
echo 'export MAVEN_HOME=/opt/maven' >> ~/.bashrc
echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
配置阿里云镜像(/opt/maven/conf/settings.xml):
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
4.2 SVN服务器搭建
# 安装SVN
yum install -y subversion
# 创建版本库
mkdir -p /var/svn/repos
svnadmin create /var/svn/repos/myproject
# 配置权限
vi /var/svn/repos/myproject/conf/svnserve.conf
关键配置项:
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
配置用户密码(passwd文件):
[users]
dev1 = password1
dev2 = password2
配置访问权限(authz文件):
[groups]
developers = dev1,dev2
[/]
@developers = rw
* =
5. Jenkins项目配置实战
5.1 创建Maven项目
- 新建Item > 选择"Maven项目"
- 输入项目名称(如"MyWebApp")
-
在"源码管理"部分选择Subversion
- Repository URL:svn://your-svn-server/myproject/trunk
- 认证:添加SVN账号凭证
5.2 构建触发器配置
推荐配置方式:
-
轮询SCM:
H/5 * * * *(每5分钟检查一次SVN变更) - 远程触发:勾选"Trigger builds remotely"并设置token
5.3 构建环境配置
关键配置项:
- Goals and options:clean package(或根据项目需要)
- POM文件路径:默认为pom.xml(如项目结构特殊需指定)
- 高级 > Settings文件:可指定自定义settings.xml路径
5.4 构建后操作
部署到Tomcat容器:
- 添加"Deploy war/ear to a container"
- WAR文件:target/*.war(根据实际输出路径调整)
- 容器:选择Tomcat 9.x
- 管理凭据:添加Tomcat管理员账号(需在Tomcat的tomcat-users.xml中配置)
6. 自动化部署进阶配置
6.1 SVN钩子自动触发
配置post-commit钩子(/var/svn/repos/myproject/hooks/post-commit):
#!/bin/sh
REPOS="$1"
REV="$2"
curl -X POST -v -u jenkins-user:api-token \
"http://jenkins-server:8080/jenkins/job/MyWebApp/build?token=MY_TOKEN"
记得给脚本执行权限:
chmod +x post-commit
6.2 Jenkins安全令牌调用
对于Jenkins 2.x以上版本,需要处理CSRF防护:
CRUMB=$(curl -s 'http://jenkins-user:api-token@jenkins-server:8080/jenkins/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -X POST -H "$CRUMB" \
-u jenkins-user:api-token \
"http://jenkins-server:8080/jenkins/job/MyWebApp/build?token=MY_TOKEN"
6.3 邮件通知配置
- 安装Email Extension插件
- 全局配置SMTP服务器(Manage Jenkins > Configure System)
- 项目配置中添加"Editable Email Notification"构建后操作
- 设置触发条件(如构建失败时)和收件人列表
7. 常见问题排查与优化
7.1 构建失败常见原因
-
依赖下载失败 :
- 检查Maven镜像配置
- 手动执行mvn命令验证网络连通性
- 可配置构建重试机制
-
SVN认证问题 :
- 确保Jenkins凭据配置正确
- 检查SVN服务器的authz和passwd文件权限
- 尝试使用svn://协议而非http://
-
部署权限不足 :
- 确认Tomcat用户有manager-script角色
- 检查Tomcat的manager应用是否已部署
- 验证能否手动通过curl部署
7.2 性能优化建议
-
Jenkins主节点优化 :
-
配置合理的JVM参数(/etc/sysconfig/jenkins)
JENKINS_JAVA_OPTIONS="-Xms1024m -Xmx2048m -XX:MaxPermSize=512m" - 定期清理构建历史(Discard Old Build插件)
-
配置合理的JVM参数(/etc/sysconfig/jenkins)
-
构建从节点配置 :
- 对大型项目建议使用专用构建节点
- 配置标签限制不同类型项目的执行节点
-
并行构建策略 :
- 对多模块项目配置并行构建
- 使用Jenkins Pipeline实现更灵活的并行控制
7.3 安全最佳实践
-
访问控制 :
- 使用Nginx反向代理并配置HTTPS
- 限制管理后台的访问IP
- 定期轮换API token
-
备份策略 :
- 定期备份JENKINS_HOME目录
- 使用ThinBackup插件实现配置备份
- 版本控制关键Jenkinsfile脚本
-
漏洞防护 :
- 定期更新Jenkins及插件版本
- 禁用不必要的插件和功能
- 监控安全公告(https://www.jenkins.io/security/)
这套Jenkins+Maven+SVN持续集成环境在实际项目中表现出色,特别适合需要稳定构建的传统Java项目。我在金融行业的一个核心系统项目中,通过优化这套配置,将原本需要1小时的部署过程缩短到10分钟以内,且实现了零人为错误的部署记录。关键在于对每个环节的精细把控和持续优化。

1468

被折叠的 条评论
为什么被折叠?



