CDS: Nền Tảng Continuous Delivery Cho CI/CD
CDS là nền tảng continuous delivery và DevOps automation tự host của OVH, viết bằng Go và chạy ở production tại OVH từ năm 2015. Một CDS Workflow nối các pipeline bằng join và fork, cho phép một team duy trì một pipeline build-và-deploy duy nhất cho hàng trăm ứng dụng thay vì mỗi app một pipeline. Hãy dùng CDS ở quy mô đó; bỏ qua nếu bạn chỉ có một repo nhẹ, vì CDS là một nền tảng nhiều thành phần cần vận hành.
Tìm Hiểu Workflow Và Pipeline Của CDS
CDS là một nền tảng continuous delivery và DevOps automation xây quanh CDS Workflow, nối các pipeline lại bằng trigger, join, và fork thay vì một danh sách job phẳng. Mỗi pipeline là một chuỗi stage, và mỗi stage chạy nhiều job cùng lúc trong khi vẫn cô lập chúng. Một pipeline khởi động với context gồm 0 hoặc 1 application và environment, nên nó chạy trên dev, staging, hay production chỉ bằng cách đổi context đó.
Năng Lực Cốt Lõi Của Nền Tảng CDS
- ✓CDS Workflow nối các pipeline lại bằng trigger, join, và fork, để một pipeline build và một pipeline deploy có thể phục vụ hàng trăm ứng dụng thay vì mỗi app một pipeline riêng, theo README.
- ✓Workflow template cho phép một team publish một workflow tái sử dụng được, duy trì nó dưới dạng code hoặc từ UI, và bulk-update mọi workflow được tạo từ template đó chỉ bằng một thao tác.
- ✓Workflow-as-code: bạn git-push các file YAML mô tả pipeline, application, và environment của một workflow, nên thay đổi có thể được test trên một branch dev trước khi merge vào master.
- ✓Tích hợp hai chiều gốc với GitHub, GitLab, Bitbucket Server, và Gerrit — CDS trigger build khi có push và báo lại trạng thái build (Building, Success, hoặc Failed) cho công cụ git đó.
- ✓Job's Services khởi động các container tạm thời cạnh một job — ví dụ chính README đưa ra là ghép Redis và PostgreSQL với một application — để test chạy với một database và cache thật thay vì mock.
- ✓Hatchery tự auto-scale CDS Worker theo nhu cầu trên Kubernetes, OpenStack, VMware vSphere, Docker Swarm, hoặc một host cục bộ; mục tiêu ban đầu của OVH là build và deploy 150 ứng dụng dưới dạng container trong dưới 7 phút, điều mà README nói đã thành hiện thực từ năm 2015.
- ✓cdsctl, CLI của CDS, làm được mọi thứ web UI làm được — tạo, chạy, export, và import workflow, và theo dõi một lần chạy ngay từ terminal bằng cdsctl workflow --track.
- ✓Permission theo group giới hạn quyền read, write, và execute cho từng project, cùng một REST API và một Go SDK để bạn xây công cụ riêng trên nền CDS.
Bắt Đầu Cài Đặt CDS
README không liệt kê lệnh cài đặt trực tiếp — nó dẫn ra một tutorial 'Ready To Run' dựa trên Docker Compose và một hướng dẫn cài từ binary trên trang tài liệu của OVH. Để dùng ở production, README hướng dẫn cài bản release chính thức đăng trên trang GitHub releases của dự án thay vì build từ source. CDS mã nguồn mở từ tháng 10 năm 2016 và được thiết kế để tự host trong công ty bạn hoặc ở nhà; các bước lệnh cụ thể không nằm trong chính README, nên hãy coi các tài liệu được dẫn ra đó là nguồn chính xác.
Ai Được Lợi Khi Dùng CDS?
CDS phù hợp với một team platform hay DevOps đang dựng CI/CD cho nhiều ứng dụng cùng lúc, không phải một project đơn lẻ. Nếu team bạn nếu không dùng CDS sẽ phải duy trì hàng chục pipeline kiểu Jenkins gần giống nhau, CDS Workflow và workflow template được xây để gom việc đó lại thành một pipeline dùng chung với context khác nhau mỗi lần chạy. Nó cũng hợp với team đã chạy GitHub, GitLab, Bitbucket Server, hay Gerrit và muốn tích hợp trạng thái build hai chiều mà không phải tự nối dây. Nó không hợp với một developer đơn lẻ hay team chỉ có một hai repo — stack API/worker/hatchery là quá nhiều hạ tầng so với nhu cầu của một pipeline đơn.
Điểm mạnh
- ✓Đã chứng minh ở quy mô production: README nói CDS chạy ở production tại OVH từ năm 2015 và khởi chạy hơn 7 triệu CDS worker mỗi năm ở đó.
- ✓Việc tái sử dụng workflow nằm trong cấu trúc chứ không chỉ là mô tả suông — join, fork, và context theo từng lần chạy cho phép một pipeline phục vụ nhiều ứng dụng thay vì copy-paste pipeline.
- ✓Thiết kế API stateless cho phép chạy nhiều instance CDS API sau một load balancer, và README nói OVH nâng cấp CDS nhiều lần một ngày mà không dừng worker hay ảnh hưởng người dùng.
- ✓Tích hợp hai chiều gốc với GitHub, GitLab, Bitbucket Server, và Gerrit, cộng với trigger từ webhook, scheduler, và event bus như Kafka hay RabbitMQ.
- ✓cdsctl phản chiếu toàn bộ web UI, nên việc script hoá chạy workflow hay kiểm tra trạng thái không cần mở trình duyệt.
- ✓Giấy phép BSD-3-Clause — cởi mở, không hạn chế việc tự host CDS trong một công ty.
Những Điều Cần Cân Nhắc Khi Áp Dụng CDS
- △CDS là một hệ thống nhiều thành phần — API, worker, hatchery, và một UI — không phải một binary duy nhất, nên dựng nó lên tốn hạ tầng hơn một CI action nhẹ.
- △README đánh dấu dự án này đang được phát triển tích cực và không nêu số phiên bản hay chu kỳ release, nên hãy chờ đợi thay đổi liên tục.
- △Lưu artifact build lâu dài cần Swift Storage hoặc filesystem, và README gọi lựa chọn filesystem là không khuyến khích, nên dùng thực tế nhiều khả năng cần cấu hình object storage ngay từ đầu.
- △Lệnh cài đặt cụ thể không được tài liệu hoá trực tiếp trong README — nó dẫn ra các tutorial bên ngoài (Docker Compose, cài từ binary) thay vì trình bày setup ngay tại chỗ.
- △Auto-scale phụ thuộc vào việc cấu hình một hatchery cho hạ tầng của riêng bạn — Kubernetes, OpenStack, vSphere, Swarm, hoặc local — không có mặc định chung nào chạy được ngay.
So Sánh CDS Với Các Công Cụ CI/CD Khác
Câu Hỏi Thường Gặp Về CDS
CDS được thiết kế để dùng ở production — README nói CDS đã chạy ở production tại OVH từ năm 2015 và khởi chạy hơn 7 triệu CDS worker mỗi năm ở đó. CDS cũng cung cấp log, metric, và monitoring để theo dõi hoạt động production, và OVH khuyến nghị cài bản release chính thức từ trang GitHub releases của CDS thay vì build từ source.
CDS lưu toàn bộ dữ liệu trong database và không lưu gì trên filesystem, theo README, nên backup CDS nghĩa là backup database đó theo lịch định kỳ — không có state filesystem riêng nào cần lưu thêm.
CDS được phát hành theo giấy phép BSD 3 điều khoản, được GitHub liệt kê là BSD-3-Clause — một giấy phép mã nguồn mở cởi mở, không yêu cầu copyleft đối với phần mềm xây dựng quanh CDS.
CDS tích hợp gốc với GitHub, GitLab, Bitbucket Server, và Gerrit, theo README. Tích hợp này hai chiều: CDS có thể trigger một build khi có push, và đẩy lại trạng thái build (Building, Success, hoặc Failed) cho công cụ git đó.
README dẫn tới Core Team của CDS trên GitHub Discussions để xin trợ giúp, cùng với trang tài liệu riêng của dự án tại ovh.github.io/cds và các bài blog, talk hội nghị về CDS được dẫn từ README.
Vấn đề CDS giải quyết
Phần lớn công cụ CI/CD mô hình hoá một project như một pipeline phẳng gồm các job, nên một công ty chạy hàng trăm ứng dụng cuối cùng phải sao chép cùng một logic build-và-deploy vào hàng trăm pipeline gần giống nhau, mỗi ứng dụng một pipeline. README của CDS đóng khung lý do tồn tại của dự án quanh sự trùng lặp đó: một CDS Workflow cho phép bạn nối các pipeline bằng join và fork để cùng một pipeline build và cùng một pipeline deploy có thể phục vụ mọi ứng dụng, chỉ khác nhau ở context của từng lần chạy — ứng dụng nào, environment nào.
Trường hợp sử dụng tốt nhất
- •Thay thế hàng chục pipeline CI gần giống nhau bằng một CDS Workflow và một pipeline deploy dùng chung cho mọi ứng dụng, đúng mô hình README mô tả cho số lượng ứng dụng lớn.
- •Chạy integration test cần một database hoặc cache thật hoạt động suốt job, dùng Job's Services để khởi động container như Redis hay PostgreSQL cạnh bài test.
- •Chuẩn hoá cách test và deploy giữa các team bằng cách publish một workflow template mà mọi project kế thừa và bulk-update theo.
- •Auto-scale worker CI trên Kubernetes, OpenStack, vSphere, hay Swarm qua hatchery thay vì chạy một pool cố định các build agent tĩnh.
- •Deploy một ứng dụng lên cluster Kubernetes ở định dạng Helm qua tích hợp Kubernetes có sẵn trên một CDS project.
Repo liên quan
Muốn nghe thêm một ý kiến về cds?
Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về cds.
