From ecbc3b02905ab0634355777f5366e736dc2d5a5a Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 22 Jul 2026 12:08:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(ci):=20=E5=89=8D=E7=AB=AF=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E8=84=9A=E6=9C=AC=E6=8C=82=E8=BD=BD=20Docker=20Volume?= =?UTF-8?q?=20=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 与 step_frontend_install.sh 使用相同 hash 计算逻辑 - 自动挂载对应 volume 到 node_modules - volume 不存在时优雅降级,不影响正常运行 --- scripts/ci/step_frontend_run.sh | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/scripts/ci/step_frontend_run.sh b/scripts/ci/step_frontend_run.sh index 6dcae42cc..3374b88a0 100755 --- a/scripts/ci/step_frontend_run.sh +++ b/scripts/ci/step_frontend_run.sh @@ -1,12 +1,26 @@ #!/bin/sh # CI 公共步骤:前端命令执行(在 docker node 容器中运行) # 用法:step_frontend_run.sh "要执行的命令" +# 支持 Docker Volume 持久化缓存的 node_modules set -eu CMD="${1:-echo 'no command'}" -docker run --rm \ - -v "$PWD:/workspace" \ - -w /workspace/apps/web \ - docker.m.daocloud.io/library/node:20 \ - sh -lc "$CMD" +# 缓存配置 — 与 step_frontend_install.sh 保持一致 +LOCK_FILE="apps/web/package-lock.json" +VOLUME_PREFIX="ci-web-nm-" + +# 计算 package-lock.json 的 hash,挂载对应的 volume +VOLUME_ARGS="" +if [ -f "$LOCK_FILE" ]; then + LOCK_HASH=$(md5sum "$LOCK_FILE" | cut -c1-12) + VOLUME_NAME="${VOLUME_PREFIX}${LOCK_HASH}" + if docker volume inspect "$VOLUME_NAME" >/dev/null 2>&1; then + VOLUME_ARGS="-v ${VOLUME_NAME}:/workspace/apps/web/node_modules" + echo "使用缓存 volume: $VOLUME_NAME" + else + echo "提示: 未找到缓存 volume $VOLUME_NAME,将使用源码目录 node_modules" + fi +fi + +docker run --rm -v "$PWD:/workspace" $VOLUME_ARGS -w /workspace/apps/web docker.m.daocloud.io/library/node:20 sh -lc "$CMD"