Making Order in CI/CD Mess
Bài tóm tắt Wix 2020 2. Tăng trưởng Độ khó: Trung bình
Wix · 2020 · 2. Tăng trưởng · Độ khó: Trung bình — bài gốc
Bối cảnh
- Khoảng 2011 (bài nói "9 năm trước"), Wix có 5 monolith backend, một project Flash và khoảng 50 developer; cả 5 monolith build trên một server TeamCity. Deploy là thủ công: tải artifact từ TeamCity, FTP lên production, "cầu may". Production không ổn định.
- Tới 2020, Wix có khoảng 1.000 developer làm trên hàng nghìn artifact.
Thay đổi chính
- Mô hình phiên bản ba bậc: commit vào master → build ở dev CI → bản SNAPSHOT lưu trong Artifactory; RC là promote bản snapshot cuối (copy sang repo RC, đổi số phiên bản thành duy nhất); GA là developer cập nhật production lên một RC.
- Lifecycle v1: cổng thông tin CI ghép dữ liệu từ build server, Artifactory, production và New Relic: danh sách build, phiên bản mới nhất ở mỗi bậc, 20 sự kiện production gần nhất (RC/GA/rollback) toàn cục và theo build, biểu đồ hiệu năng; nút Trigger RC và Trigger GA/Rollback. Mọi thao tác production đi qua đây và được ghi lại, nên dễ tương quan thay đổi với sự cố và rollback.
- Khi lớn lên thì phải self-service: không quản lý build bằng tay được nữa. Lifecycle bản sau là nhiều microservice nói chuyện qua Kafka và RPC:
- Git Event Listener phát message Kafka cho mỗi commit vào bất kỳ repo nào (service khác ngoài Lifecycle cũng dùng).
- Plugin TeamCity phát event khi build bắt đầu/xong/lỗi.
- Repo Descriptor Service dựng thực thể chung "Artifact" (id, build tool Maven/NPM, ngôn ngữ, người đóng góp, phụ thuộc, cấu hình CI riêng), cập nhật mỗi khi repo đổi.
- Build Descriptor Service nghe event build, hỏi TeamCity, Repo Descriptor và Artifactory để làm mới toàn bộ thông tin một build.
- Production Interface Service phản ánh artifact nào chạy ở đâu, phiên bản nào, theo dõi tiến độ deploy.
- RC service kiểm tra build có thể RC (không có thay đổi đang chờ, build CI xanh); GA service quản lý GA/testbed/rollback và lịch sử phiên bản.
Vì sao
- Theo Wix, nối dữ liệu từ build server, kho artifact, production và monitoring thành một bức tranh không phải là sản phẩm phụ của quy trình; phải có hệ thống làm việc đó. Khi có hàng nghìn artifact, một điểm vào duy nhất là điều kiện để developer tự làm việc ở production (Nền tảng nội bộ cho service (đường ray chung), Deploy và release an toàn).
Bài học cho SWE
- Ghi mọi thao tác promote/deploy/rollback như event có thể truy vấn; đó là thứ giúp trả lời "sự cố này có trùng với thay đổi nào".
- Promote cùng một artifact qua các bậc thay vì build lại cho mỗi bậc.
- Khi CI phục vụ nhiều nghìn artifact, đổi từ "đội CI cấu hình hộ" sang dữ liệu và thao tác self-service (CI và build ở quy mô lớn).
Liên quan
- Wix 2020 (Kafka làm xương sống của Wix cùng thời) · Yahoo 2017
- CI và build ở quy mô lớn · Deploy và release an toàn · Nền tảng nội bộ cho service (đường ray chung)
Được nhắc tới trong
Chủ đề (3)
Công ty (1)
Bài tóm tắt (3)