diff --git a/.drone.yml b/.drone.yml index d0ec613..48d61f6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,40 +3,49 @@ type: docker name: build-deploy clone: - depth: 1 # ✅ 只拉取最近一次 commit,显著加快 clone 速度 + depth: 1 trigger: - event: - - push - - custom - branch: - - master - - test - - feature/ldb_build + event: [ push, custom ] + branch: [ master, test, feature/ldb_build ] steps: - 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: - name: build-output path: /runner/builds + - name: pnpm-store-cache + path: /cache commands: + - node -v && npm -v - corepack enable - 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} - | case "${DRONE_BRANCH}" in - feature/ldb_build | test) - pnpm run build:test - ;; - master) - pnpm run build:prod - ;; - *) - echo "❌ 未配置此分支的构建规则: ${DRONE_BRANCH}" - exit 1 - ;; + feature/ldb_build|test) pnpm run build:test ;; + master) pnpm run build:prod ;; + *) echo "❌ 未配置此分支的构建规则: ${DRONE_BRANCH}"; exit 1 ;; esac - rm -rf /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 image: curlimages/curl when: - status: - - success - branch: - - feature/ldb_build - - test - - master + status: [ success ] + branch: [ feature/ldb_build, test, master ] environment: SPUG_DEPLOY_URL: from_secret: spug_deploy_lingji_work_fe_url @@ -59,38 +64,35 @@ steps: - | echo "🚀 部署到 Spug: 分支 ${DRONE_BRANCH}" curl -X POST "$SPUG_DEPLOY_URL?name=${DRONE_BRANCH}&token=$SPUG_DEPLOY_TOKEN" \ - -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}"'" - } - ] - }' + -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}"'"}] + }' - name: notify feishu on failure image: curlimages/curl when: - status: - - failure + status: [ failure ] environment: FEISHU_WEBHOOK: from_secret: feishu_webhook_url commands: - | curl -X POST "$FEISHU_WEBHOOK" \ - -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}'" - } - }' + -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}'" } + }' volumes: - name: build-output host: - path: /www/dk_project/dk_compose/spug/data/repos/build/drone-runner/builds \ No newline at end of file + 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