编辑文件 Dockerfile
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed

This commit is contained in:
xinian
2026-03-29 11:18:25 +08:00
committed by cnb
parent 44591d21b1
commit 728b8748a9

View File

@@ -27,123 +27,123 @@ ENV OPENAI_API_KEY="sk-foAHgsJtmanACECtBlFYZE2z4LkwBboEOYETO3ZdWvCxdmNr"
# ========================================== # ==========================================
RUN set -ex; \ RUN set -ex; \
apt update && \ apt update && \
apt install -y --no-install-recommends \ apt install -y --no-install-recommends \
wget rsync unzip openssh-server vim lsof git git-lfs \ wget rsync unzip openssh-server vim lsof git git-lfs \
locales libgit2-1.5 libgit2-dev net-tools jq curl ca-certificates sudo gnupg lsb-release && \ locales libgit2-1.5 libgit2-dev net-tools jq curl ca-certificates sudo gnupg lsb-release && \
# 安装 Golang \ # 安装 Golang \
curl -fsSLO "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" && \ curl -fsSLO "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" && \
rm -rf /usr/local/go && tar -C /usr/local -xzf "go${GO_VERSION}.linux-amd64.tar.gz" && \ rm -rf /usr/local/go && tar -C /usr/local -xzf "go${GO_VERSION}.linux-amd64.tar.gz" && \
rm -f "go${GO_VERSION}.linux-amd64.tar.gz" && \ rm -f "go${GO_VERSION}.linux-amd64.tar.gz" && \
# 安装 golangci-lint \ # 安装 golangci-lint \
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.54.2 && \ curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.54.2 && \
# 安装 Node.js 22 ( Codex 使用) \ # 安装 Node.js 22 ( Codex 使用) \
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
apt install -y nodejs && \ apt install -y nodejs && \
# 安装 code-server \ # 安装 code-server \
curl -fsSL https://code-server.dev/install.sh | sh && \ curl -fsSL https://code-server.dev/install.sh | sh && \
# 清理缓存 \ # 清理缓存 \
apt clean && rm -rf /var/lib/apt/lists/* apt clean && rm -rf /var/lib/apt/lists/*
# ========================================== # ==========================================
# 4. 安装 Go & Node 工具链 # 4. 安装 Go & Node 工具链
# ========================================== # ==========================================
RUN set -ex; \ RUN set -ex; \
go install -v golang.org/x/tools/gopls@latest && \ go install -v golang.org/x/tools/gopls@latest && \
go install -v github.com/cweill/gotests/gotests@latest && \ go install -v github.com/cweill/gotests/gotests@latest && \
go install -v github.com/josharian/impl@latest && \ go install -v github.com/josharian/impl@latest && \
go install -v github.com/haya14busa/goplay/cmd/goplay@latest && \ go install -v github.com/haya14busa/goplay/cmd/goplay@latest && \
go install -v github.com/go-delve/delve/cmd/dlv@latest && \ go install -v github.com/go-delve/delve/cmd/dlv@latest && \
go install github.com/goreleaser/goreleaser/v2@latest && \ go install github.com/goreleaser/goreleaser/v2@latest && \
npm install -g @openai/codex npm install -g @openai/codex
# ========================================== # ==========================================
# 5. 安装 code-server 插件 # 5. 安装 code-server 插件
# ========================================== # ==========================================
RUN set -eux; \ RUN set -eux; \
USER_DATA_DIR=/var/lib/code-server; \ USER_DATA_DIR=/var/lib/code-server; \
EXTENSIONS_DIR="${USER_DATA_DIR}/extensions"; \ EXTENSIONS_DIR="${USER_DATA_DIR}/extensions"; \
mkdir -p "${EXTENSIONS_DIR}" /root/.vscode-server; \ mkdir -p "${EXTENSIONS_DIR}" /root/.vscode-server; \
FAILED_EXTENSIONS=""; \ FAILED_EXTENSIONS=""; \
for ext in \ for ext in \
dbaeumer.vscode-eslint \ dbaeumer.vscode-eslint \
redhat.vscode-yaml \ redhat.vscode-yaml \
esbenp.prettier-vscode \ esbenp.prettier-vscode \
golang.go \ golang.go \
eamodio.gitlens \ eamodio.gitlens \
waderyan.gitblame \ waderyan.gitblame \
donjayamanne.githistory \ donjayamanne.githistory \
mhutchie.git-graph \ mhutchie.git-graph \
tencent-cloud.coding-copilot\ tencent-cloud.coding-copilot\
; do \ ; do \
if ! /usr/bin/code-server --install-extension "${ext}" --user-data-dir "${USER_DATA_DIR}" --extensions-dir "${EXTENSIONS_DIR}"; then \ if ! /usr/bin/code-server --install-extension "${ext}" --user-data-dir "${USER_DATA_DIR}" --extensions-dir "${EXTENSIONS_DIR}"; then \
FAILED_EXTENSIONS="${FAILED_EXTENSIONS} ${ext}"; \ FAILED_EXTENSIONS="${FAILED_EXTENSIONS} ${ext}"; \
echo "WARN: extension install failed: ${ext}"; \ echo "WARN: extension install failed: ${ext}"; \
fi; \ fi; \
done; \ done; \
rm -rf /root/.vscode-server/extensions /root/extensions; \ rm -rf /root/.vscode-server/extensions /root/extensions; \
ln -s "${EXTENSIONS_DIR}" /root/.vscode-server/extensions; \ ln -s "${EXTENSIONS_DIR}" /root/.vscode-server/extensions; \
ln -s "${EXTENSIONS_DIR}" /root/extensions; \ ln -s "${EXTENSIONS_DIR}" /root/extensions; \
chmod -R a+rwX "${USER_DATA_DIR}"; \ chmod -R a+rwX "${USER_DATA_DIR}"; \
chmod -R a+rX /root/.vscode-server; \ chmod -R a+rX /root/.vscode-server; \
[ -z "${FAILED_EXTENSIONS}" ] && echo "所有插件安装完成 ✅" || echo "以下插件安装失败:${FAILED_EXTENSIONS}" [ -z "${FAILED_EXTENSIONS}" ] && echo "所有插件安装完成 ✅" || echo "以下插件安装失败:${FAILED_EXTENSIONS}"
# ========================================== # ==========================================
# 6. 统一缓存目录 & 环境变量 # 6. 统一缓存目录 & 环境变量
# ========================================== # ==========================================
RUN mkdir -p /workspace/.cache/go-build /workspace/.cache/gomod /workspace/.cache/goimports && \ RUN mkdir -p /workspace/.cache/go-build /workspace/.cache/gomod /workspace/.cache/goimports && \
chmod -R a+rwx /workspace/.cache && \ chmod -R a+rwx /workspace/.cache && \
printf '%s\n' \ printf '%s\n' \
'export XDG_CACHE_HOME=/workspace/.cache' \ 'export XDG_CACHE_HOME=/workspace/.cache' \
'export GOCACHE=/workspace/.cache/go-build' \ 'export GOCACHE=/workspace/.cache/go-build' \
'export GOMODCACHE=/workspace/.cache/gomod' \ 'export GOMODCACHE=/workspace/.cache/gomod' \
>> /etc/profile >> /etc/profile
# ========================================== # ==========================================
# 7. 核心优化内置动态 Entrypoint 脚本 # 7. 核心优化内置动态 Entrypoint 脚本
# (每次容器启动时根据当前环境变量动态生成 Codex 配置) # (每次容器启动时根据当前环境变量动态生成 Codex 配置)
# ========================================== # ==========================================
RUN cat > /entrypoint.sh <<'SCRIPT' RUN cat > /entrypoint.sh <<'SCRIPT'
#!/bin/bash #!/bin/bash
set -e set -e
# 确保目录存在 # 确保目录存在
mkdir -p /root/.codex mkdir -p /root/.codex
# 动态渲染 config.toml # 动态渲染 config.toml
cat > /root/.codex/config.toml <<EOF cat > /root/.codex/config.toml <<EOF
model_provider = "OpenAI" model_provider = "OpenAI"
model = "${CODEX_MODEL:-gpt-4o}" model = "${CODEX_MODEL:-gpt-4o}"
model_reasoning_effort = "high" model_reasoning_effort = "high"
disable_response_storage = true disable_response_storage = true
[model_providers.OpenAI] [model_providers.OpenAI]
name = "OpenAI" name = "OpenAI"
base_url = "${CODEX_BASE_URL:-https://api.openai.com/v1}" base_url = "${CODEX_BASE_URL:-https://api.openai.com/v1}"
wire_api = "responses" wire_api = "responses"
requires_openai_auth = true requires_openai_auth = true
EOF EOF
# 动态渲染 auth.json # 动态渲染 auth.json
cat > /root/.codex/auth.json <<EOF cat > /root/.codex/auth.json <<EOF
{ {
"auth_mode": "apikey", "auth_mode": "apikey",
"OPENAI_API_KEY": "${OPENAI_API_KEY:-}" "OPENAI_API_KEY": "${OPENAI_API_KEY:-}"
} }
EOF EOF
chmod 600 /root/.codex/auth.json chmod 600 /root/.codex/auth.json
# 将变量注入当前 shell 环境 (用于终端直接使用 codex 命令) # 将变量注入当前 shell 环境 (用于终端直接使用 codex 命令)
export OPENAI_API_KEY="${OPENAI_API_KEY:-}" export OPENAI_API_KEY="${OPENAI_API_KEY:-}"
export CODEX_API_KEY="${OPENAI_API_KEY:-}" export CODEX_API_KEY="${OPENAI_API_KEY:-}"
echo "✅ Codex 配置已动态加载: Model=${CODEX_MODEL}, BaseURL=${CODEX_BASE_URL}" echo "✅ Codex 配置已动态加载: Model=${CODEX_MODEL}, BaseURL=${CODEX_BASE_URL}"
# 执行 Dockerfile 原本的 CMD (: code-server bash) # 执行 Dockerfile 原本的 CMD (: code-server bash)
exec "$@" exec "$@"
SCRIPT SCRIPT
chmod +x /entrypoint.sh chmod +x /entrypoint.sh
# 将入口点设为该脚本 # 将入口点设为该脚本
ENTRYPOINT ["/entrypoint.sh"] ENTRYPOINT ["/entrypoint.sh"]
# 默认启动 bash (你可以通过 docker run 覆盖比如改成 code-server) # 默认启动 bash (你可以通过 docker run 覆盖比如改成 code-server)
CMD ["/bin/bash"] CMD ["/bin/bash"]