建置方案(Dockerfile 與 zbpack)
Git 服務在 Zenavo 的建置機上用 BuildKit 建置。服務如何建置稱為它的建置計劃,部署前可以預覽。
Dockerfile
如果服務的根目錄中有 Dockerfile,會直接使用它。新增服務時可以在 高階設定 → Dockerfile 路徑 中設定其他路徑,之後也可以在服務的 設定 分頁 → Dockerfile 中修改(例如 deploy/api.Dockerfile,相對於根目錄)。
zbpack
沒有 Dockerfile 時,zbpack 會識別語言和框架並生成一個。它支援 Node.js、Bun、Deno、Python、Go、PHP、Ruby、Java、Rust、.NET、靜態網站等。儲存庫中有 zbpack.json 檔案,或者服務有 ZBPACK_* 環境變數(用於設定 zbpack,例如建置和啟動指令)時,也會使用 zbpack。
zbpack 建置的映像檔監聽 8080 連接埠,所以除非你另外設定,服務的 HTTP 連接埠就是 8080。
zbpack 選項
在服務的 設定 分頁 → 建置 → zbpack 選項 中,每行填寫一個 KEY=value:
- 以
ZBPACK_開頭的鍵,例如ZBPACK_BUILD_COMMAND=npm run build或ZBPACK_START_COMMAND=node dist/server.js,會作為變數傳給 zbpack。它們優先於 變數 分頁中的ZBPACK_*變數。 - 其他鍵會寫入根目錄中的
zbpack.<service>.json,效果與儲存庫中的zbpack.json檔案相同。以 JSON 形式寫的值({…}、[…]、true或false)會保留其型別。
只要設定了任何 zbpack 選項,服務就會用 zbpack 建置,即使根目錄中有 Dockerfile。
建置參數
在 設定 分頁 → 建置 → 建置參數 中,每行填寫一個 KEY=value。每一項都會傳給建置:你自己的 Dockerfile 用同名的 ARG 行讀取;在 zbpack 生成的 Dockerfile 中,Zenavo 會在每個執行指令的階段加上這行 ARG。變數 分頁中的變數不會自動傳給建置;要使用某個變數,用 ${KEY} 引用它,例如 VITE_API_URL=${API_URL}。
建置日誌中會隱藏這些值,但如果宣告它的階段在最終映像檔中,就可以從映像檔的歷史中讀到;建置過程如果把它寫進了輸出,也能從輸出中讀到。只有在建置確實需要時,才把金鑰作為建置參數傳入。
根目錄
在 monorepo 中,新增服務時或之後在 設定 分頁中,把 根目錄 設為服務所在的資料夾,例如 /apps/api。建置以該資料夾作為上下文,Dockerfile 和 zbpack 都是如此。它必須在儲存庫內部。
要只在該資料夾有改動時重新部署,請設定服務的監聽路徑。
在 manifest 中
設定 分頁儲存的是專案 manifest 中服務 source 的這些欄位;你也可以在匯出或匯入的 manifest 中設定它們:
"source": {
"git": "https://github.com/acme/mono",
"ref": "main",
"context": "apps/api",
"dockerfile": "Dockerfile",
"build_args": { "NODE_ENV": "production" },
"zbpack": { "ZBPACK_BUILD_COMMAND": "npm run build" },
"auto_deploy": true,
"watch_paths": ["apps/api/", "packages/shared/"]
}建置計劃預覽
預覽會複製分支,報告建置將使用什麼,但不會建置或執行任何東西:
| 行 | 範例 |
|---|---|
| 提供方 | Dockerfile、go、nodejs、python 等 |
| 版本 | Go 版本 1.26.1,Node.js 版本 22 |
| 連接埠 | 來自 Dockerfile 的 EXPOSE,zbpack 則為 8080 |
限制
建置共享 Zenavo 的建置機,建置機繁忙時會排隊。一次建置(包括複製)最長可以執行方案的單次建置上限:Free 15 分鐘,Dev 30 分鐘,Pro、Team 和企業版 60 分鐘;其中複製本身最多 10 分鐘。達到上限的建置會被中止,部署失敗,已用的建置分鐘數照常計入。各方案的建置分鐘數見用量與帳單。