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-compose:
sudo 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.yml:
version: '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
- 如果是远程Docker:tcp://IP:2375(记得开放端口)
测试连接时报错?可能是权限问题。试试给docker.sock改权限:
sudo chmod 666 /var/run/docker.sock不过生产环境建议用更安全的方式,比如创建docker用户组。
3. 构建流程详解
3.1 创建构建任务
在"在线构建"页面新建任务,关键配置项:
- 构建方式选"容器构建"(Docker方式必须选这个)
- 选择之前配好的代码仓库
- 分支填master或你的开发分支
- 产物目录填target/*.jar(SpringBoot默认输出位置)
特别注意:容器构建会把代码拉取到JPom的docker卷目录,路径类似/var/lib/docker/volumes/xxx。想查看具体位置可以用:
find / -name "BUILD_ID"3.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.skip=true -s /root/.m2/settings.xml几个关键点:
uses: java会自动下载指定JDK,建议用LTS版本(如8/11/17)- Maven缓存配置能大幅提升后续构建速度
- 绑定settings.xml可以配置国内镜像源
${JPOM_WORKING_DIR}是JPom自动映射的代码目录
3.3 构建优化实践
第一次构建可能会很慢,主要是下载依赖。几个提速技巧:
- 在settings.xml配置阿里云镜像:
<mirror> <id>aliyunmaven</id> <url>https://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.yml:
version: '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.xml- JPom构建DSL:
steps: - 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.skip=true -s /root/.m2/settings.xml- 发布脚本:
#!/bin/bash # 获取容器ID CONTAINER_ID=$(docker ps -qf "name=ecommerce-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分钟以内。最关键的是再也不用手动登录服务器敲命令了,开发体验提升了好几个档次。