iT邦幫忙

2026 iThome 鐵人賽

DAY 9
1
Software Development

大廠觀落陰:中年工程師的產線鬼故事與生存防身術系列 第 9

星期五下午五點合 PR 的都是內鬼:如何用 CI 門禁擋住跨國暗殺

  • 分享至 

  • xImage
  •  

在軟體業,星期五傍晚發佈新版本的,不是無知,就是滿滿的惡意。

業界有一種都市傳說,說什麼敏捷開發就是要能隨時隨地、一天部署十幾次。聽那些沒上過產線的網紅在那邊吹牛就算了,如果你的同事在星期五下午五點,笑著按下了 Merge 按鈕,然後拍拍屁股下班去過週末,拜託你封鎖他。這種行為不叫 Continuous Deployment,這叫自殺還拉大家一起死。

大廠的產線最怕的就是「非預期的狀態變更」。

阿姨年輕待過一間公司,有一個美國時區的 BE,最喜歡在他們那邊的星期五傍晚(台灣時間的週六凌晨)把一堆沒有經過完整 Regression Test 的 Code 倒進主線。他的理由很冠冕堂皇:「我想在週末前把這張 Ticket close 掉。」

結果呢?那個 PR 帶了一個極度隱蔽的 Memory Leak。台灣時間週六早上八點,系統的 Pod 開始連環 OOM 重啟,Load Balancer 直接報 502。我們整個台灣團隊週末被 On-call 挖起來通靈查 Bug,美國同事完全找不到人呢。

面對這種自私的內鬼,不要奢望用團隊文化或是道德勸說來約束他們。產線上的防呆機制(Poka-Yoke),就是要把「不該發生的操作」在物理上直接拔除。

我們必須在 CI/CD 系統裡,導入死硬的「部署凍結(Deployment Freeze)」機制。

強制實作 Time-based Branch Protection
不管你用的是 GitHub Actions 還是 GitLab CI,我們直接在 Pipeline 裡寫死時間鎖。只要是星期五下午 4 點(依各時區動態計算)到星期一早上 9 點發起的 Merge Request,CI 直接 Fail

name: Friday Freeze Gate
on: [pull_request]

jobs:
  block_weekend_merges:
    runs-on: ubuntu-latest
    steps:
      - name: check time
        run: |
          DAY_OF_WEEK=$(date +%u)
          HOUR=$(date +%H)
          if [ "$DAY_OF_WEEK" -eq 5 ] && [ "$HOUR" -ge 16 ]; then
            echo "Don't merge code on Friday"
            exit 1
          fi

上一篇
誰准你偷改 API 的?
下一篇
我不是教你詐:如何在 Issue Tracker 上寫出無懈可擊的免責聲明
系列文
大廠觀落陰:中年工程師的產線鬼故事與生存防身術12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言