基于JPom与Docker的SpringBoot项目自动化构建与部署实战指南
1. 环境准备与工具安装第一次接触JPom和Docker组合时我也被各种配置搞得头大。后来发现只要把基础环境搭好后面的自动化流程就像搭积木一样简单。咱们先从最基础的安装开始我会把踩过的坑都告诉你。1.1 Docker环境配置建议直接用官方脚本安装Docker省去很多麻烦。在Linux服务器上执行下面这条命令curl -fsSL https://get.docker.com | sh装完后别急着用记得配置镜像加速。我在阿里云上实测没加速前拉镜像要10分钟配置后只要30秒。修改/etc/docker/daemon.json文件没有就新建{ registry-mirrors: [https://your-aliyun-mirror.mirror.aliyuncs.com] }重启服务生效systemctl restart docker验证下是否正常docker run hello-world如果看到欢迎信息说明Docker已经ready。这里有个小技巧把当前用户加入docker组就不用每次都sudo了sudo usermod -aG docker $USER1.2 JPom的Docker安装官方推荐用docker-compose部署JPom确实比直接跑容器方便管理。先确保安装了docker-composesudo curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose然后创建个目录存放配置比如/opt/jpom在里面新建docker-compose.ymlversion: 3 services: jpom-server: image: jpomdocker/jpom container_name: jpom-server ports: - 2122:2122 - 2123:2123 volumes: - /opt/jpom/server/data:/usr/local/jpom-server/data - /var/run/docker.sock:/var/run/docker.sock restart: always jpom-agent: image: jpomdocker/jpom container_name: jpom-agent ports: - 2124:2124 volumes: - /opt/jpom/agent/data:/usr/local/jpom-agent/data - /var/run/docker.sock:/var/run/docker.sock restart: always depends_on: - jpom-server重点注意两个挂载卷数据目录要保持持久化docker.sock挂载是为了让容器内能操作宿主机Docker。启动命令很简单docker-compose up -d等个一分钟访问http://服务器IP:2122 就能看到登录页。默认账号admin/123456记得第一时间改密码2. 项目基础配置2.1 代码仓库对接在JPom管理后台的在线构建 仓库信息里添加你的Git仓库。以GitHub为例仓库地址填HTTPS格式的URL认证方式选账号密码或SSH密钥如果是私有仓库记得提前在服务器上配置好git的凭证存储测试连接时经常报错多半是网络问题。建议在服务器上先手动git clone试试确保能正常拉代码。有个小技巧在JPom服务器上配置全局git代理git config --global http.proxy http://your-proxy:port2.2 SSH资产配置在资产管理 SSH管理添加部署目标服务器。这里有个大坑如果JPom和部署目标在同一台机器host不能填127.0.0.1得用真实IP因为容器内访问宿主机用的网络命名空间不同。推荐使用密钥认证更安全。先在目标服务器生成密钥对ssh-keygen -t rsa -b 4096然后把公钥内容贴到JPom的SSH配置里。测试连接时如果超时检查下目标服务器的sshd配置# 确保这行没被注释 PermitRootLogin prohibit-password # 确保有这行 PubkeyAuthentication yes2.3 Docker资产配置在资产管理 Docker管理添加Docker连接。关键是要配置正确的API地址如果JPom和Docker在同一主机unix:///var/run/docker.sock如果是远程Dockertcp://IP:2375记得开放端口测试连接时报错可能是权限问题。试试给docker.sock改权限sudo chmod 666 /var/run/docker.sock不过生产环境建议用更安全的方式比如创建docker用户组。3. 构建流程详解3.1 创建构建任务在在线构建页面新建任务关键配置项构建方式选容器构建Docker方式必须选这个选择之前配好的代码仓库分支填master或你的开发分支产物目录填target/*.jarSpringBoot默认输出位置特别注意容器构建会把代码拉取到JPom的docker卷目录路径类似/var/lib/docker/volumes/xxx。想查看具体位置可以用find / -name BUILD_ID3.2 DSL配置技巧这是最核心的部分直接决定构建能否成功。分享我的一个实战配置runsOn: ubuntu-latest fromTag: test steps: - uses: java version: 11 - uses: maven version: 3.9.4 - uses: cache path: /root/.m2 type: global binds: - /root/.m2/:/root/.m2/ - /path/to/settings.xml:/root/.m2/settings.xml run: | cd ${JPOM_WORKING_DIR} mvn clean package -Dmaven.test.skiptrue -s /root/.m2/settings.xml几个关键点uses: java会自动下载指定JDK建议用LTS版本如8/11/17Maven缓存配置能大幅提升后续构建速度绑定settings.xml可以配置国内镜像源${JPOM_WORKING_DIR}是JPom自动映射的代码目录3.3 构建优化实践第一次构建可能会很慢主要是下载依赖。几个提速技巧在settings.xml配置阿里云镜像mirror idaliyunmaven/id urlhttps://maven.aliyun.com/repository/public/url mirrorOf*/mirrorOf /mirror对于多模块项目可以只构建需要的模块mvn clean package -pl module1 -am大型项目可以分阶段构建先单独执行mvn dependency:go-offline下载所有依赖4. 自动化部署方案4.1 发布配置构建成功后在发布操作选项卡配置选择目标SSH服务器发布目录填如/home/your-project发布前命令可以用来停止旧服务docker stop your-container || true发布后命令示例cd /home/your-project docker-compose up -d4.2 Docker化部署建议用docker-compose管理服务。准备个简单的compose.ymlversion: 3 services: your-app: image: openjdk:11-jre ports: - 8080:8080 volumes: - ./your-app.jar:/app.jar command: java -jar /app.jar restart: always对应的start.sh可以这样写#!/bin/bash docker-compose down docker-compose up -d记得给脚本执行权限chmod x start.sh4.3 健康检查配置在JPom的项目管理里可以配置健康检查路径比如SpringBoot的actuator健康端点http://localhost:8080/actuator/health设置合理的超时时间建议30秒以上JPom会根据返回状态判断部署是否成功。5. 进阶技巧与排错5.1 构建缓存管理随着项目迭代Docker会产生大量缓存镜像。建议定期清理docker system prune -f可以在JPom的系统管理 定时任务里配置自动清理任务。5.2 构建日志分析构建失败时重点查看这几类错误依赖下载失败检查网络和settings.xml配置内存不足增加Docker内存限制或在MAVEN_OPTS中配置export MAVEN_OPTS-Xmx1024m -Xms512m权限问题检查文件属性和SELinux状态5.3 多环境配置通过JPom的参数化构建支持多环境部署。在构建时添加环境变量env: SPRING_PROFILES_ACTIVE: prod然后在SpringBoot的application-prod.yml中配置生产环境参数。6. 完整实战案例以电商项目为例分享我的配置方案代码结构ecommerce/ ├── order-service ├── product-service └── docker/ ├── order-service.yml ├── product-service.yml └── settings.xmlJPom构建DSLsteps: - uses: java version: 17 - uses: maven version: 3.9.4 - uses: cache path: /root/.m2 type: global binds: - /root/.m2/:/root/.m2/ - /data/ecommerce/settings.xml:/root/.m2/settings.xml run: | cd ${JPOM_WORKING_DIR} mvn clean package -Dmaven.test.skiptrue -s /root/.m2/settings.xml发布脚本#!/bin/bash # 获取容器ID CONTAINER_ID$(docker ps -qf nameecommerce-order) # 备份旧jar mkdir -p backups mv order-service.jar backups/order-service_$(date %Y%m%d%H%M%S).jar # 启动新服务 docker-compose -f docker/order-service.yml up -d这套配置在我们生产环境稳定运行了半年多部署时间从原来的15分钟缩短到3分钟以内。最关键的是再也不用手动登录服务器敲命令了开发体验提升了好几个档次。