iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
Software Development

Phoenix 2026:當《鳳凰專案》遇上 AI Agent —— 30 天 DevOps 職場 RPG 冒險系列 第 19

Day 19: 你敢不敢讓「改動」變成一次 Pull Request?

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260807/20183265XcCHYVCUza.jpg

在 Day 18 中,你頂住壓力砍掉了一半毫無實質意義的簽核關卡,將那些橡皮圖章改寫成了產線上的自動化合規檢查。變更代碼終於能夠快速在產線中流動,而不再無謂地卡在排隊等待中。

然而今天,你卻要面對一個更為致命、更底層的漏洞:那些根本沒有進入產線流程的「隱形改動」。

凌晨 3 點,你的手機劇烈震動。Platform Lead 在電話那頭聲音沙啞且疲憊:「Bill,Production 環境 K8s 的 Resource Quota 不知道被誰改動了,導致核心模型服務因內存溢出全部掛掉。我目前正在查是誰在什麼時間改的,但……系統裡沒有留下任何修改紀錄。」

又是這一套熟悉的悲劇。

這讓你瞬間想起了 Day 2 那場驚心動魄的薪資支付災難:有人半夜手動登入伺服器修改了資料庫配置,沒有 Ticket 紀錄、沒有 PR、沒有審查,直到引發雪崩故障才被動發現。你當時以為那只是一次偶發的個案,但當你開始動手清查,你才震驚地發現,手動修改設定在組織內早已是心照不宣的日常常態。

環境設定、基礎設施變更、部署流程參數——所有這一切,至今依然在依賴工程師手動修改。

隨意改動、沒有紀錄、出事崩潰、無法回溯。下一次,相同的悲劇依然會換個方式捲土重來。


場景:那些在生產環境不留痕跡的隱形修改

早上九點,你把 Platform、Data、AI 三個技術團隊的主管召集到會議室裡。你在白板上貼出了一份由監控系統比對出來的真實清單:

🚨 過去單月無 PR 紀錄的線上生產環境變更盤點

  1. K8s Resource Quota 調整:3 次(其中 2 次直接導致線上微服務異常重啟)。
  2. 資料庫連線池參數修改:2 次(其中 1 次引發連線數爆滿雪崩)。
  3. Feature Store Schema 手動新增欄位:1 次(導致舊版本模型解析失敗崩潰)。
  4. CI/CD Pipeline 環境變數手動變更:4 次(全部無任何追蹤紀錄)。
  5. 系統監控告警閾值手動修改:6 次(其中 3 次直接關閉了核心業務的關鍵告警)。

這些變更,無一例外都是工程師直接「SSH 進伺服器修改」或是「手動在管理 UI 上點擊調整」。沒有 PR、沒有審批、沒有任何日誌追蹤。

Data Lead 有些不服氣地辯解:「Bill,這些都只是微調一些小參數而已,如果每次改個數字都要去開 PR 跑測試,那開發速度不是被拖得更慢了嗎?」

Platform Lead 隨後補充:「而且很多 K8s 的資源配額設定在當下是實驗性質的,我們需要先手動改改看效果,確定能行再把代碼寫回代碼庫。」

AI Lead 也連連點頭:「對啊,線上流量突增時需要緊急調整參數救火,那時候時間就是生命,哪裡還有閒工夫去走標準 PR 流程?」

你聽懂了他們的潛台詞……

他們並非不知道 GitOps 或基礎設施即代碼的理念,而是主觀認為這些規範「太慢、太重、根本不實用」。

所以,他們寧可繼續依賴「手動修改」這條看起來最快、最省事的捷徑——直到這個捷徑讓所有人半夜從床上驚醒。

你深吸了一口氣,打開投影片:「我給你們看兩條不同的改動路徑。」


兩難:手動快?還是流程可控快?

🔴 選項 A:繼續保留手動直接修改的「捷徑快車道」 🔵 選項 B:將所有變更納入 GitOps / 基礎設施即代碼
短期效益:✓ 變更立刻生效,省去了開 PR 與排隊等待審查的時間長期代價:✗ 系統狀態無紀錄,環境難以重現,故障難以追溯✗ 每次生產環境災難都得從頭排查,薪資災難反覆重演結果:✗ 獲得了暫時的快速,卻埋下了不可控的系統性定時炸彈 短期代價:✗ 前期需要投入資源建置自動化工具,存在學習曲線✗ 每一次微小的參數調整都需要走標準的 PR 流轉流程長期效益:✓ 所有變更皆可追溯、可稽核,且具備秒級回滾能力✓ 從根本上消滅「誰改了什麼?為什麼改?」的追問結果:✓ 前期投資,換取系統長期、穩定且高度安全的運作

如果是你,你會縱容手動操作的片刻快速,還是堅持將所有變更全部收攏進 PR 流程的可控防禦中?


翻牌:如果變更沒有留下 PR,它就等於從未發生過

正確答案是 選項 B

這毫無疑問是組織變革中最難以落地的一項決策。因為它在本質上要求所有人徹底改變根深蒂固的工作習慣:從任性的「我想改就直接改」,轉化為標準的「所有修改必須經由 PR 合入」。

這從不是一個純粹的技術選型,而是一場組織的工程文化重塑。

在《鳳凰專案》中,技術主管 BillPalmer 最終學到的黃金管理法則之一是:一切不可重現的隱形變更,本質上都是埋在生產環境中的定時炸彈。

你可以用手動方式把當下的生產環境調整得再完美,但如果未來遇到災難需要異地重建時,你根本無法重現這些當初手動修改的細節。你只是在竭力「維持一個脆弱的現狀」,而沒有在「建立一個強韌的系統」。

這正是**基礎設施即代碼(Infrastructure as Code, IaC)**與 GitOps 的靈魂所向:

  1. 一切變更代碼化:所有的基礎設施配置(如 K8s Manifests、Terraform)均用代碼描述並託管於 Git。
  2. 改動唯一路徑:唯一的變更入口是提交 Git PR,強制走自動化靜態校驗與同儕審查。
  3. 自動化協同:PR 一旦被 Merge 進入主幹,系統自動化引擎(如 ArgoCD)自動將變更套用至線上,禁止人手手動修改。

這能徹底消除 Day 2 那種「半夜有人改了配置,全公司卻沒有人知道」的噩夢——因為沒有 PR,系統根本就不會發生任何變更。

❌ 傳統手動變更路徑(高風險、無追蹤):

工程師 ──> 手動 SSH 登入 Production ──> 使用 Vim 直接修改 /etc/config ──> 手動重啟服務
(無版本紀錄、無同儕評估、一旦出事完全無法回滾)

🛡️ GitOps 自動化防禦路徑(安全、可回滾):

工程師 ──> 提交修改代碼或 yaml 的 PR ──> CI 自動跑單元測試與安全掃描 ──>
AI Reviewer 進行影響與沙箱模擬分析 ──> 人類專家進行最後商業決策審查 ──> 
自動 Merge ──> 系統自動部署至生產環境 (留下完整的 Git Commit 與審查日誌)

如果一個生產環境的改動沒有留下對應的 PR,它就等於從未發生過——直到它引發災難,在半夜把你從睡夢中叫醒。


如果有 AI Agent:讓 PR 變更審查成為最靈敏的安全網

Data Lead 依然心存疑慮:「Bill,開 PR 真的不會拖慢速度嗎?如果線上出了緊急效能瓶頸,我修改一個參數還得排隊等同事 Review,這不是眼睜睜看著故障擴大嗎?」

你微笑著搖了搖頭:「如果 PR 流程依然依靠低效的人工去肉眼看代碼,那確實會拖慢速度。但如果我們讓 AI Agent 在 PR 提交的瞬間,就自動幫你做完 80% 的安全校驗呢?」

在工程師提交 PR 的那一秒鐘,AI Security Agent 已經自動在臨時沙箱中跑完了影響範圍分析、變更模擬測試與風險評估,並在 3 秒鐘內將完整報告呈現在 PR 下方。

graph TD
    A[工程師開 PR:<br/>調整 K8s resource quota] --> B[AI Reviewer 自動掃描]
    B --> C{影響分析}
    C --> D[這會影響 3 個服務]
    C --> E[Resource quota 從 4GB -> 2GB]
    C --> F[Staging 預演測試:<br/>模型服務會因記憶體不足 OOM]
    D --> G[標註風險: HIGH<br/>自動 @ 相關 team]
    E --> G
    F --> G
    G --> H[要求人類確認 <br/>提供 rollback plan]

AI Agent 在 PR 審核中的防禦邏輯:

  • 精準分析影響範圍:「此參數調整將聯動波及模型推論、特徵抽取與監控指標三個核心微服務。」
  • 沙箱模擬測試:自動在 Staging 模擬環境套用此改動。
  • 風險主動識別:「警報!Staging 模擬測試顯示,修改後模型推論服務會因內存不足頻繁觸發 OOM 重啟。」
  • 給出具體改善建議:「建議本次修改保留原 4\text{ GB} 限制,或先調整至 3\text{ GB} 進行金絲雀流量觀察。」

AI 將大部繁瑣的分析與測試工作全數自動完成,人類專家只需要專注在最後 20% 的架構與業務決策上。

當 AI 評估為「低風險」的常規變更,系統可以直接自動 Merge 放行;只有被標記為「高風險」時,才強制觸發人類專家審批。

這讓 GitOps PR 流程成功從「阻礙開發的官僚流程」演變成了「保障系統安全運行的加速器」。

下次 Sarah 或高層再次詢問你憑什麼做到了既快又安全,你直接向他們展示這份數據:

🏢 2026 年導入 GitOps 流程三個月後效能數據:

  • 📊 線上變更 PR 總數:347 個。
  • 🤖 AI 自動驗證放行比例83%(289 個低風險 PR 經 AI 靜態與沙箱校驗後自動 Merge)。
  • 👥 人工介入審查比例17%(58 個高風險變更被 AI 標記並自動轉交人類專家審核)。
    • 其中:12 個潛在危險 PR 被人類專家成功駁回(AI 自動幫團隊擋下了 12 次事故)。
  • 📈 系統穩定與復原指標
    • 生產環境變更紀錄完整度達 100%
    • 環境設定不一致導致的 Bug 數量降低 74%
    • 變更引發的線上事故(Incident)數量降低 68%
    • 系統平均回滾耗時(中位數)由 35 分鐘縮短至 4 分鐘

現場推演:從手動操作的地獄,邁向代碼化控制的 GitOps 天堂

我們來看一個 20 人平台維運團隊的真實轉型:

轉型前:團隊手動維護多個測試與生產環境。每週手動登入機器修改 Config 達 12 次、手工 kubectl apply 參數 18 次。每月平均發生 4 次手動變更導致的回滾失敗,以及 6 個因環境配置不一致導致的離奇 Bug。

轉型後:團隊痛下決心全面推行 GitOps。所有 K8s 設定與雲端資源全部寫成 Terraform 與 yaml 配置檔納入 Git 管理。未通過 PR 的手動變更將被系統防禦機制自動還原並觸發警報。

三個月後,環境配置不一致導致的線上 Bug 數量直接降低了 82%,線上故障的平均回滾修復時間從原先的 40 分鐘驟降至僅需 3 分鐘。新入職同仁的環境 setup 耗時縮短了一半,因為一切架構細節全都以最清晰的代碼格式寫在了 Git 倉庫裡。

這正是基礎設施即代碼的終極價值:它不僅讓系統變更變得安全可控,更將專家腦袋裡的架構隱性知識,變成了組織可隨時查閱、傳承的數字資產。


會議結束前,你投影出 Day 2 那份讓我們狼狽不堪的事故日誌:

[2026-07-23 01:45:12] Config updated: payroll_db_timeout = 30 -> 5
Changed by: admin_generic
No approval ticket referenced.

你指著屏幕對三個 Lead 說:「大家還記不記得這份紀錄?當時有人半夜用共用帳號手動把超時時間改成了 5 秒,導致整個發薪系統全面崩潰,全公司花了一整個早上才排查出原因。如果當時我們就實行了 GitOps,這項修改就必須是一次 PR,AI review 在提交時就會阻擋它,因為它在 Staging 模擬測試時就會報出超時錯誤。線上災難在發生之前,就已經被系統自動扼殺在了搖籃裡。

Data Lead 深吸了一口氣:「所以我懂了,GitOps 根本不是為了『管理和限制』工程師,而是為了在關鍵時刻『拯救工程師』。」

你點了點頭:「沒錯。當你凌晨三點被警報叫醒,面對崩潰的系統時,你最想知道的一定是『是誰在什麼時候改了什麼』。如果是 GitOps,你只需要用 5 秒鐘查看最後合入的那個 PR,就能拿到全部答案並一鍵 revert。GitOps 的最大價值,是讓人在災難的黑夜中,永遠有一張地圖可以指路,有一條退路可以防守。」


今日金句

「如果一個變更沒有在 Git 中留下 Pull Request 紀錄,它在系統中就等於從未發生過——直到它在半夜引爆線上故障,把你從睡夢中驚醒。」


留給你的問題

在你們團隊目前運作的生產環境中,上一次修改系統配置,有留下可以在 Git 中一鍵回滾的版本紀錄嗎?

如果此時此刻線上服務突然崩潰,你能在 5 分鐘之內精確找出「最後是誰、改動了哪個檔案的哪一行配置」嗎?

如果你的答案是「不行」,那麼,你就已經知道為什麼 Day 2 那種救火災難會在你們團隊反覆上演了。

明天,我們要去面對一個更為宏大的挑戰:當你成功讓價值流動起來、實現了秒級回滾、並讓所有變更均安全可控時,你卻會痛苦地發現,工程團隊與業務部門依然在無休止地爭吵。

因為雙方自始至終,都在說著完全不同的語言。

業務要的是「不顧一切快出新功能」,技術要的是「穩字當頭別把系統搞崩」。兩邊雞同鴨講,永遠對不齊。

Act 2 的最後一課:如何讓 Business 與 IT 終於看著同一個看板,說同一種語言?

Day 20 見。


上一篇
Day 18: 你敢不敢砍掉一半的簽核關卡?
下一篇
Day 20: 你敢不敢讓 Biz 和 IT 說同一種語言?
系列文
Phoenix 2026:當《鳳凰專案》遇上 AI Agent —— 30 天 DevOps 職場 RPG 冒險28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言