Fulfilling the promise of CI/CD
Bài tóm tắt Stack Overflow 2021 2. Tăng trưởng Độ khó: Dễ
Stack Overflow · 2021 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc
Bài quan điểm đăng trên blog của Stack Overflow, không mô tả hệ thống của Stack Overflow. Mọi nhận định dưới đây là theo tác giả bài.
Bối cảnh
- Theo tác giả, ai cũng nói "CI/CD" nhưng thực ra chỉ làm CI; gần như không ai thực hành continuous deployment. Mục đích của CI vốn là dọn đường cho CD.
Thay đổi chính (luận điểm)
- Định nghĩa: CI/CD là mọi thay đổi merge vào main được test và deploy tự động, sau mỗi diff, không cổng duyệt bằng tay. Mốc: khoảng 15 phút từ merge tới production là tốt, dưới một giờ là tạm ổn; độ dự đoán được quan trọng ngang độ dài, nên cổng người duyệt bị loại.
- Vòng xoáy đi xuống: lead time dài → diff lớn → review chậm → đổi ngữ cảnh nhiều. Deploy bằng tay, theo chu kỳ bất định, do người khác chạy và gom thay đổi của nhiều người làm engineer mất liên hệ với hệ quả code của mình: không biết code khi nào lên, không biết ai chịu trách nhiệm cho thay đổi hành vi. Kết quả là phải thuê thêm người và vai trò chuyên biệt (SRE, QA, build engineer) để chữa từng triệu chứng.
- Cách chữa: đo, tự động hoá và dành người thật để rút ngắn khoảng "viết dòng code → code chạy ở production". Viết code kèm instrument, merge, vài phút sau xem production qua instrument đó; theo tác giả, đội làm được nhịp này bắt hơn 80% bug ngay lúc đó.
- Với hệ cũ: đưa app đang release hàng tháng lên mười lần mỗi ngày là khó, nhưng giữ một repo mới ở CD từ đầu thì dễ; bắt đầu từ service mới. CD còn ép các thói quen tốt: diff nhỏ, review nhanh, feature flag, tách deploy khỏi release, tương thích ngược giữa các phiên bản.
Vì sao
- Theo tác giả, đây trông như vấn đề con người nên bị xử lý bằng công cụ quản lý (thêm headcount), và khó thuyết phục cấp trên vì phải chấp nhận chậm roadmap ngắn hạn, đi ngược bản năng "chậm lại cho an toàn" (Deploy và release an toàn).
Bài học cho SWE
- Đo lead time từ merge tới production như một chỉ số chính, không chỉ thời gian build CI (CI và build ở quy mô lớn).
- Gom nhiều thay đổi vào một lần deploy phá trách nhiệm theo thay đổi; deploy từng thay đổi giữ được người viết ở cạnh hệ quả.
- Nhận định "80% bug bắt được ngay" là của tác giả, không có số liệu đi kèm.
Liên quan
- Monzo 2022 (một đội làm được nhịp deploy liên tục) · Airbnb 2020 (đẩy test sâu sang CD)
- Deploy và release an toàn · CI và build ở quy mô lớn
#Continuous deployment#Lead time#Feedback loop#Observability-driven development#Batching deploy#Feature flag
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (1)