儲存庫指令碼
儲存庫指令碼是你依每個儲存庫設定的 shell 指令碼(設定 → 存放庫 → 儲存庫資料列上的終端機圖示),
Control Center 的伺服器會對該儲存庫的某個空間的工作樹執行它們——也就是代理工作所在的隔離簽出,
位於 <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/。
這些指令碼有兩種:
| 指令碼 | 執行時機 | 用途 |
|---|---|---|
| 設定 | 為某個空間佈建工作樹後立即執行 | 安裝相依套件、產生檔案、複製 .env |
| 封存 | 工作樹即將被銷毀或垃圾回收之前 | 清理工作樹之外的資源(docker 網路、通道、外部狀態) |
指令碼的執行位置
標題為「指令碼的執行位置」的章節兩種指令碼都透過 bash -lc 執行(登入 shell,因此以 Homebrew 或 nvm 安裝的工具會在
PATH 上),並以工作樹做為工作目錄,且會設定下列環境變數:
| 變數 | 值 |
|---|---|
CC_WORKSPACE_PATH |
工作樹(指令碼的 cwd) |
CC_ROOT_PATH |
已註冊的來源儲存庫——你自己的簽出 |
CC_SPACE_ID |
工作樹所屬的空間 |
CC_SPACE_NAME |
空間的顯示名稱 |
CC_REPO_NAME |
儲存庫的顯示名稱 |
例如,一個會安裝相依套件並帶入儲存庫中被 git 忽略的 .env 的設定指令碼:
pnpm installcp "$CC_ROOT_PATH/.env" .envpnpm run build失敗行為
標題為「失敗行為」的章節- 設定指令碼若以非零狀態結束(或超過 5 分鐘逾時),會使該空間的佈建失敗:該空間會 顯示失敗狀態並提供重試,且該次執行的輸出尾端會被記錄下來。重試會從乾淨的工作樹佈 建,並再次執行指令碼——請把設定指令碼寫成在部分安裝後重新執行仍能運作(套件管理器 本來就是這種行為)。
- 封存指令碼是盡力而為:失敗(或其 2 分鐘逾時)會被記錄,但絕不會阻擋刪除。封存 會在無人能回應提示的 GC 路徑上執行(空間已刪除、PR 已合併、排程清理)。
設定只會在全新的工作樹上執行:把代理重新派送到已預熱的空間會重用既有的簽出,不會 再次付出安裝成本。
執行記錄
標題為「執行記錄」的章節每一次執行都會記錄其狀態、持續時間、結束代碼,以及有長度上限的輸出尾端,並顯示在
同一個設定對話框的「最近的執行」之下(repos.watchScriptRuns 訂閱會即時串流這些資料)。
指令碼是伺服器執行的 shell,因此只有工作區管理員能撰寫,並受到 processSpawn 動作類別
把關——這道護欄網與所有其他會產生處理序的作業所受到的把關完全相同。