From 5ce4c4601dd542ac978a6f62acf319b841762444 Mon Sep 17 00:00:00 2001 From: "n72595987@gmail.com" Date: Sat, 29 Nov 2025 17:04:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Drone=20CI/CD=20=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8C=96=E9=83=A8=E7=BD=B2=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增 .drone.yml 配置文件 - 自动编译 BladeX 框架依赖 - 自动编译后端项目并打包 - 构建 Docker 镜像 - 自动部署到生产服务器 - 健康检查验证部署成功 2. 新增 Dockerfile - 基于 eclipse-temurin:17-jre 轻量镜像 - 配置 JVM 参数优化内存使用 - 添加健康检查端点 - 支持多环境配置(dev/test/prod) 现在推送代码到 main 分支后,Drone CI 会自动: - 编译项目 - 构建 Docker 镜像 - 部署到 154.30.6.21 服务器 - 执行健康检查 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .drone.yml | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 37 ++++++++++++++---- 2 files changed, 142 insertions(+), 8 deletions(-) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..1b187d3 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,113 @@ +kind: pipeline +type: docker +name: 武术系统后端自动部署 + +# 只在 main 分支触发 +trigger: + branch: + - main + event: + - push + +steps: + # 步骤1:编译 BladeX 框架 + - name: 编译框架依赖 + image: maven:3.9-eclipse-temurin-17 + volumes: + - name: maven-cache + path: /root/.m2 + commands: + - echo "开始编译 BladeX 框架..." + - cd /drone/src/../martial-tool + - mvn clean install -DskipTests -q + - echo "✅ BladeX 框架编译完成" + + # 步骤2:编译后端项目 + - name: 编译后端项目 + image: maven:3.9-eclipse-temurin-17 + volumes: + - name: maven-cache + path: /root/.m2 + commands: + - echo "开始编译后端项目..." + - mvn clean package -DskipTests -Dmaven.test.skip=true + - ls -lh target/blade-api.jar + - echo "✅ 后端项目编译完成" + + # 步骤3:构建 Docker 镜像 + - name: 构建Docker镜像 + image: plugins/docker + settings: + registry: registry.cn-hangzhou.aliyuncs.com # 可选:使用阿里云镜像仓库 + repo: martial/backend + tags: + - latest + - ${DRONE_COMMIT_SHA:0:8} + dockerfile: Dockerfile + # username: # 如果需要推送到私有仓库 + # from_secret: docker_username + # password: + # from_secret: docker_password + + # 步骤4:部署到服务器 + - name: 部署到生产环境 + image: appleboy/drone-ssh + settings: + host: 154.30.6.21 # 部署服务器地址 + username: root + key: + from_secret: ssh_key # 需要在 Drone 中配置 SSH 私钥 + port: 22 + script: + - cd /app/martial + - docker-compose pull backend + - docker-compose up -d backend + - docker ps | grep martial-backend + - echo "✅ 后端部署完成" + + # 步骤5:健康检查 + - name: 健康检查 + image: curlimages/curl:latest + commands: + - sleep 15 # 等待服务启动 + - curl -f http://154.30.6.21:8123/actuator/health || exit 1 + - echo "✅ 健康检查通过" + +# 挂载卷(缓存 Maven 依赖,加速构建) +volumes: + - name: maven-cache + host: + path: /data/drone-cache/maven + +# 构建通知(可选) +--- +kind: pipeline +type: docker +name: 构建通知 + +trigger: + branch: + - main + status: + - success + - failure + +steps: + - name: 发送通知 + image: drillster/drone-email + settings: + host: smtp.qq.com # 邮件服务器 + port: 465 + from: your-email@qq.com + recipients: + - your-email@qq.com + username: + from_secret: email_username + password: + from_secret: email_password + when: + status: + - failure # 只在失败时发送邮件 + +depends_on: + - 武术系统后端自动部署 diff --git a/Dockerfile b/Dockerfile index 376c5fb..33a848f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,36 @@ -FROM bladex/alpine-java:openjdk17_cn_slim +# 多阶段构建:编译阶段 +FROM maven:3.9-eclipse-temurin-17 AS builder -LABEL maintainer="bladejava@qq.com" +WORKDIR /build -RUN mkdir -p /blade +# 复制主项目源码 +COPY pom.xml . +COPY src ./src -WORKDIR /blade +# 编译项目(在 Drone 中已经编译好,这里只是复制) +RUN mkdir -p target -EXPOSE 8800 +# 运行阶段:使用轻量级 JRE 镜像 +FROM eclipse-temurin:17-jre-jammy -COPY ./target/blade-api.jar ./app.jar +LABEL maintainer="JohnSion" +LABEL description="武术比赛管理系统后端服务" -ENTRYPOINT ["java", "--add-opens", "java.base/java.lang=ALL-UNNAMED", "--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"] +WORKDIR /app -CMD ["--spring.profiles.active=test"] +# 复制编译好的 JAR 文件 +COPY target/blade-api.jar /app/blade-api.jar + +# 暴露端口 +EXPOSE 8123 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:8123/actuator/health || exit 1 + +# JVM 参数配置 +ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC" +ENV SPRING_PROFILE="dev" + +# 启动命令 +CMD ["sh", "-c", "java ${JAVA_OPTS} -jar /app/blade-api.jar --spring.profiles.active=${SPRING_PROFILE}"]