Kubernetes CI/CD pipelines - Kiến thức cơ bản cần biết
Qua bài viết này, Bizfly Cloud sẽ cung cấp cho bạn những thông tin hữu ích về cách thiết lập quy trình làm việc Kubernetes CI/CD bằng cách sử dụng các công cụ DevOps mã nguồn mở hiện đại, cho dù bạn là:
- Một nhà phát triển (Developer) đang bắt đầu hành trình với phần mềm doanh nghiệp
- Một kỹ sư phần mềm (Software Engineer) có kinh nghiệm làm việc trên các ứng dụng của công ty bạn, hoặc
- Một trưởng nhóm kỹ thuật (Technical team leader) đang cố gắng cải thiện năng suất của nhóm
CI/CD pipeline là gì?
Các phương pháp luận phát triển phần mềm truyền thống thường yêu cầu một người (ví dụ như Giám đốc sản phẩm) quyết định và mô tả hành vi mong muốn của phần mềm. Bước tiếp theo là nhóm phát triển viết, xây dựng, kiểm thử đơn vị và quản lý phiên bản code bằng cách sử dụng hệ thống quản lý sửa đổi (thường là Git). Cuối cùng, các kỹ sư kiểm thử xác nhận phần mềm mới dựa trên bộ kiểm thử được thiết kế với hành vi mong muốn. Toàn bộ quá trình này có những thiếu sót của nó:
- Việc hoàn thành mọi giai đoạn sẽ dựa vào giai đoạn trước.
- Khắc phục sự cố code hoặc kiểm thử được viết bởi các nhóm khác nhau dẫn đến phức tạp.
- Phối hợp giữa các nhóm có thể làm tăng độ trễ và tăng chất lượng code.
Lại nói về CI/CD, một thuật ngữ thường được sử dụng cùng với “DevOps”, “Agile”, “tự động hóa”, v.v. Những thuật ngữ này nhằm mô tả một quy trình phát triển hiện đại mà các nhóm áp dụng trong nỗ lực cải thiện chất lượng và năng suất.
CI/CD pipeline là một loạt các giai đoạn và các bước tự động mà phần mềm trải qua, từ phát triển đến triển khai Production.
CI là viết tắt của Continuous Integration (tạm dịch là Tích hợp liên tục) và dùng để chỉ đường ống xây dựng phần mềm. CI bao gồm tất cả các bước mà các Developer thực hiện giữa việc viết code và đẩy nó sang giai đoạn kiểm thử nhóm. Các bước này được thiết kế để giúp nhóm nắm bắt bất kỳ vấn đề nào liên quan đến chất lượng code bằng cách cung cấp cho họ phản hồi liên tục thông qua các automated build, smoke test, unit test, v.v.
CD đề cập đến quy trình phát hành phần mềm và có thể là viết tắt của “Continuous Delivery” (Phân phối liên tục) hoặc Continuous Deployment (Triển khai liên tục) - hai cách thực hành rất giống nhau, chủ yếu khác nhau về mức độ tự động hóa của chúng. CD là tất cả về việc xác nhận rằng code cung cấp chức năng mong muốn bằng cách triển khai nó trên một loạt các môi trường. Những môi trường này nhằm mục đích tái tạo môi trường Production thực tế, nơi phần mềm cuối cùng sẽ chạy, trước khi thực sự triển khai nó trong Production.
Các yếu tố của CI/CD pipeline
Về cơ bản, CI/CD pipeline là một đặc tả kỹ thuật có thể chạy được của các bước mà bất kỳ Developer nào cũng cần thực hiện để cung cấp phiên bản mới của sản phẩm phần mềm. Trong trường hợp không có pipeline tự động, các kỹ sư sẽ vẫn cần thực hiện các bước này theo cách thủ công và do đó kém hiệu quả hơn rất nhiều.
Hầu hết các bản phát hành phần mềm đều trải qua một số giai đoạn điển hình:
Lỗi trong mỗi giai đoạn thường kích hoạt thông báo qua email, Slack, v.v. để cho các Developer có trách nhiệm biết về nguyên nhân. Nếu không, cả nhóm sẽ nhận được thông báo sau mỗi lần triển khai sản xuất thành công.
Giai đoạn nguồn (Source stage)
Trong hầu hết các trường hợp, quá trình chạy pipeline được kích hoạt bởi một kho lưu trữ mã nguồn. Một thay đổi trong mã sẽ kích hoạt thông báo tới công cụ CI/CD, công cụ này chạy pipeline tương ứng. Các trình kích hoạt phổ biến khác bao gồm quy trình công việc được lập lịch tự động hoặc do người dùng khởi tạo, cũng như kết quả của các pipeline khác.
Giai đoạn xây dựng (Build stage)
Chúng ta kết hợp mã nguồn và các dependence của nó để tạo ra một phiên bản có thể chạy được của sản phẩm mà chúng ta có thể gửi đến người dùng cuối. Các chương trình được viết bằng các ngôn ngữ như Java, C/C ++ hoặc Go cần được biên dịch, trong khi các chương trình Ruby, Python và JavaScript hoạt động mà không cần bước này.
Bất kể ngôn ngữ là gì, phần mềm gốc đám mây thường được triển khai với Docker. Trong trường hợp này, giai đoạn này của CI/CD pipeline sẽ xây dựng các Docker container.
Việc không vượt qua giai đoạn xây dựng là một dấu hiệu cho thấy một vấn đề cơ bản trong cấu hình của dự án và tốt nhất là bạn nên giải quyết nó ngay lập tức.
Giai đoạn kiểm thử (Test stage)
Trong giai đoạn này, chúng ta chạy các kiểm thử tự động để xác nhận tính đúng đắn của code và hoạt động của sản phẩm. Giai đoạn kiểm thử hoạt động như một mạng lưới an toàn ngăn không cho các lỗi dễ dàng tái sản xuất đến tay người dùng cuối.
Trách nhiệm viết các bài kiểm thử thuộc về các Developer. Cách tốt nhất để viết các bài kiểm tra tự động là làm như vậy khi chúng ta viết code mới trong quá trình phát triển theo hướng test-driven hoặc behavior-driven.
Tùy thuộc vào quy mô và độ phức tạp của dự án, giai đoạn này có thể kéo dài từ vài giây đến hàng giờ. Nhiều dự án quy mô lớn chạy kiểm thử trong nhiều giai đoạn, bắt đầu với các smoke test thực hiện kiểm tra nhanh sự ổn định đến các kiểm thử tích hợp đầu cuối kiểm tra toàn bộ hệ thống theo quan điểm của người dùng. Một bộ kiểm thử mở rộng thường được sử dụng song song để giảm thời gian chạy.
Thất bại trong giai đoạn kiểm thử cho thấy các vấn đề trong code mà các Developer không lường trước được khi viết code. Giai đoạn này cần thiết phải đưa ra phản hồi cho các Developer một cách nhanh chóng để sớm xử lý kịp thời.
Giai đoạn triển khai (Deploy stage)
Thường có nhiều môi trường triển khai, ví dụ: môi trường “beta” hoặc “staging” được nhóm sản phẩm sử dụng nội bộ và môi trường “production” cho người dùng cuối. Các nhóm đã áp dụng mô hình phát triển Agile — được hướng dẫn bởi các kiểm thử và giám sát thời gian thực — thường triển khai thủ công tiến trình công việc tới môi trường staging để kiểm tra và đánh giá thủ công bổ sung, đồng thời tự động triển khai các thay đổi đã được phê duyệt từ nhánh chính sang sản xuất.
Kubernetes CI/CD có những lợi ích gì?
Quy trình làm việc CI/CD và các hệ thống gốc đám mây có một vài mục tiêu chung: cả hai đều cố gắng tăng tốc độ phát triển, tối ưu hóa chất lượng phần mềm và duy trì khả năng hoạt động của nó. CI/CD tự động hóa nhiều bước từ khi code được phát triển cho đến khi nó được phát hành trong production. Tương tự, Kubernetes tự động hóa việc triển khai container trên nhiều môi trường cơ sở hạ tầng khác nhau và đảm bảo sử dụng tài nguyên hiệu quả. Do đó, việc các tổ chức thiết lập CI/CD pipeline tận dụng nền tảng Kubernetes là điều hoàn toàn hợp lý.
GitLab là một trong những giải pháp phổ biến nhất nếu bạn đang muốn thực hiện chính xác điều đó. GitLab là một nền tảng DevOps phổ biến để phát triển và vận hành end-to-end. Nó cung cấp cho người dùng kho lưu trữ Git để kiểm soát phiên bản nguồn, theo dõi sự cố và các tính năng CI/CD. Các Developer có thể sử dụng API và GitLab web UI để theo dõi các bản dựng, theo dõi kết quả kiểm thử, giám sát việc triển khai và lên lịch các job hàng loạt trên các môi trường kiểm thử khác nhau.
GitLab đi kèm với một container registry tích hợp sẵn và có thể tích hợp với Kubernetes theo ba cách:
- Phần mềm được xây dựng trong GitLab CI pipeline có thể được triển khai tới Kubernetes như một phần của giai đoạn CD
- Kubernetes có thể quản lý các đợt thực thi job hàng loạt được liên kết với một phiên bản GitLab
- Bản thân các phiên bản GitLab có thể được chạy trên một cụm Kubernetes
Nếu bạn đang muốn bắt đầu với Kubernetes CI/CD ngay hôm nay, hãy truy cập: https://bizflycloud.vn/kubernetes-engine để được tư vấn và trải nghiệm miễn phí. Để cập nhật thêm nhiều thông tin hữu ích liên quan đến Kubernetes, hãy theo dõi thêm những bài viết tiếp theo của Bizfly Cloud nhé.