iT邦幫忙

2025 iThome 鐵人賽

DAY 30
0

這 29 天,我其實在練三件事

  1. 一致性:環境、依賴、風格、腳本,全都寫死在設定裡,不靠口耳相傳。
  2. 可靠性:型別與契約先擋,測試與覆蓋率兜底,錯誤分層、重試、降級,系統才不會一碰就碎。
  3. 可觀測性與可交付:結構化日誌、指標、追蹤一路拉齊;從包裝、版本、到部署與回滾有路可走。

對,這些聽起來很「工程課本」。然後你把它們真的做了,才知道原來穩定不是靠運氣,而是靠無聊且重複的好習慣。


我得到的 10 條生存法則(寫給下一個打開 repo 的人)

  1. 規則要寫在電腦會執行的地方pyproject.tomlnoxfile.py、Hatch scripts,能自動就不要靠自覺。
  2. 先鎖再裝:鎖檔是可重現的唯一語言;沒有鎖,之後誰裝到什麼版本,誰就變考古學家。
  3. 型別與資料契約是長期省錢:錯誤早點炸,後面不用在 PR 底下互相猜心。
  4. 測試目的是減少恐懼:不是追求 100% 的數字,而是擁有修改的膽量。
  5. 日誌是給人和機器看的:JSON、關鍵欄位、關聯 ID,否則生產環境像解謎遊戲。
  6. 錯誤是日常,不是例外:重試要節制,降級要優雅,觀測要說人話。
  7. 把慢事丟背景:同步路徑只管回應,不要在使用者面前打電話排隊。
  8. 發佈不是傳福音,是交責任:版本號有意義,Changelog 能讓人看懂變更性質。
  9. 容器別當垃圾袋:多階段構建、非 root、唯讀 rootfs,瘦身和安全是同一件事。
  10. 監控追蹤做到會講故事:Log 連到 Trace,Trace對上 Metrics,出事能用證據說話。

這系列真正帶走的「肌肉記憶」

  • 一鍵化工作流把開發、檢查、測試、打包、啟動串成同一套入口,避免「本地 OK、CI 爆炸」的多年傳說。
  • 風格和型別規則固定住後,review 從吵引號變成談設計。文明就從這些小事開始。
  • 錯誤分層、重試與降級的共識建立後,大家面對外部不確定性不再各憑想像。
  • 結構化日誌與 OTel 上線後,找問題從猜測變調查。你不需要英雄,只需要資料。

我還欠你的交付物(公開立案,之後補上)

是的,現階段沒有要放出的最終產物。以下列一張**「待補交付清單」**,保留欄位與說明,方便你之後直接填空發佈:

謎之音:因為最近專案超級趕火車,再加上我又去公司的訓練計劃,導致沒什麼時間整理之前的文章的產出,所以允許我先留下這些債吧~

[待補] 最終 Checklist(專案維度)

  • [ ] 專案骨架與路徑約定完成度
  • [ ] 依賴鎖檔更新策略與審核流程
  • [ ] hatch run / nox 指令一鍵清單(本地與 CI 同步)
  • [ ] 風格、型別、測試門檻(含覆蓋率)
  • [ ] 日誌欄位規範與取樣策略
  • [ ] 錯誤分層、重試、降級約定
  • [ ] 背景作業與排程策略
  • [ ] 發佈與版本規則、Changelog 模板
  • [ ] 容器基線(多階段、非 root、唯讀、健康檢查)
  • [ ] 部署與回滾策略(雲平台或 K8s)
  • [ ] 監控/追蹤/告警的最小儀表板清單

[待補] FAQ(工程日常會被問爆的 12 題)

  1. 我該在本地跑哪個一鍵指令來驗證所有檢查?
  2. 依賴要升級誰、鎖檔誰、什麼時候開 PR?
  3. 風格衝突要聽誰的規則?
  4. strict 型別報錯太多怎麼分階段收斂?
  5. 覆蓋率門檻不過要怎麼補測最划算?
  6. 連到外部服務 timeout 時,重試與降級誰說了算?
  7. 背景任務要選 Celery、Dramatiq 還是內建 async?
  8. 發佈前要跑哪個「乾淨環境驗證」指令?
  9. Docker 體積太大、權限爆炸要怎麼瘦身與降權?
  10. 要用單進程 Uvicorn 還是 Gunicorn+UvicornWorker?
  11. 發生 5xx 要去哪看 trace 與 log,儀表板怎麼定位?
  12. 回滾手順與資料一致性怎麼處理?

[待補] 模板包(直接可抄用的東西)

  • pyproject.toml 範本(含腳本、型別、測試、發佈區塊)
  • .pre-commit-config.yaml
  • noxfile.py
  • Dockerfile 多階段與 Dev Container
  • ci.yml / release.yml
  • CHANGELOG.md 範本(Keep a Changelog)
  • logging_config.py + structlog JSON
  • obs/telemetry.py(OTel 最小可用)
  • adapters/web/*(FastAPI Ports/Adapters 骨架)
  • adapters/tasks_*(背景任務三路線的最小實作)

以上三包會在補齊後發佈成「模板倉庫 + 單檔拷貝清單」。是的,我知道你想現在就拿。你也知道東西半熟端出去以後只會吃到群嘲。


結語:交付感想與下一步

把工程流程做順,創造力才有空間。你這 30 天不是在堆「工具清單」,是把團隊默契寫進原始碼與設定。真正的交付不是丟一個 zip,而是讓任何人打開就能一致地把事做對。

接下來兩週我會把上面的 Checklist、FAQ、模板一次補上,照著上面的欄位落地成可用的 repo 與檔案。你就別在群組裡用梗圖提醒了,我聽得到,你的表情包品味也不怎樣。

就這樣,系列收束。你去睡,明天起床還是得面對 JSON、覆蓋率和人類。可喜可賀。


上一篇
ChatGPT 說: Day 29 - Vibe Coding × AI 協作:自動化腳本與守門規則
系列文
30 天 Python 專案工坊:環境、結構、測試到部署全打通30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言