Open Sourcing Screwdriver, Yahoo's Continuous Delivery Build System for Dynamic Infrastructure
Bài tóm tắt Yahoo 2017 3. Quy mô lớn Độ khó: Trung bình
Yahoo · 2017 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bài thông báo open source; phần mô tả hệ nội bộ ngắn nhưng có số liệu quy mô.
Bối cảnh
- Theo Yahoo, mọi sản phẩm đang hoạt động của họ đã deploy từ commit tới production hoàn toàn tự động (2017). Screwdriver là hệ build và release nội bộ đã dùng khoảng 5 năm, xử lý hơn 25.000 build/ngày và hơn 12.000 commit/ngày, là điểm vào chung cho toàn Yahoo, hỗ trợ nhiều ngôn ngữ, build trên VM lẫn container.
Thay đổi chính
- Pipeline dễ dựng, nằm trong repo: cấu hình pipeline sống trong repo code, nên developer tự cấu hình và review thay đổi pipeline như review code. Lý do: trước đó pipeline cồng kềnh, khó dựng và duy trì.
- Trunk luôn ship được: dùng GitHub flow có sửa đổi; PR là điểm vào để chạy test. Pipeline tự cấp tài nguyên động cho mỗi PR, deploy code và chạy test chức năng (cả Selenium); môi trường đó còn giữ một thời gian sau build để engineer vào xem thay đổi giao diện.
- Rollback dễ: chạy lại một phase của pipeline tại trạng thái đã lưu (git SHA + metadata deploy), dựa vào PaaS để deploy. Rollback là chọn phiên bản trong dropdown và bấm deploy; ai có quyền ghi trên project cũng làm được. Theo Yahoo, điều này giúp chuyển team sang DevOps, developer chịu trách nhiệm trạng thái production.
- Tiến hoá phần chạy: ban đầu Screwdriver là lớp trừu tượng trên Jenkins, dùng Docker để cô lập và dùng plugin Jenkins cho coverage, báo cáo test. Khi lượng dùng vượt một cụm Jenkins, họ thêm khả năng scale ngang và lập lịch pipeline qua nhiều cụm Jenkins, rồi dùng Jenkins ít dần, tự xây thêm dịch vụ trên cloud nội bộ. Bản open source gồm frontend, API stateless điều phối, execution engine (Kubernetes, Docker Swarm) và launcher chạy lệnh trong container.
Vì sao
- Pipeline là code thì self-service và review được; rollback là chạy lại một trạng thái đã lưu thì không cần quy trình riêng (Deploy và release an toàn).
- Một công cụ CI có sẵn (Jenkins) đi được tới một ngưỡng; sau đó nó thành một backend trong nhiều, rồi bị thay dần (CI và build ở quy mô lớn, Nền tảng nội bộ cho service (đường ray chung)).
Bài học cho SWE
- Lưu đủ metadata của mỗi lần deploy (SHA + dữ liệu deploy) để rollback chỉ là "chạy lại phiên bản cũ".
- Môi trường tạm theo PR giúp giữ trunk ship được mà không cần nhánh dài.
- Khi một cụm CI không đủ, lớp điều phối riêng phía trên cho phép thay engine bên dưới mà không đổi giao diện của developer.
Liên quan
#Continuous delivery#Screwdriver#Jenkins#Pipeline as code#Trunk-based#PR environment#Rollback#Kubernetes#Docker Swarm
Được nhắc tới trong
Chủ đề (3)
Công ty (1)
Bài tóm tắt (1)