Engineering · 1 min read
釘版要附退場計畫
一個附了觸發原因、版本理由和解除條件的 pin 看起來完美,但證明回歸是真的、目標不是 EOL,才是真正的工作。
我們釘到 alpine:3.20,寫了教科書等級的退場筆記:觸發原因、為什麼選這個版本、什麼時候可以解除。三個欄位都填了。完美——除了「回歸」(regression:更新後壞掉的行為)不是真的,而 3.20 已經 EOL(End of Life,官方不再修補)。
釘版繞過一個上游回歸是合理的,靜默地釘版才是陷阱。一個沒有退場筆記的 pin 會變成一個沒人記得要解除的凍結。在 pin 旁邊記三件事:
- 觸發原因:什麼迫使你釘版(「go.mod → 1.25 拉進了更新的 Alpine / libvips」)
- 為什麼選這個版本:什麼是已知好的,你怎麼驗證的
- 解除條件:讓你可以拔掉 pin 的具體事件
退場條件是區分刻意的暫時性 pin 和意外腐爛的關鍵。
釘版之前,先證明回歸是真的。 Pin 繼承了底下診斷的正確性。先用生產形態的輸入驗證(見測試結果只是關於輸入的事實)——釘過一個不存在的 bug 等於無故凍結。
然後確認「最後已知好」的版本不是 EOL。 通過測試的最新版本可能已經 end-of-life,用真實的 CVE(公開揭露的安全漏洞)修補換來了一個修正(見 EOL base image 讓安全更新靜默失效)。
兩道閘門都被跳過了,而任何一道都能獨立終止事件:閘門 1 因為回歸不是真的,閘門 2 因為 3.20 已經 EOL。退場筆記,那個唯一做對的部分,反而是最不重要的部分。
pin 的退場計畫是最容易寫的部分;驗證你有東西需要 pin,才是真正的工作。
參考來源:
Related: 回到連鎖反應總覽,或參見測試結果只是關於輸入的事實和 EOL base image 讓安全更新靜默失效。