1. Jenkins 自动化构建环境搭建
作为一名经历过多次CI/CD实战的老兵,我深知Jenkins在自动化构建中的重要性。今天我要分享的是如何用Jenkins同时构建Spring Boot后端和Vue前端项目的完整方案。这个方案已经在我们的生产环境稳定运行两年多,处理过上千次构建任务。
1.1 Jenkins基础环境配置
在开始之前,我们需要确保Jenkins环境已经正确配置。我推荐使用Docker方式部署Jenkins,这样可以避免很多环境依赖问题:
bash复制docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts-jdk17
注意:这里使用/var/jenkins_home作为数据卷是为了持久化Jenkins配置。实际部署时,建议将这个目录映射到宿主机的高性能存储上。
安装完成后,我们需要配置几个核心插件:
- Git Plugin:用于代码拉取
- NodeJS Plugin:管理Node.js环境
- Maven Integration plugin:Maven项目支持
- Workspace Cleanup Plugin:构建前清理工作区
1.2 全局工具配置
在"Manage Jenkins" → "Global Tool Configuration"中,我们需要设置:
-
JDK配置:
- 名称:jdk17
- JAVA_HOME:/usr/local/openjdk-17 (Docker镜像中默认路径)
-
Maven配置:
- 名称:maven3.9
- 版本:3.9.6 (建议使用稳定版)
- 勾选"自动安装"
-
Node.js配置:
- 名称:node20
- 版本:20.x LTS
- 全局npm包:pnpm@8.15.7 (比npm/yarn更节省空间)
2. Vue项目构建配置详解
2.1 创建Vue构建任务
在Jenkins首页点击"New Item",选择"Freestyle project"。我习惯用"项目名-环境"的命名方式,比如"vue-admin-prod"。
源码管理部分的配置要点:
- Repository URL:建议使用SSH协议(git@github.com:user/repo.git)
- Credentials:选择预先配置好的SSH密钥
- Branches to build:*/main (根据实际分支调整)
2.2 构建环境优化
在"Build Environment"中,我通常会做这些配置:
-
工作区清理:
- 勾选"Delete workspace before build starts"
- 额外添加"Clean before checkout" (避免.git冲突)
-
Node.js环境:
- 选择之前配置的node20
- Cache location选择"Local to the workspace"
- 添加环境变量:
bash复制export NODE_OPTIONS=--max_old_space_size=4096
2.3 构建脚本编写
这是我的生产环境使用的构建脚本:
bash复制#!/bin/bash -l
# 设置失败立即退出
set -e
echo "➤ 1. 进入工作目录"
cd ${WORKSPACE}
echo "➤ 2. 检查Node环境"
node -v
pnpm -v
echo "➤ 3. 安装依赖"
pnpm install --frozen-lockfile --registry=https://registry.npmmirror.com
echo "➤ 4. 构建项目"
pnpm run build:prod
echo "➤ 5. 打包构建产物"
cd dist
tar -zcvf ../${JOB_NAME}-${BUILD_NUMBER}.tar.gz .
经验分享:使用--frozen-lockfile可以确保依赖版本完全一致,避免因lock文件不同步导致的构建差异。
3. Spring Boot项目构建配置
3.1 Maven项目创建
同样创建Freestyle项目,我习惯命名为"springboot-service-[环境]"。
源码管理配置与Vue项目类似,但要注意:
- 如果使用子模块,需要勾选"Advanced"下的"Recursively update submodules"
- 可以设置"Additional Behaviours" → "Clean before checkout"
3.2 Maven构建配置
在"Build"部分选择"Invoke top-level Maven targets",我的推荐配置:
- Maven Version:maven3.9
- Goals:clean package -DskipTests=true
- POM:pom.xml (多模块项目需要指定)
- Properties:
properties复制maven.repo.local=/var/jenkins_home/.m2/repository maven.test.skip=true
3.3 构建后处理
对于Spring Boot项目,我通常会做这些后处理:
-
产物归档:
bash复制
target/*.jar target/*.war -
Docker镜像构建(可选):
bash复制docker build -t ${JOB_NAME}:${BUILD_NUMBER} . -
部署到Nexus(可选):
bash复制
mvn deploy -DaltDeploymentRepository=snapshots::default::http://nexus/repository/snapshots
4. 高级配置技巧
4.1 构建参数化
在"General"中勾选"This project is parameterized",可以添加:
- Choice Parameter:选择构建环境(dev/test/prod)
- String Parameter:版本号
- Boolean Parameter:是否跳过测试
4.2 构建触发器
我常用的触发方式:
-
GitHub Webhook:
- 在GitHub仓库设置中添加Webhook
- Payload URL:http://jenkins/github-webhook/
-
定时构建:
- 表达式:H 2 * * * (每天凌晨2点)
- 适用于每日构建场景
4.3 邮件通知
在"Post-build Actions"中添加"Editable Email Notification":
- Recipients:team@example.com
- Content Type:HTML
- 附件:**/target/surefire-reports/*.xml (测试报告)
5. 常见问题解决方案
5.1 构建失败排查流程
-
查看控制台输出:
- 重点看第一个ERROR出现的位置
- 搜索"FAILURE"、"ERROR"关键词
-
检查环境一致性:
bash复制# 在Jenkins服务器上执行 java -version mvn -v node -v -
清理缓存:
bash复制rm -rf /var/jenkins_home/.m2/repository/*
5.2 内存不足问题
Vue构建常见的内存问题解决方案:
-
在Jenkins全局配置中增加:
bash复制export NODE_OPTIONS=--max_old_space_size=4096 -
或者在package.json中添加:
json复制"scripts": { "build": "node --max_old_space_size=4096 build/build.js" }
5.3 构建速度优化
我的实战优化方案:
-
依赖缓存:
bash复制# 在Maven配置中添加 -Dmaven.repo.local=/var/jenkins_home/.m2/repository -
并行构建:
bash复制# Vue项目 pnpm run build --parallel # Maven项目 mvn -T 1C clean install -
增量构建:
bash复制# 只构建变更的模块 mvn -pl module1,module2 clean install
6. 生产环境最佳实践
经过多次迭代,我总结出这些经验:
-
目录结构规范:
code复制/var/jenkins_home ├── workspace │ ├── project-vue │ └── project-springboot ├── .m2 │ └── repository └── .npm └── _cacache -
权限控制:
bash复制chown -R 1000:1000 /var/jenkins_home -
日志轮转:
在Jenkins系统设置中配置:- 保持构建的天数:7
- 保持构建的最大个数:10
-
备份策略:
bash复制# 每天备份一次 tar -zcvf jenkins_backup_$(date +%Y%m%d).tar.gz /var/jenkins_home
这套配置在我们团队已经支持了20+微服务项目和10+前端项目的持续集成,平均构建时间从原来的15分钟降低到3分钟,部署频率从每周一次提升到每天多次。关键在于根据项目特点不断调整优化配置,而不是一成不变地套用模板。