1. 持续集成环境搭建概述

在当今的软件开发流程中,持续集成(CI)已成为提升团队效率、保证代码质量的关键实践。通过将Jenkins、Maven和SVN这三个工具组合使用,我们可以构建一个稳定可靠的自动化构建和部署流水线。这套方案特别适合中小型团队快速搭建自己的CI环境,无需复杂的基础设施投入。

我曾在多个Java Web项目中实践过这套技术栈,发现它最大的优势在于配置简单、资源占用低,同时又能满足基本的持续集成需求。对于刚接触持续集成的团队来说,这套方案的学习曲线相对平缓,且社区资源丰富,遇到问题容易找到解决方案。

2. 环境准备与工具安装

2.1 基础环境配置

在开始搭建前,我们需要准备以下基础环境:

  • 一台Linux服务器(推荐CentOS 7+或Ubuntu 18.04+)
  • JDK 1.8或以上版本
  • Tomcat 8.5+作为应用服务器
  • 网络连接正常(用于下载依赖包)

提示:生产环境建议使用专用服务器,不要与其他关键服务混用同一台机器。

2.2 各组件安装步骤

2.2.1 JDK安装与配置
# 下载JDK(以OpenJDK 11为例)
sudo yum install -y java-11-openjdk-devel

# 验证安装
java -version
javac -version

# 设置JAVA_HOME环境变量
echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))" >> ~/.bashrc
source ~/.bashrc
2.2.2 Tomcat安装与配置
# 下载解压Tomcat
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz
tar -xzf apache-tomcat-9.0.65.tar.gz
mv apache-tomcat-9.0.65 /usr/local/tomcat

# 配置管理用户
vi /usr/local/tomcat/conf/tomcat-users.xml

在tomcat-users.xml中添加:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin123" roles="manager-gui,manager-script"/>
2.2.3 Maven安装与配置
# 下载安装Maven
wget https://downloads.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
tar -xzf apache-maven-3.8.6-bin.tar.gz
mv apache-maven-3.8.6 /usr/local/maven

# 配置环境变量
echo "export MAVEN_HOME=/usr/local/maven" >> ~/.bashrc
echo "export PATH=\$PATH:\$MAVEN_HOME/bin" >> ~/.bashrc
source ~/.bashrc

# 验证安装
mvn -v

# 配置阿里云镜像加速
vi /usr/local/maven/conf/settings.xml

在mirrors节点下添加:

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>
2.2.4 SVN服务器安装
# 安装SVN
sudo yum install -y subversion

# 创建版本库目录
sudo mkdir -p /var/svn/repos
sudo 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

3. Jenkins核心配置

3.1 Jenkins安装与初始化

将Jenkins部署到Tomcat:

# 下载Jenkins WAR包
wget https://get.jenkins.io/war-stable/2.346.3/jenkins.war
cp jenkins.war /usr/local/tomcat/webapps/

# 启动Tomcat
/usr/local/tomcat/bin/startup.sh

访问Jenkins控制台(假设服务器IP为192.168.1.100):

http://192.168.1.100:8080/jenkins

初始化步骤:

  1. 从/root/.jenkins/secrets/initialAdminPassword获取管理员密码
  2. 选择"安装推荐插件"
  3. 创建管理员账户
  4. 完成基础配置

3.2 系统全局配置

3.2.1 工具配置

进入"系统管理"→"全局工具配置":

  • JDK:配置JAVA_HOME路径
  • Maven:配置MAVEN_HOME路径
  • Git:如不使用可忽略
3.2.2 插件安装

必须安装的核心插件:

  • Maven Integration
  • Subversion
  • Deploy to container
  • Locale(中文支持)

3.3 安全配置建议

生产环境安全配置要点:

  1. 启用"矩阵授权策略"
  2. 禁用匿名用户读取权限
  3. 配置项目级权限
  4. 定期备份JENKINS_HOME目录

4. 项目配置与自动化构建

4.1 创建Maven项目

  1. 点击"新建任务"→选择"构建一个Maven项目"
  2. 输入项目名称(如"MyWebApp")
  3. 配置SVN仓库地址:svn://192.168.1.100/svn/myproject/trunk

4.2 构建触发器配置

推荐配置方案:

  1. 轮询SCM:H/5 * * * * (每5分钟检查一次代码变更)
  2. 远程触发:添加身份验证token
  3. SVN钩子脚本触发(后文详述)

4.3 构建环境配置

关键配置项:

  1. 指定JDK版本
  2. 配置Maven构建目标和选项(如clean package)
  3. 设置构建超时时间(建议30分钟)

4.4 构建后操作

部署到Tomcat的配置示例:

  1. 选择"Deploy war/ear to a container"
  2. 指定WAR文件路径:target/*.war
  3. 配置Tomcat管理凭据
  4. 设置上下文路径(如/myapp)

5. SVN钩子与自动化触发

5.1 钩子脚本配置

创建post-commit钩子实现提交后自动构建:

vi /var/svn/repos/myproject/hooks/post-commit

内容示例:

#!/bin/sh
REPOS="$1"
REV="$2"

# Jenkins构建URL
JENKINS_URL="http://192.168.1.100:8080/jenkins/job/MyWebApp/build?token=MY_TOKEN"

# 获取Jenkins Crumb(CSRF防护)
CRUMB=$(curl -s 'http://192.168.1.100:8080/jenkins/crumbIssuer/api/json' \
  --user admin:admin123 | grep -o '"crumb":"[^"]*' | cut -d'"' -f4)

# 触发构建
curl -X POST -v -u admin:admin123 \
  -H "Jenkins-Crumb:$CRUMB" \
  "$JENKINS_URL"

设置脚本可执行权限:

chmod +x /var/svn/repos/myproject/hooks/post-commit

5.2 常见问题排查

  1. 钩子脚本不执行:

    • 检查脚本权限(必须755)
    • 检查SVN服务用户对脚本的读取权限
    • 查看/var/log/svnserve.log日志
  2. Jenkins未触发构建:

    • 检查网络连通性
    • 验证token是否正确
    • 查看Jenkins系统日志
  3. 构建结果与预期不符:

    • 检查工作空间代码是否为最新
    • 在构建命令中添加-U参数强制更新依赖:mvn clean package -U

6. 高级配置与优化建议

6.1 构建性能优化

  1. 配置Maven本地仓库镜像
  2. 设置Jenkins的JVM参数:
vi /usr/local/tomcat/bin/setenv.sh

添加:

export JAVA_OPTS="-Xms512m -Xmx2048m -XX:MaxPermSize=512m"
  1. 使用增量构建策略

6.2 邮件通知配置

  1. 安装Email Extension插件
  2. 配置SMTP服务器
  3. 设置构建失败通知规则

6.3 多环境部署

通过参数化构建实现:

  1. 在项目中添加"构建参数"
  2. 根据参数值选择不同部署目标
  3. 在构建脚本中使用条件判断

7. 维护与监控

7.1 日常维护建议

  1. 定期清理工作空间:

    • 配置"Discard old builds"策略
    • 设置保留构建的天数和数量
  2. 监控磁盘空间:

    • 特别关注JENKINS_HOME目录大小
    • 设置构建产物自动清理
  3. 备份策略:

    • 定期备份JENKINS_HOME目录
    • 使用ThinBackup插件

7.2 监控指标

关键监控项:

  1. 构建成功率
  2. 构建平均时长
  3. 系统资源使用率
  4. 插件更新情况

7.3 故障恢复

常见故障处理:

  1. Jenkins无法启动:

    • 检查端口冲突
    • 验证JVM内存设置
    • 查看catalina.out日志
  2. 插件冲突:

    • 回滚到之前版本
    • 手动删除有问题的插件
  3. 构建队列堵塞:

    • 增加执行器数量
    • 优化构建脚本执行时间
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐