12 Commits
Author SHA1 Message Date
admin b6180f765a Merge pull request '重整 Dockerfile 為多階段六步流程並補齊專案文件' (#16) from develop into master
CD / Release Tag Version (push) Successful in 5s
CD / Docker Build & Push (push) Successful in 1m12s
Reviewed-on: #16
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 04:33:51 +00:00
admin 53b5739e06 Merge pull request 'Release Tag Version 加上編號' (#13) from develop into master
CD / Release Tag Version (push) Successful in 11s
CD / Docker Build & Push (push) Successful in 2m12s
Reviewed-on: #13
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 02:32:23 +00:00
admin 6491a35da4 Merge pull request 'fix(codex): 加入 needs 變數' (#12) from develop into master
CD / Release Tag Version (push) Successful in 3s
CD / Docker Build & Push (push) Failing after 3s
Reviewed-on: #12
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 02:28:55 +00:00
admin 6bfc2c1940 Merge pull request 'fix(codex): 修正映像檔推送至倉庫的環境變數' (#11) from develop into master
CD / Docker Build & Push (push) Successful in 3s
CD / Release Tag Version (push) Successful in 4s
Reviewed-on: #11
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 02:25:26 +00:00
admin 7ec855de3d Merge pull request 'fix(codex): 密碼為空' (#10) from develop into master
CD / Release Tag Version (push) Successful in 5s
CD / Docker Build & Push (push) Failing after 11s
Reviewed-on: #10
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 02:21:48 +00:00
admin 4632a709aa Merge pull request 'refactor(codex): 重構 Codex 建置與推送到倉庫' (#9) from develop into master
CD / Release Tag Version (push) Successful in 4s
CD / Docker Build (push) Failing after 13s
Reviewed-on: #9
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 02:19:18 +00:00
admin ffb0369ee1 Merge pull request 'test(gitea): 列出所有變數' (#8) from develop into master
CD / Release Tag Version (push) Successful in 4s
CD / Docker Build (push) Failing after 2s
Reviewed-on: #8
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 02:04:05 +00:00
admin 4bcf4d6473 Merge pull request 'fest(codex): 修改取得存取庫名稱的方法' (#7) from develop into master
CD / Release Tag Version (push) Successful in 5s
CD / Docker Build (push) Failing after 14s
Reviewed-on: #7
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 01:58:48 +00:00
admin 3f99382936 Merge pull request 'fix(codex): 修正編號' (#6) from develop into master
CD / Docker Build (push) Failing after 4s
CD / Release Tag Version (push) Successful in 7s
Reviewed-on: #6
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 01:54:06 +00:00
admin e97e862748 Merge pull request 'feat(codex): 從 gitea 參數取得存取庫名稱' (#5) from develop into master
CD / Release Tag Version (push) Successful in 3s
CD / Docker Build (push) Failing after 9s
Reviewed-on: #5
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 01:52:28 +00:00
admin f23f1674e4 Merge pull request 'feat(codex): 加入標註成本的工作流程' (#4) from develop into master
CD / Release Tag Version (push) Successful in 5s
CD / Docker Build (push) Has been cancelled
Reviewed-on: #4
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 01:44:36 +00:00
admin 3c58fe37e8 Merge pull request 'feat(codex): 部屬 Codex 映像檔' (#2) from develop into master
CD / 部屬映像檔 (push) Has been cancelled
Reviewed-on: #2
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-30 01:39:06 +00:00
+48 -23
View File
@@ -1,40 +1,65 @@
# ============================================================================= # =============================================================================
# 用途:本 Dockerfile 採「階段建置(single-stage build)」產出 codex CLI 映像。 # 用途:本 Dockerfile 採「階段建置(multi-stage build)」產出 codex CLI 映像。
# node-slim 基底,透過 npm 全域安裝 @openai/codex CLI 套件 # build 階段使用 node-slim 基底,透過 npm 全域安裝 @openai/codex CLI 套件
# 並額外安裝 ca-certificates 以支援 HTTPS 連線, # runtime 階段同樣改用較小的 node-slim 基底,只帶入 build 階段安裝好的 codex
# 套件與其相依,並額外安裝 ca-certificates 以支援 HTTPS 連線,
# 最終映像預設執行 `codex --version`。 # 最終映像預設執行 `codex --version`。
# 更新日期:2026/07/01 09:58:04 # 更新日期:2026/06/30 12:23:42
# ============================================================================= # =============================================================================
# syntax 指示詞:指定使用 dockerfile:1 前端語法,啟用 BuildKit 進階功能(必須置於檔首第一行有效指令) # syntax 指示詞:指定使用 dockerfile:1 前端語法,啟用 BuildKit 進階功能(必須置於檔首第一行有效指令)
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
# 1. 參數處理:映像檔版本與套件版本皆直接寫死,無可調參數需以 ARG 注入(略) # 1. 參數處理:可調參數集中於檔首,以 ARG 注入
# ARG NODE_VERSIONnode 基底映像的版本號,預設 22,可於 build 時以 --build-arg 覆寫
ARG NODE_VERSION=22
# ARG BUILD_IMAGEbuild 階段的基底映像,預設為 node:<版本>-slimslim 版較精簡)
ARG BUILD_IMAGE=node:${NODE_VERSION}-slim
# ARG RUNTIME_IMAGEruntime 階段的基底映像,預設同樣為 node:<版本>-slim
ARG RUNTIME_IMAGE=node:${NODE_VERSION}-slim
# ARG CODEX_PACKAGE:要全域安裝的 npm 套件名稱,預設 @openai/codexcodex CLI
ARG CODEX_PACKAGE=@openai/codex
# ---- 單一建置階段:安裝 codex CLI 套件 ---- # ---- build 階段:安裝 codex CLI 套件 ----
# FROM node:22-slim:以 node 22 slim 版為基底開啟唯一建置階段(slim 版較精簡 # FROM ... AS build:以 BUILD_IMAGE 為基底開啟名為 build 的第一個建置階段(供後續 COPY --from 取用產物
FROM node:22-slim FROM ${BUILD_IMAGE} AS build
# ENV DEBIAN_FRONTEND=noninteractive:設定 Debian 套件管理為非互動模式,避免 apt 安裝時跳出互動提示而卡住建置 # 2. 安裝套件:以 npm 全域安裝 codex CLI(無本地相依描述檔,故無 manifest 先行 COPY 的 layer 快取最佳化空間)
ENV DEBIAN_FRONTEND=noninteractive
# 2. 安裝套件:先以 apt 安裝 codex 進行 HTTPS 連線所需的 ca-certificates,再以 npm 全域安裝 @openai/codex CLI
# 官方 node image 的全域安裝前綴為 /usr/local,套件與其相依落於 /usr/local/lib/node_modulesbin symlink 落於 /usr/local/bin # 官方 node image 的全域安裝前綴為 /usr/local,套件與其相依落於 /usr/local/lib/node_modulesbin symlink 落於 /usr/local/bin
# (單階段無跨階段 COPYnpm 建立的 /usr/local/bin/codex symlink 原地保留、指向正確,可正常解析平台原生相依 # ARG CODEX_PACKAGE:在 build 階段內重新宣告 ARG,使檔首定義的值可在此階段被引用(ARG 作用域以 FROM 為界,跨階段需重新宣告
# RUNapt 安裝 ca-certificates--no-install-recommends 不裝建議套件)→ npm 全域安裝 codex → ARG CODEX_PACKAGE
# 於同一層合併清理 apt 索引快取與 npm 快取,避免快取檔殘留而膨脹該層 # RUN npm install -g:全域安裝指定的 codex 套件;接著 npm cache clean --force 清除 npm 快取,
RUN apt-get update \ # 避免快取檔殘留於此層(雖然 build 階段產物不會整層帶入 runtime,仍維持乾淨並縮小該層)
&& apt-get install -y --no-install-recommends \ RUN npm install -g "${CODEX_PACKAGE}" \
ca-certificates \ && npm cache clean --force
&& npm install -g @openai/codex \
&& npm cache clean --force \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 3. 複製檔案:本映像為純 CLI 工具安裝,無專案原始碼需複製(略) # 3. 複製檔案:本映像為純 CLI 工具安裝,無專案原始碼需複製(略)
# 4. 執行程序:codex 為預編譯 npm 套件,無 build / compile / transpile 步驟(略) # 4. 執行程序:codex 為預編譯 npm 套件,無 build / compile / transpile 步驟(略)
# 5. 縮小映像檔:單階段下透過「slim 基底 + --no-install-recommends + 安裝與清理合併於同層(見步驟 2)」達成縮小,故此處無獨立清理指令 # ---- 5. 縮小映像檔:runtime 改用較小的 node-slim 基底,只帶執行所需產物 ----
# FROM ... AS runtime:以 RUNTIME_IMAGE 為基底開啟名為 runtime 的最終階段;
# 此階段為最終輸出映像,不含 build 階段的 npm 快取等中間產物,藉此縮小映像體積
FROM ${RUNTIME_IMAGE} AS runtime
# 保留原檔的 ENV 契約:DEBIAN_FRONTEND=noninteractive(並使下方 apt 安裝為非互動)
# ENV DEBIAN_FRONTEND=noninteractive:設定 Debian 套件管理為非互動模式,避免 apt 安裝時跳出互動提示而卡住建置
ENV DEBIAN_FRONTEND=noninteractive
# 保留原檔行為:安裝 ca-certificates 供 codex 進行 HTTPS 連線,安裝後清理 apt 快取縮小該層
# RUN apt-get:更新套件索引後,以 --no-install-recommends 僅安裝 ca-certificates(不裝建議套件,減少體積);
# 安裝完成後 apt-get clean 並刪除 /var/lib/apt/lists/* 套件索引快取,將清理與安裝合併於同一層以縮小該層
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 只帶入執行所需產物:全域安裝的 codex 套件(含其相依)與 bin symlink
# COPY --from=build node_modules:自 build 階段複製全域套件目錄(codex 套件本體與其所有相依)
COPY --from=build /usr/local/lib/node_modules /usr/local/lib/node_modules
# COPY --from=build codex:自 build 階段複製 codex 的可執行檔(bin symlink),使其可於 PATH 中直接呼叫
COPY --from=build /usr/local/bin/codex /usr/local/bin/codex
# 6. 設定入口:CMD 置於最後,語意與原檔一致 # 6. 設定入口:CMD 置於最後,語意與原檔一致
# CMD:容器啟動時的預設執行指令,預設執行 `codex --version` 顯示版本(exec form,不經 shell);可於 docker run 時覆寫 # CMD:容器啟動時的預設執行指令,預設執行 `codex --version` 顯示版本(exec form,不經 shell);可於 docker run 時覆寫
CMD ["codex", "--version"] CMD ["codex", "--version"]