From dc54b1d04839a7ad0a823bde29344fa1be6e7fbf Mon Sep 17 00:00:00 2001 From: kdletters Date: Mon, 21 Sep 2026 03:06:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=9B=BA=E5=AE=9A=20Node=20?= =?UTF-8?q?=E5=9C=A8=E7=B3=BB=E7=BB=9F=20PATH=20=E7=9A=84=E5=8F=AF?= =?UTF-8?q?=E8=A7=81=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 上一版把固定 Node 只放在 /usr/local/lib/genarrative-node,未在 /usr/local/bin 建 node 链接 - command.exec 只信任 /usr/local/bin 等系统目录,导致 CI 上所有需要真实 node 的命令用例失败(找不到受信任的 node 可执行文件) - 在 npm 固定版本步骤后恢复 /usr/local/bin/node 符号链接,并同步注释口径 --- deploy/container/gitea-ci-job.Dockerfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 "$@"' \