ci(drone): 优化构建流程和环境配置

- 更新 Node.js 镜像版本,使用22-bullseye-slim
- 添加 pnpm 配置,使用国内镜像源
- 优化构建步骤,增加 pnpm fetch 和离线安装
-简化 YAML 配置,提高可读性
- 添加 pnpm store 缓存卷,提高构建效率
This commit is contained in:
2025-08-14 17:18:39 +08:00
parent d2b151810e
commit f095e85f0b

View File

@ -3,40 +3,49 @@ type: docker
name: build-deploy name: build-deploy
clone: clone:
depth: 1 # ✅ 只拉取最近一次 commit显著加快 clone 速度 depth: 1
trigger: trigger:
event: event: [ push, custom ]
- push branch: [ master, test, feature/ldb_build ]
- custom
branch:
- master
- test
- feature/ldb_build
steps: steps:
- name: install & build - name: install & build
image: node:23.9.0 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
volumes: volumes:
- name: build-output - name: build-output
path: /runner/builds path: /runner/builds
- name: pnpm-store-cache
path: /cache
commands: commands:
- node -v && npm -v
- corepack enable - corepack enable
- corepack prepare pnpm@8.15.5 --activate - corepack prepare pnpm@8.15.5 --activate
- pnpm install
# 关键:先把所有包拉进本地 store不执行 postinstall
- pnpm fetch
# 离线优先安装:命中 store 就不走网络;锁住 lockfile
- pnpm install --frozen-lockfile --prefer-offline
- mkdir -p /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH} - mkdir -p /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}
- | - |
case "${DRONE_BRANCH}" in case "${DRONE_BRANCH}" in
feature/ldb_build | test) feature/ldb_build|test) pnpm run build:test ;;
pnpm run build:test master) pnpm run build:prod ;;
;; *) echo "❌ 未配置此分支的构建规则: ${DRONE_BRANCH}"; exit 1 ;;
master)
pnpm run build:prod
;;
*)
echo "❌ 未配置此分支的构建规则: ${DRONE_BRANCH}"
exit 1
;;
esac esac
- rm -rf /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}/* - rm -rf /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}/*
- cp -r dist/* /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}/ - cp -r dist/* /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}/
@ -44,12 +53,8 @@ steps:
- name: deploy to spug - name: deploy to spug
image: curlimages/curl image: curlimages/curl
when: when:
status: status: [ success ]
- success branch: [ feature/ldb_build, test, master ]
branch:
- feature/ldb_build
- test
- master
environment: environment:
SPUG_DEPLOY_URL: SPUG_DEPLOY_URL:
from_secret: spug_deploy_lingji_work_fe_url from_secret: spug_deploy_lingji_work_fe_url
@ -64,18 +69,13 @@ steps:
"ref": "refs/heads/'"${DRONE_BRANCH}"'", "ref": "refs/heads/'"${DRONE_BRANCH}"'",
"before": "'"${DRONE_COMMIT_BEFORE}"'", "before": "'"${DRONE_COMMIT_BEFORE}"'",
"after": "'"${DRONE_COMMIT_SHA}"'", "after": "'"${DRONE_COMMIT_SHA}"'",
"commits": [ "commits": [{"message": "发布'"${DRONE_BRANCH}${DRONE_COMMIT_SHA}"'"}]
{
"message": "发布'"${DRONE_BRANCH}${DRONE_COMMIT_SHA}"'"
}
]
}' }'
- name: notify feishu on failure - name: notify feishu on failure
image: curlimages/curl image: curlimages/curl
when: when:
status: status: [ failure ]
- failure
environment: environment:
FEISHU_WEBHOOK: FEISHU_WEBHOOK:
from_secret: feishu_webhook_url from_secret: feishu_webhook_url
@ -85,12 +85,14 @@ steps:
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{ -d '{
"msg_type": "text", "msg_type": "text",
"content": { "content": { "text": "❌ Drone-CI 执行失败 ❗️\n项目: '${DRONE_REPO_NAME}'\n分支: '${DRONE_BRANCH}'\n提交: '${DRONE_COMMIT_SHA:0:8}'" }
"text": "❌ Drone-CI 执行失败 ❗️\n项目: '${DRONE_REPO_NAME}'\n分支: '${DRONE_BRANCH}'\n提交: '${DRONE_COMMIT_SHA:0:8}'"
}
}' }'
volumes: volumes:
- name: build-output - name: build-output
host: host:
path: /www/dk_project/dk_compose/spug/data/repos/build/drone-runner/builds 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