以下是在1Panel中通过OneDev实现Spring Boot项目自动化构建部署的完整方案,包含Git Push触发配置:

一、前置条件

  1. 已通过1Panel安装Docker引擎(系统设置→容器服务→安装Docker)
  2. 已部署OneDev(通过1Panel应用商店安装或Docker命令部署)

二、项目配置步骤

1. 创建OneDev项目

  • 访问OneDev控制台(http://服务器IP:6610
  • 新建项目:
    • 项目类型:空白项目
    • 关联Git仓库(支持GitHub/Gitee/GitLab等)
    • 示例仓库地址:https://gitee.com/yourname/springboot-demo.git

2. 配置CI/CD流水线

在项目根目录创建 .onedev/buildspec.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
version: 21

jobs:
build:
steps:
# 1. 代码检出
- checkout:
type: git
repo: $repo
ref: $ref

# 2. Maven构建(需确保构建服务器已安装JDK 17+)
- exec:
command: mvn clean package -DskipTests

# 3. Docker构建
- dockerBuild:
imageName: yourregistry.com/springboot-demo
tag: ${commitId}
dockerfilePath: Dockerfile
push: true

# 4. 部署到服务器(需配置SSH密钥)
- ssh:
host: your-server-ip
port: 22
user: root
key: |
-----BEGIN OPENSSH PRIVATE KEY-----
[你的SSH私钥内容]
-----END OPENSSH PRIVATE KEY-----
commands:
- docker service update --image yourregistry.com/springboot-demo:${commitId} springboot-demo

3. 配置Dockerfile

在项目根目录创建 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
# 使用官方Maven镜像构建
FROM maven:3.8.6-openjdk-17 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package -DskipTests

# 运行时镜像
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

4. 配置Git Webhook

在Git仓库设置中添加Webhook:

  • 触发URL:http://your-onedev-ip:6610/git/notifyCommit?url=${repoUrl}
  • 触发事件:Push Events

三、自动化触发流程

  1. 代码推送 → Git发送Webhook到OneDev
  2. OneDev自动执行CI/CD流水线:
    • 检出最新代码
    • Maven编译打包
    • 构建Docker镜像并推送
    • 通过SSH更新目标服务器容器

四、验证部署

  1. 首次手动触发构建:
    • 进入OneDev项目 → CI/CD → 手动运行build任务
  2. 检查构建日志:
    • 确认Maven构建成功
    • 确认Docker镜像推送成功
  3. 测试自动触发:
    • 提交代码到Git仓库 → 观察OneDev自动启动构建
    • 检查目标服务器容器版本:docker service ps springboot-demo

五、高级配置建议

  1. 环境隔离

    1
    2
    3
    4
    5
    6
    7
    environments:
    prod:
    variables:
    JAVA_OPTS: -Xmx512m
    test:
    variables:
    JAVA_OPTS: -Xmx256m
  2. 金丝雀发布

    1
    2
    3
    - ssh:
    commands:
    - docker service update --update-parallelism 1 --image new-image springboot-demo
  3. 回滚机制

    1
    2
    3
    - ssh:
    commands:
    - docker service rollback springboot-demo

六、常见问题处理

  1. Docker权限问题

    • 确保OneDev容器挂载了Docker套接字:
      1
      docker run -v /var/run/docker.sock:/var/run/docker.sock ...
  2. 构建缓存优化

    1
    2
    3
    - dockerBuild:
    cacheFrom:
    - yourregistry.com/springboot-demo:latest
  3. 构建超时处理

    1
    2
    3
    - exec:
    command: mvn package
    timeout: 1200 # 单位:秒

该方案实现了完整的GitOps流程,通过OneDev原生能力替代传统Jenkins方案,具有配置简单、资源占用低的优势。实际部署时需根据网络环境调整镜像仓库地址和SSH密钥配置。