diff --git a/gitea_runner_node/Dockerfile b/gitea_runner_node/Dockerfile index b092867..60507a5 100644 --- a/gitea_runner_node/Dockerfile +++ b/gitea_runner_node/Dockerfile @@ -9,13 +9,30 @@ LABEL description="Gitea Action Runner with Node.js 18/20/22 and multiple packag # Node.js 安装目录 ENV NODE_BASE=/usr/local/node -# 安装 Node.js 多版本环境和包管理器 -RUN npm install -g n \ - && mkdir -p ${NODE_BASE} \ - && n install 18 \ - && n install 20 \ - && n install 22 \ - && n use 20 \ +# 安装 Node.js 多版本环境(Alpine musl 版本) +RUN set -ex \ + && apk add --no-cache libstdc++ \ + && mkdir -p ${NODE_BASE}/versions \ + # 下载并安装 Node.js 18 (musl) + && wget -q https://unofficial-builds.nodejs.org/download/release/v18.20.8/node-v18.20.8-linux-x64-musl.tar.xz -O /tmp/node18.tar.xz \ + && tar -xJf /tmp/node18.tar.xz -C ${NODE_BASE}/versions \ + && mv ${NODE_BASE}/versions/node-v18.20.8-linux-x64-musl ${NODE_BASE}/versions/18 \ + # 下载并安装 Node.js 20 (musl) + && wget -q https://unofficial-builds.nodejs.org/download/release/v20.20.0/node-v20.20.0-linux-x64-musl.tar.xz -O /tmp/node20.tar.xz \ + && tar -xJf /tmp/node20.tar.xz -C ${NODE_BASE}/versions \ + && mv ${NODE_BASE}/versions/node-v20.20.0-linux-x64-musl ${NODE_BASE}/versions/20 \ + # 下载并安装 Node.js 22 (musl) + && wget -q https://unofficial-builds.nodejs.org/download/release/v22.12.0/node-v22.12.0-linux-x64-musl.tar.xz -O /tmp/node22.tar.xz \ + && tar -xJf /tmp/node22.tar.xz -C ${NODE_BASE}/versions \ + && mv ${NODE_BASE}/versions/node-v22.12.0-linux-x64-musl ${NODE_BASE}/versions/22 \ + # 设置默认版本为 20 + && ln -sf ${NODE_BASE}/versions/20/bin/node /usr/local/bin/node \ + && ln -sf ${NODE_BASE}/versions/20/bin/npm /usr/local/bin/npm \ + && ln -sf ${NODE_BASE}/versions/20/bin/npx /usr/local/bin/npx \ + # 安装全局包管理器 && npm install -g yarn pnpm \ - && printf '#!/bin/bash\ncase "$1" in\n 18|20|22)\n n use "$1" > /dev/null 2>&1\n export PATH="/usr/local/n/versions/node/$1/bin:${PATH}"\n echo "Switched to Node.js $1: $(node -v)"\n ;;\n *)\n echo "Usage: source use-node [18|20|22]"\n return 1\n ;;\nesac\n' > /usr/local/bin/use-node \ - && chmod +x /usr/local/bin/use-node + # 创建版本切换脚本 + && printf '#!/bin/bash\ncase "$1" in\n 18|20|22)\n export PATH="${NODE_BASE}/versions/$1/bin:${PATH}"\n ln -sf ${NODE_BASE}/versions/$1/bin/node /usr/local/bin/node\n ln -sf ${NODE_BASE}/versions/$1/bin/npm /usr/local/bin/npm\n ln -sf ${NODE_BASE}/versions/$1/bin/npx /usr/local/bin/npx\n echo "Switched to Node.js $1: $(node -v)"\n ;;\n *)\n echo "Usage: use-node [18|20|22]"\n exit 1\n ;;\nesac\n' > /usr/local/bin/use-node \ + && chmod +x /usr/local/bin/use-node \ + # 清理临时文件 + && rm -f /tmp/node*.tar.xz