feat: 增加 Drone tag 触发的 backend/web/mobile-h5 三端打包流水线
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
b26bf58744
commit
97706f1c5e
3 files changed
+189
No files matched your search
+70
@@ -0,0 +1,70 @@
|
||||
# 仅 tag 触发:顺序打包 backend / web / mobile-h5
|
||||
# 产物:/root/hzdyjs-releases/<tag>/{backend,web,mobile-h5}-<tag>.*
|
||||
# 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"
|
||||
@@ -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/<tag>/`,并用宿主机 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
|
||||
@@ -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/<tag>/
|
||||
backend-<tag>.jar
|
||||
web-<tag>.tar.gz
|
||||
mobile-h5-<tag>.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-<tag>.jar`
|
||||
|
||||
2. **web**(`node:20-bookworm`)
|
||||
`npm ci` → `npm run build:prod`
|
||||
打包 `web/dist` → `web-<tag>.tar.gz`
|
||||
|
||||
3. **mobile**(`node:20-bookworm` + corepack/pnpm)
|
||||
`pnpm install --frozen-lockfile` → `pnpm run build`(即 H5)
|
||||
打包 `mobile/dist/build/h5` → `mobile-h5-<tag>.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/<tag>/`,且 jar/tar 非空
|
||||
4. 第二次同仓库构建时 Maven 日志出现大量依赖来自本地仓库(明显快于首次)
|
||||
Reference in new issue
Block a user