2025-08-08 12:10:07 +08:00
|
|
|
|
kind: pipeline
|
|
|
|
|
|
type: docker
|
|
|
|
|
|
name: build-deploy
|
|
|
|
|
|
|
|
|
|
|
|
clone:
|
2025-08-14 17:18:39 +08:00
|
|
|
|
depth: 1
|
2025-08-08 12:10:07 +08:00
|
|
|
|
|
|
|
|
|
|
trigger:
|
2025-08-14 17:18:39 +08:00
|
|
|
|
event: [ push, custom ]
|
|
|
|
|
|
branch: [ master, test, feature/ldb_build ]
|
2025-08-08 12:10:07 +08:00
|
|
|
|
|
|
|
|
|
|
steps:
|
|
|
|
|
|
- name: install & build
|
2025-08-14 17:18:39 +08:00
|
|
|
|
image: node:22-bullseye-slim
|
|
|
|
|
|
environment:
|
|
|
|
|
|
# 统一走镜像,避免 npmjs 超时
|
|
|
|
|
|
NPM_CONFIG_REGISTRY: https://registry.npmmirror.com
|
|
|
|
|
|
PNPM_REGISTRY: https://registry.npmmirror.com
|
|
|
|
|
|
# 提高容错
|
|
|
|
|
|
PNPM_FETCH_RETRIES: "5"
|
|
|
|
|
|
PNPM_FETCH_RETRY_MINTIMEOUT: "2000"
|
|
|
|
|
|
PNPM_FETCH_RETRY_MAXTIMEOUT: "60000"
|
|
|
|
|
|
PNPM_FETCH_TIMEOUT: "600000"
|
|
|
|
|
|
CI: "true"
|
|
|
|
|
|
# 固定 pnpm store 到缓存卷
|
|
|
|
|
|
PNPM_STORE_DIR: /cache/pnpm
|
2025-08-08 12:10:07 +08:00
|
|
|
|
volumes:
|
|
|
|
|
|
- name: build-output
|
|
|
|
|
|
path: /runner/builds
|
2025-08-14 17:18:39 +08:00
|
|
|
|
- name: pnpm-store-cache
|
|
|
|
|
|
path: /cache
|
2025-08-08 12:10:07 +08:00
|
|
|
|
commands:
|
2025-08-14 17:18:39 +08:00
|
|
|
|
- node -v && npm -v
|
2025-08-08 12:10:07 +08:00
|
|
|
|
- corepack enable
|
|
|
|
|
|
- corepack prepare pnpm@8.15.5 --activate
|
2025-08-14 17:18:39 +08:00
|
|
|
|
|
|
|
|
|
|
# 关键:先把所有包拉进本地 store(不执行 postinstall)
|
|
|
|
|
|
- pnpm fetch
|
|
|
|
|
|
|
|
|
|
|
|
# 离线优先安装:命中 store 就不走网络;锁住 lockfile
|
|
|
|
|
|
- pnpm install --frozen-lockfile --prefer-offline
|
|
|
|
|
|
|
2025-08-08 12:10:07 +08:00
|
|
|
|
- mkdir -p /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}
|
|
|
|
|
|
- |
|
|
|
|
|
|
case "${DRONE_BRANCH}" in
|
2025-08-14 17:18:39 +08:00
|
|
|
|
feature/ldb_build|test) pnpm run build:test ;;
|
|
|
|
|
|
master) pnpm run build:prod ;;
|
|
|
|
|
|
*) echo "❌ 未配置此分支的构建规则: ${DRONE_BRANCH}"; exit 1 ;;
|
2025-08-08 12:10:07 +08:00
|
|
|
|
esac
|
|
|
|
|
|
- rm -rf /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}/*
|
|
|
|
|
|
- cp -r dist/* /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}/
|
|
|
|
|
|
|
|
|
|
|
|
- name: deploy to spug
|
|
|
|
|
|
image: curlimages/curl
|
|
|
|
|
|
when:
|
2025-08-14 17:18:39 +08:00
|
|
|
|
status: [ success ]
|
|
|
|
|
|
branch: [ feature/ldb_build, test, master ]
|
2025-08-08 12:10:07 +08:00
|
|
|
|
environment:
|
|
|
|
|
|
SPUG_DEPLOY_URL:
|
|
|
|
|
|
from_secret: spug_deploy_lingji_work_fe_url
|
|
|
|
|
|
SPUG_DEPLOY_TOKEN:
|
|
|
|
|
|
from_secret: spug_deploy_token
|
|
|
|
|
|
commands:
|
|
|
|
|
|
- |
|
|
|
|
|
|
echo "🚀 部署到 Spug: 分支 ${DRONE_BRANCH}"
|
|
|
|
|
|
curl -X POST "$SPUG_DEPLOY_URL?name=${DRONE_BRANCH}&token=$SPUG_DEPLOY_TOKEN" \
|
2025-08-14 17:18:39 +08:00
|
|
|
|
-H "Content-Type: application/json" \
|
|
|
|
|
|
-d '{
|
|
|
|
|
|
"ref": "refs/heads/'"${DRONE_BRANCH}"'",
|
|
|
|
|
|
"before": "'"${DRONE_COMMIT_BEFORE}"'",
|
|
|
|
|
|
"after": "'"${DRONE_COMMIT_SHA}"'",
|
|
|
|
|
|
"commits": [{"message": "发布'"${DRONE_BRANCH}:${DRONE_COMMIT_SHA}"'"}]
|
|
|
|
|
|
}'
|
2025-08-08 12:10:07 +08:00
|
|
|
|
|
|
|
|
|
|
- name: notify feishu on failure
|
|
|
|
|
|
image: curlimages/curl
|
|
|
|
|
|
when:
|
2025-08-14 17:18:39 +08:00
|
|
|
|
status: [ failure ]
|
2025-08-08 12:10:07 +08:00
|
|
|
|
environment:
|
|
|
|
|
|
FEISHU_WEBHOOK:
|
|
|
|
|
|
from_secret: feishu_webhook_url
|
|
|
|
|
|
commands:
|
|
|
|
|
|
- |
|
|
|
|
|
|
curl -X POST "$FEISHU_WEBHOOK" \
|
2025-08-14 17:18:39 +08:00
|
|
|
|
-H "Content-Type: application/json" \
|
|
|
|
|
|
-d '{
|
|
|
|
|
|
"msg_type": "text",
|
|
|
|
|
|
"content": { "text": "❌ Drone-CI 执行失败 ❗️\n项目: '${DRONE_REPO_NAME}'\n分支: '${DRONE_BRANCH}'\n提交: '${DRONE_COMMIT_SHA:0:8}'" }
|
|
|
|
|
|
}'
|
2025-08-08 12:10:07 +08:00
|
|
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
- name: build-output
|
|
|
|
|
|
host:
|
2025-08-14 17:18:39 +08:00
|
|
|
|
path: /www/dk_project/dk_compose/spug/data/repos/build/drone-runner/builds
|
|
|
|
|
|
- name: pnpm-store-cache
|
|
|
|
|
|
host:
|
|
|
|
|
|
# 建议为 pnpm store 单独准备一个可持久化目录
|
|
|
|
|
|
path: /www/dk_project/dk_compose/spug/cache/pnpm-store
|