Files
Genarrative/scripts/jenkins-prepare-npm-env.sh
kdletters 78ebe063f3
Project CI / Native shell tests (push) Failing after 2m18s
Project CI / Repository checks (push) Successful in 4m7s
Project CI / Frontend tests (push) Successful in 4m35s
Project CI / Backend tests (push) Successful in 5m30s
修复Jenkins Web构建npm版本漂移
新增 Jenkins 用户级 npm 10.9.7 版本隔离引导
在 Web Build 各独立 shell 复用固定 npm 后执行 workspace 安装与门禁
收紧生产运维检查并同步 npm workspaces 文档与共享决策
2026-08-23 04:11:18 +08:00

44 lines
1.5 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
expected_version="${GENARRATIVE_NPM_VERSION:?GENARRATIVE_NPM_VERSION 不能为空}"
if [[ ! "${expected_version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "[jenkins-npm] 非法 npm 版本: ${expected_version}" >&2
return 1 2>/dev/null || exit 1
fi
if [[ -n "${GENARRATIVE_JENKINS_NPM_PREFIX:-}" ]]; then
npm_prefix="${GENARRATIVE_JENKINS_NPM_PREFIX}"
else
npm_home="${HOME:?HOME 不能为空}"
npm_prefix="${npm_home}/.local/share/genarrative/npm-${expected_version}"
fi
pinned_npm="${npm_prefix}/bin/npm"
actual_version=""
if [[ -x "${pinned_npm}" ]]; then
actual_version="$("${pinned_npm}" --version 2>/dev/null || true)"
fi
if [[ "${actual_version}" != "${expected_version}" ]]; then
bootstrap_npm="$(command -v npm || true)"
if [[ -z "${bootstrap_npm}" ]]; then
echo "[jenkins-npm] 缺少用于引导固定版本的 npm" >&2
return 1 2>/dev/null || exit 1
fi
echo "[jenkins-npm] 准备 npm ${expected_version} (bootstrap=${bootstrap_npm})"
mkdir -p "${npm_prefix}"
"${bootstrap_npm}" install --global --prefix "${npm_prefix}" "npm@${expected_version}" --ignore-scripts --no-audit --no-fund
fi
export PATH="${npm_prefix}/bin:${PATH}"
actual_version="$(npm --version)"
if [[ "${actual_version}" != "${expected_version}" ]]; then
echo "[jenkins-npm] npm 版本不匹配:期望 ${expected_version},实际 ${actual_version}" >&2
return 1 2>/dev/null || exit 1
fi
echo "[jenkins-npm] npm=$(command -v npm) version=${actual_version}"