教程導讀:GitHub Actions/GitLab CI遠端 Macterraform init 時,常見搜尋是「跨境拉 Provider」「TF_PLUGIN_CACHE_DIR 共用風險」「.terraform.lock.hcl 門禁」。本文含評測閾值可複製變數與 terraform.rc對照矩陣FAQ;並對齊 併發寫鎖二/四/八秒 流程重試。內鏈:技術部落格列表MacPull 首頁;延伸 Helm OCI 拉取矩陣構建池併發 FAQ

評測維度與閾值

痛點:跨境 RTT 放大握手與下載成本;② 多 Pipeline 共用 TF_PLUGIN_CACHE_DIR 易撞檔案鎖;③ lockfile 與解析版本漂移。另需留意 模組來源(Git/HTTP)亦會放大網路變異,宜與 Provider 策略分開觀測。下列閾值請寫入 Runbook。

建議閾值(依出口微調)
  • 快取磁碟initAPFS 可用 ≥12GB;不足先清子目錄或乾淨工作區。
  • init 逾時:跨境外層10–20 分鐘硬逾時;逾時勿無限重試,改記錄鏡像與 digest。
  • 流程重試二/四/八秒退避、最多三次;逾六十秒仍敗則降併發或換備援鏡像。
  • 併發寫快取:同機並行 Job 各用獨立 TF_PLUGIN_CACHE_DIR 子路徑,避免兩條管線掃同一樹。

可執行命令/環境變數清單

憑證與鏡像 URL 放密文;terraform.rc 可預置於映像再以 TF_CLI_CONFIG_FILE 指向。需要隔離工作資料夾時可另設 TF_DATA_DIR,與快取目錄分開,降低誤刪風險。

export TF_IN_AUTOMATION=1 TF_INPUT=0
export TF_CLI_CONFIG_FILE="${HOME}/.terraformrc-ci"
export TF_PLUGIN_CACHE_DIR="${HOME}/Library/Caches/tf-plugin/${CI_JOB_ID:-local}"
mkdir -p "${TF_PLUGIN_CACHE_DIR}"
cat > "${TF_CLI_CONFIG_FILE}" <<'EOF'
provider_installation {
  network_mirror {
    url     = "https://tf-mirror.example.com/v1/providers/"
    include = ["registry.terraform.io/*/*"]
  }
  direct { exclude = [] }
}
credentials "app.terraform.io" { token = "REPLACE_WITH_CI_SECRET" }
EOF
# 於開發機或黃金映像產生 lock 後提交;CI 內乾跑:
terraform init -input=false -no-color

私有 Registry 時,credentials 區塊的 hostname 須與 required_providers 來源字串一致,避免默默走匿名直連。

1

鎖檔入庫:.terraform.lock.hcl 與程式碼一併版控;禁止在受保護分支默默 -upgrade;升級 Provider 走獨立 PR 以利回滾。

2

校驗平台:terraform providers lockdarwin_arm64 等目標,避免 CI 首次解析漂移。

3

鏡像順序:provider_installation 內排 network_mirrorfilesystem_mirrordirect;跨境鏡像優先。

4

觀測:短期 TF_LOG=INFO 導工件;對照鏡像 access log。

5

門禁:fmt -checkvalidateinit 乾跑;PR 檢 lock 差異與權杖未入庫。

對照表或決策矩陣

Registry 直連 × 鏡像 × 本機目錄
維度直連 Registrynetwork_mirrorfilesystem_mirror
跨境延遲易受出口抖動影響邊緣鏡像較穩區網/本機最低
維運成本低;顧配額審計索引同步批次同步目錄
lockfiledigest 變動頻與直連一致最佳缺版硬失敗
併發鎖獨立 cache 目錄鏡像扛 QPS唯讀掛載+本機 cache
場景內網低延遲跨境主力離線映像

filesystem_mirror 常見作法是將套件樹同步至內網唯讀掛載,仍以本機 TF_PLUGIN_CACHE_DIR 承接執行期熱檔;與 Helm OCI 拉取矩陣相同,請把 digest 稽核出站白名單 一併納入合規清單。

FAQ

為何 init 偶發「快取損毀」或卡住?

多為共用 cache 根目錄或碟滿。改每 CI_JOB_ID 子資料夾並監控空間;敗後刪子樹單次重試,勿並行寫同樹。

鏡像回 403/簽章不符怎麼辦?

核對 credentials 與鏡像前綴;比 lock hashes 與鏡像 digest。仍敗暫切 direct 並寫工件供資安複核。

需要開 TF_PLUGIN_CACHE_MAY_BREAK_DEPENDENCY_LOCK_FILE 嗎?

受保護流水線勿常態開;升級走獨立變更單。救災限分支並於合併前還原旗標。

總結:Registry/Mirrorlockfile、cache 隔離、init 門禁、二四八秒重試 政策化,跨境 遠端 Mac CI 方可重現。免登入:首頁定價購買說明中心技術部落格

遠端 Mac CI × Terraform 供應鏈

固定節點驗證 init/鏡像與 lockfile 門禁

說明中心定價購買 皆可免登入先逛;延伸閱讀 技術部落格 內 OCI/構建池系列。

Apple Silicon
SSH
彈性租期
支援管道