🎯 什麼情境該想到我
當你「想上線一個修好的東西,卻得開單給 Operations 排隊等他們幫你部署」的時候。
⚙️ 怎麼用(步驟 / 公式)
意圖:讓程式升級流程能由 Development 或 Operations 任一方執行,理想上沒有任何手動步驟或交接,同時用自動化測試、自動化部署與變更的同儕審查,來取代「職責分離」作為風險控制手段。
關鍵研究數據:Puppet Labs 2013 State of DevOps Report 調查了四千多名技術專業人員,發現「由 Development 部署程式碼的組織」與「由 Operations 部署程式碼的組織」之間,變更成功率沒有統計上的顯著差異。
換句話說:當 Dev 與 Ops 之間有共同目標,且對部署結果有**透明度、責任與當責(transparency, responsibility, and accountability)**時,誰執行部署並不重要。甚至可以讓測試者或專案經理也能部署到某些環境(例如在 test 或 UAT 環境上架設特定功能的示範),好讓他們自己把工作做完。
三個都必須能自助的步驟
- Build:部署管線必須能從版控產生**可部署到任何環境(包含生產)**的套件。
- Test:任何人都應該能在自己的工作站或測試系統上,跑任一部分或全部的自動化測試套件。
- Deploy:任何人都應該能把這些套件部署到他有權限的任何環境,靠執行同樣簽入版控的腳本來完成。
部署自動化必須提供的能力(納入部署管線後)
- 確保持續整合過程中產生的套件適合部署到生產環境
- 一眼就能看出生產環境的就緒狀態
- 提供按鈕式、自助的方法,把任一合適版本的打包程式碼部署到生產
- 為稽核與合規目的自動記錄:哪些指令在哪些機器上、於何時被執行,誰授權的,輸出是什麼
- 跑 smoke test 確認系統運作正確、組態設定(包含資料庫連線字串等項目)正確
- 為部署者提供快速回饋,讓他能迅速判斷部署是否成功(部署成功了嗎?應用在生產中表現如預期嗎?)
速度目標:不能等好幾小時才知道部署成功或失敗、又要再花幾小時部署修正。有了容器這類技術,即使最複雜的部署也可能在數秒或數分鐘內完成。Puppet Labs 2014 State of DevOps Report 的資料顯示,高績效者的部署前置時間以分鐘或小時計,最低績效者則以月計。
原文:「The Puppet Labs’ 2013 State of DevOps Report, which surveyed over four thousand technology professionals, found that there was no statistically significant difference in the change success rates between organizations where Development deployed code and those where Operations deployed code.」(L6293–6296)
原文:「Record automatically, for auditing and compliance purposes, which commands were run on which machines when, who authorized it, and what the output was」(L6336–6338)
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 「誰部署都可以」的前提是共同目標 + 透明度 + 責任 + 當責,以及自動化測試、自動化部署、變更同儕審查這些替代控制;缺了這些就只是拿掉職責分離而已。
- 稽核紀錄不是事後補件,而是部署自動化必須內建的能力之一——這正是說服合規/稽核放行自助部署的籌碼。
- 部署權限仍受「他有權限的環境」限制,不是所有人都能推生產。