1. 持续集成环境搭建概述在软件开发领域持续集成(CI)已经成为现代工程实践的标配。通过将代码变更频繁地集成到共享主干团队能够更早地发现和解决问题。Jenkins作为最流行的开源CI工具配合Maven构建工具和SVN版本控制系统可以构建一套完整的自动化构建、测试和部署流水线。这套环境特别适合Java Web项目的持续交付场景。我曾在一个电商项目中实施这套方案将原本需要手动执行的构建部署流程完全自动化团队代码集成频率从每周一次提升到每天多次线上问题减少了60%以上。2. 环境准备与安装2.1 基础环境配置在开始之前需要确保系统满足以下要求操作系统CentOS 7.x或Ubuntu 18.04JDK 1.8或更高版本至少4GB内存和20GB磁盘空间提示生产环境建议使用专用服务器不要与其他服务混用。我曾遇到过因内存不足导致构建失败的情况后来单独配置了8GB内存的CI服务器。安装JDK# CentOS sudo yum install -y java-1.8.0-openjdk-devel # Ubuntu sudo apt-get install -y openjdk-8-jdk验证安装java -version2.2 Tomcat安装与配置Jenkins可以独立运行但通过Tomcat部署更便于管理下载Tomcat 9wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.54/bin/apache-tomcat-9.0.54.tar.gz tar -xzf apache-tomcat-9.0.54.tar.gz mv apache-tomcat-9.0.54 /usr/local/tomcat配置Tomcat用户 编辑/usr/local/tomcat/conf/tomcat-users.xmlrole rolenamemanager-gui/ user usernameadmin passwordadmin123 rolesmanager-gui/启动Tomcat/usr/local/tomcat/bin/startup.sh2.3 Maven安装与配置下载Maven 3.6wget https://dlcdn.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配置环境变量 编辑/etc/profileexport MAVEN_HOME/usr/local/maven export PATH$PATH:$MAVEN_HOME/bin配置阿里云镜像 编辑/usr/local/maven/conf/settings.xmlmirror idaliyunmaven/id mirrorOf*/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror2.4 SVN服务器搭建安装Subversion# CentOS sudo yum install -y subversion # Ubuntu sudo apt-get install -y subversion创建仓库sudo mkdir -p /var/svn/repos sudo svnadmin create /var/svn/repos/project配置权限 编辑/var/svn/repos/project/conf/svnserve.conf[general] anon-access none auth-access write password-db passwd authz-db authz编辑passwd文件添加用户[users] dev1 password1 dev2 password23. Jenkins核心配置3.1 Jenkins安装与初始化部署Jenkins WAR包wget https://get.jenkins.io/war-stable/2.346.3/jenkins.war cp jenkins.war /usr/local/tomcat/webapps/访问Jenkinshttp://服务器IP:8080/jenkins获取初始密码cat ~/.jenkins/secrets/initialAdminPassword安装推荐插件 选择Install suggested plugins等待安装完成。注意国内服务器可能会遇到插件下载慢的问题可以尝试更换为清华镜像源 编辑/var/lib/jenkins/hudson.model.UpdateCenter.xmlurlhttps://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json/url3.2 系统全局配置配置JDK和Maven进入Manage Jenkins → Global Tool Configuration添加JDK安装路径/usr/lib/jvm/java-1.8.0-openjdk添加Maven安装路径/usr/local/maven配置系统时区安装Locale插件在系统设置中将Locale设置为zh_CN时区设置为Asia/Shanghai配置邮件通知进入Manage Jenkins → Configure System设置SMTP服务器和发件人邮箱测试邮件发送4. 项目配置与自动化构建4.1 创建Maven项目新建Item → 选择Maven项目输入项目名称如web-demo配置SVN仓库地址svn://服务器IP/project/trunk添加SVN认证凭据4.2 构建触发器配置轮询SCMH/5 * * * *表示每5分钟检查一次SVN变更远程触发构建勾选Trigger builds remotely设置Token如BUILD_TOKEN_123触发URLhttp://服务器IP:8080/jenkins/job/web-demo/build?tokenBUILD_TOKEN_1234.3 构建后操作部署到Tomcat安装Deploy to container插件在Post-build Actions中添加Deploy war/ear to a container配置Tomcat管理凭据设置Context path为/webapp邮件通知添加Editable Email Notification配置成功/失败的邮件模板5. SVN钩子自动触发5.1 配置post-commit钩子编辑/var/svn/repos/project/hooks/post-commit#!/bin/sh curl -X POST -u admin:admin123 \ http://localhost:8080/jenkins/job/web-demo/build?tokenBUILD_TOKEN_123设置可执行权限chmod x /var/svn/repos/project/hooks/post-commit5.2 测试自动化流程本地提交代码到SVN观察Jenkins是否自动触发构建检查Tomcat的webapps目录是否更新访问应用验证功能常见问题如果构建没有触发检查post-commit脚本是否有执行权限Jenkins服务器是否能访问SVN服务器防火墙是否开放了8080端口6. 高级配置与优化6.1 构建节点扩展添加Linux从节点进入Manage Jenkins → Manage Nodes新建节点选择Permanent Agent配置从节点IP和认证方式启动agent程序配置构建标签为不同节点设置标签如linux,docker在项目配置中限制构建节点6.2 构建流水线优化多阶段构建pipeline { agent any stages { stage(Build) { steps { sh mvn clean package } } stage(Test) { steps { sh mvn test } } stage(Deploy) { steps { sh cp target/*.war /usr/local/tomcat/webapps/ } } } }并行构建stage(Parallel Build) { parallel { stage(Unit Test) { steps { sh mvn test } } stage(Integration Test) { steps { sh mvn verify -Pintegration } } } }6.3 安全加固启用RBAC安装Role-based Authorization Strategy插件创建角色和分配权限限制开发人员只能查看自己的项目定期备份安装ThinBackup插件配置自动备份计划设置备份保留策略7. 常见问题排查7.1 构建失败分析依赖下载失败检查Maven镜像配置清理本地仓库后重试mvn dependency:purge-local-repository内存不足增加Jenkins JVM参数JAVA_OPTS-Xms512m -Xmx2048m权限问题检查Tomcat manager应用权限验证SVN读写权限7.2 性能优化建议构建缓存配置Maven离线模式重用本地仓库构建调度避免高峰期同时构建多个项目设置构建优先级日志管理定期清理构建历史配置日志轮转这套JenkinsMavenSVN持续集成环境在实际项目中表现出色特别适合中小型团队的Java Web项目。通过自动化构建、测试和部署团队可以更专注于代码质量而非发布流程。我在多个项目中采用这种架构显著提高了交付效率和质量。