diff --git a/deploy/container/gitea-ci-job.Dockerfile b/deploy/container/gitea-ci-job.Dockerfile index 733d3b3be..ec94382f6 100644 --- a/deploy/container/gitea-ci-job.Dockerfile +++ b/deploy/container/gitea-ci-job.Dockerfile @@ -198,12 +198,14 @@ RUN test -n "${NPM_LOCK_SHA256}" \ # 依赖预热会在 workspace 内解析出 Node 发行包自带的 npm(例如 10.9.8), # 并通过 PATH 里的 node_modules/.bin 影子化固定版本,因此全局固定版本在预热之后安装。 -# 基础 runner 镜像把 /opt/acttoolcache/node/24.18.0/x64/bin 放在 PATH 最前, -# 会影子化固定 Node / npm。这里把固定工具链写成绝对路径 wrapper, -# 并用同一组 wrapper 覆盖 base 镜像残留的 toolcache bin,避免 shell 是否登录改变解析结果。 +# 基础 runner 镜像把 /opt/acttoolcache/node/24.18.0/x64/bin 放在 PATH 最前,会影子化固定 Node / npm; +# 而 command.exec 只信任 /usr/local/bin 等系统目录,Node 必须在那里可见。 +# 因此固定工具链写成绝对路径 wrapper,并用同一组链接覆盖 base 镜像残留的 toolcache bin, +# 避免 shell 是否登录改变解析结果,同时保证 command.exec 能找到受信任 node。 RUN npm install --global --prefix /usr/local/lib/genarrative-node \ --no-audit --no-fund "npm@${NPM_VERSION}" \ && test "$(/usr/local/lib/genarrative-node/bin/node /usr/local/lib/genarrative-node/lib/node_modules/npm/bin/npm-cli.js --version)" = "${NPM_VERSION}" \ + && ln -sfn /usr/local/lib/genarrative-node/bin/node /usr/local/bin/node \ && rm -f /usr/local/bin/npm \ && printf '%s\n' '#!/bin/sh' \ 'exec /usr/local/lib/genarrative-node/bin/node /usr/local/lib/genarrative-node/lib/node_modules/npm/bin/npm-cli.js "$@"' \