From 97706f1c5e92ea210a6cda60469e238f578f4a8f Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sat, 24 Oct 2026 11:39:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20Drone=20tag=20?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E7=9A=84=20backend/web/mobile-h5=20=E4=B8=89?= =?UTF-8?q?=E7=AB=AF=E6=89=93=E5=8C=85=E6=B5=81=E6=B0=B4=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .drone.yml | 70 ++++++++++++++++ .../plans/2026-10-24-drone-tag-package.md | 38 +++++++++ .../2026-10-24-drone-tag-package-design.md | 81 +++++++++++++++++++ 3 files changed, 189 insertions(+) create mode 100644 .drone.yml create mode 100644 docs/superpowers/plans/2026-10-24-drone-tag-package.md create mode 100644 docs/superpowers/specs/2026-10-24-drone-tag-package-design.md diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 00000000..36e8b509 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,70 @@ +# 仅 tag 触发:顺序打包 backend / web / mobile-h5 +# 产物:/root/hzdyjs-releases//{backend,web,mobile-h5}-.* +# Maven 缓存:宿主机 /root/maven-repo → 容器 /maven-repo(由 runner DRONE_RUNNER_VOLUMES 注入) +# 发版目录:/root/hzdyjs-releases → /hzdyjs-releases(同上,勿在本文件重复挂载) + +kind: pipeline +type: docker +name: package-prod + +concurrency: + limit: 1 + +trigger: + event: + - tag + +clone: + depth: 1 + +steps: + - name: package-backend + image: maven:3.9-eclipse-temurin-17 + commands: + - set -eu + - echo "==> backend tag=${DRONE_TAG} commit=${DRONE_COMMIT}" + - test -n "${DRONE_TAG}" + - mkdir -p "/hzdyjs-releases/${DRONE_TAG}" + - cd backend + - | + mvn clean package -Pprod \ + -Dmaven.test.skip=true \ + -Dmaven.compiler.parameters=true \ + -Dmaven.repo.local=/maven-repo + - test -f ruoyi-admin/target/ruoyi-admin.jar + - cp -v ruoyi-admin/target/ruoyi-admin.jar "/hzdyjs-releases/${DRONE_TAG}/backend-${DRONE_TAG}.jar" + - ls -lh "/hzdyjs-releases/${DRONE_TAG}/backend-${DRONE_TAG}.jar" + + - name: package-web + image: node:20-bookworm + environment: + NPM_CONFIG_REGISTRY: https://registry.npmmirror.com + commands: + - set -eu + - echo "==> web tag=${DRONE_TAG}" + - mkdir -p "/hzdyjs-releases/${DRONE_TAG}" + - cd web + - npm ci + - npm run build:prod + - test -f dist/index.html + - tar -C dist -czf "/hzdyjs-releases/${DRONE_TAG}/web-${DRONE_TAG}.tar.gz" . + - ls -lh "/hzdyjs-releases/${DRONE_TAG}/web-${DRONE_TAG}.tar.gz" + + - name: package-mobile-h5 + image: node:20-bookworm + environment: + NPM_CONFIG_REGISTRY: https://registry.npmmirror.com + commands: + - set -eu + - echo "==> mobile-h5 tag=${DRONE_TAG}" + - mkdir -p "/hzdyjs-releases/${DRONE_TAG}" + - corepack enable + - corepack prepare pnpm@9 --activate + - cd mobile + - pnpm config set registry https://registry.npmmirror.com + - pnpm install --frozen-lockfile + - pnpm run build + - test -d dist/build/h5 + - tar -C dist/build/h5 -czf "/hzdyjs-releases/${DRONE_TAG}/mobile-h5-${DRONE_TAG}.tar.gz" . + - ls -lh "/hzdyjs-releases/${DRONE_TAG}/" + - ls -lh "/hzdyjs-releases/${DRONE_TAG}/mobile-h5-${DRONE_TAG}.tar.gz" diff --git a/docs/superpowers/plans/2026-10-24-drone-tag-package.md b/docs/superpowers/plans/2026-10-24-drone-tag-package.md new file mode 100644 index 00000000..33169ec3 --- /dev/null +++ b/docs/superpowers/plans/2026-10-24-drone-tag-package.md @@ -0,0 +1,38 @@ +# 杭州第一技师 Drone Tag 三端打包 Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Tag 触发后顺序产出 backend jar、web tar.gz、mobile-h5 tar.gz 到 `/root/hzdyjs-releases//`,并用宿主机 Maven 仓库缓存依赖。 + +**Architecture:** 共用测试机 Drone;`.drone.yml` 三步顺序构建;host volume 经 `DRONE_RUNNER_VOLUMES` 注入。 + +**Tech Stack:** Drone 2、Maven 3.9 + JDK 17、Node 20、pnpm、Gogs + +--- + +### Task 1: 设计文档(已完成) + +**Files:** +- Create: `docs/superpowers/specs/2026-10-24-drone-tag-package-design.md` + +- [x] **Step 1:** 写入并自审设计文档 + +### Task 2: 仓库 `.drone.yml` + +**Files:** +- Create: `.drone.yml` + +- [ ] **Step 1:** 编写仅 tag 触发的三步流水线 +- [ ] **Step 2:** 推送到 `hzdyjs-xg/all-project` + +### Task 3: 测试机 runner / 目录 / 仓库激活 + +- [ ] **Step 1:** `mkdir -p /root/maven-repo /root/hzdyjs-releases` +- [ ] **Step 2:** 更新 `/root/drone` 的 `DRONE_RUNNER_VOLUMES` 并重启 runner +- [ ] **Step 3:** Drone 激活 `hzdyjs-xg/all-project`,`repo_trusted=1` +- [ ] **Step 4:** 同步更新 zkxw 仓库内 `测试环境部署/drone/` 模板说明(可选但推荐) + +### Task 4: 打 tag 验收 + +- [ ] **Step 1:** 推送测试 tag +- [ ] **Step 2:** 确认三产物落盘且构建 success diff --git a/docs/superpowers/specs/2026-10-24-drone-tag-package-design.md b/docs/superpowers/specs/2026-10-24-drone-tag-package-design.md new file mode 100644 index 00000000..3aadca70 --- /dev/null +++ b/docs/superpowers/specs/2026-10-24-drone-tag-package-design.md @@ -0,0 +1,81 @@ +# 杭州第一技师 — Drone Tag 三端打包设计 + +## 背景 + +在测试机既有 Gogs + Drone(`101.35.245.122:18088`)上,为仓库 `hzdyjs-xg/all-project` 增加 **仅 tag 触发** 的自动打包,产出后端 / Web / 移动端 H5 三份独立产物,并复用宿主机 Maven 本地仓库以加速 Java 构建。 + +## 目标 + +- Push Git tag → 自动顺序构建三端并落盘 +- 产物可按 tag 并存,便于回溯 +- Maven 依赖缓存在宿主机,不因容器销毁而丢失 + +## 非目标 + +- 不自动部署到业务机 +- 不打微信小程序(`build:mp-weixin`);移动端按 `pnpm run build`(H5) +- 不合成单一总包 + +## 触发与仓库 + +| 项 | 值 | +|---|---| +| Gogs | `http://101.35.245.122:3000/hzdyjs-xg/all-project` | +| Drone | 共用现有实例;激活本仓库并 `trusted=true`(host volume) | +| 触发 | `event: tag` only | +| 并发 | `concurrency.limit: 1` | + +## 产物布局 + +``` +/root/hzdyjs-releases// + backend-.jar + web-.tar.gz + mobile-h5-.tar.gz +``` + +容器内挂载点:`/hzdyjs-releases` → 宿主机 `/root/hzdyjs-releases`。 + +## 构建顺序与命令 + +1. **backend**(`maven:3.9-eclipse-temurin-17`) + `mvn clean package -Pprod -Dmaven.test.skip=true -Dmaven.compiler.parameters=true -Dmaven.repo.local=/maven-repo` + 源文件:`backend/ruoyi-admin/target/ruoyi-admin.jar` → `backend-.jar` + +2. **web**(`node:20-bookworm`) + `npm ci` → `npm run build:prod` + 打包 `web/dist` → `web-.tar.gz` + +3. **mobile**(`node:20-bookworm` + corepack/pnpm) + `pnpm install --frozen-lockfile` → `pnpm run build`(即 H5) + 打包 `mobile/dist/build/h5` → `mobile-h5-.tar.gz` + +## Maven 公共缓存 + +| 项 | 值 | +|---|---| +| 宿主机 | `/root/maven-repo` | +| 容器 | `/maven-repo` | +| 注入方式 | runner `DRONE_RUNNER_VOLUMES`(勿在 `.drone.yml` 再声明同路径,避免 Duplicate mount) | + +## Runner 共享挂载(全仓库注入) + +在现有 `/var/run/docker.sock`、`/root/zkxw-releases:/releases` 基础上追加: + +``` +/root/maven-repo:/maven-repo +/root/hzdyjs-releases:/hzdyjs-releases +``` + +对 zkxw 流水线无害(未使用的挂载可忽略)。 + +## 失败策略 + +任一步失败则整次构建失败;不部分覆盖同 tag 目录中已有文件以外的内容时,实现上可先 `mkdir -p` 再逐步写入——若中途失败,该 tag 目录可能不完整,以 Drone 构建状态为准。 + +## 验收 + +1. 推送测试 tag(如 `ci-pkg-test-YYYYMMDDHHMM`) +2. Drone 构建 success +3. 三文件均存在于 `/root/hzdyjs-releases//`,且 jar/tar 非空 +4. 第二次同仓库构建时 Maven 日志出现大量依赖来自本地仓库(明显快于首次)