+22

CI, CD trong phát triển và vận hành dự án ở Viblo

Lời chào

Trong bối cảnh ngày nay, quản lý và phát triển dự án là một phần quan trọng trong ngành phần mềm. Để đạt được hiệu quả cao trong quá trình này, việc áp dụng các nguyên tắc quản lý chất lượng là không thể thiếu. Chúng tôi đã xây dựng một nền tảng tích hợp rất nhiều công nghệ mới nhất cho các nền tảng trong hệ sinh thái Viblo, từ việc phát triển tới triển khai vận hành hệ thống. Trong bài viết này, chúng ta sẽ biết được cách mà CI (Continuous Integration)CD (Continuous Delivery) được ứng dụng vào việc phát triển các dự án ở Viblo.

Continuous Integration

CI - Continuous Integration, một phương pháp quản lý mã nguồn mà mục tiêu chính là tích hợp liên tục các thay đổi từ các thành viên trong nhóm phát triển vào một hệ thống chung. Mục đích của CI là giảm rủi ro và xung đột giữa các phiên bản mã nguồn khác nhau, đồng thời cung cấp sự linh hoạt và nhanh chóng trong quá trình phát triển.

Với việc có những thay đổi code - điều xảy ra hàng ngày tại Viblo, việc áp dụng CI vào Viblo giúp đảm bảo chất lượng để hạn chế nhất các lỗi nhỏ và có thể phát hiện ngay những vấn đề không mong muốn xảy ra. Chúng tôi đã tích hợp CI vào các dự án trong hệ sinh thái Viblo từ những ngày đầu tiên khởi tạo.

Docker đóng vai trò không thể thiếu trong quy trình CI tại Viblo: Docker giúp xây dựng một môi trường đồng nhất cho cả quá trình phát triển và triển khai. Điều này giúp đảm bảo rằng ứng dụng sẽ chạy đúng trên mọi thiết bị hoặc môi trường triển khai, từ máy phát triển đến môi trường CI và cuối cùng là môi trường production.

Ở Viblo chúng tôi đã config CI với hệ thống CI nội bộ, luồng hoạt động của hệ thống này như thế nào ? Chúng ta cùng xem hình bên dưới.

1q.png

Có lẽ nếu bạn đã quen với việc triển khai và sử dụng CI, bạn có thể hình dung sơ đồ thể hiện quá trình phía trên.

Khi lập trình viên đã viết xong các đoạn mã và đẩy chúng tới kho lưu trữ Git, thông qua file config cho CI khởi tạo ngay cùng dự án Viblo, CI sẽ tự động trigger và build lại image từ những đoạn code đó để kiểm thử các lỗi cơ bản trước khi đưa vào giai đoạn vận hành.

Trong file config cho CI, chúng tôi định nghĩa ra các bước để đảm bảo chất lượng code ở trong bước Test: bao gồm việc đảm bảo vượt qua Unit Test, Feature Test hay Convention Code.

image.png

Sau khi đảm bảo các điều kiện trên, CI sẽ tự động build docker image và đẩy tới kho lưu trữ image (với Viblo chúng tôi dùng Harbor như một kho lưu trữ image) để tiếp tục cho việc triển khai hệ thống tới người dùng một cách cẩn thận nhất.

Continuous Delivery

CD - Continuous Delivery, tập trung vào việc tự động hóa quá trình triển khai phần mềm vào môi trường staging hoặc production mỗi khi có sự thay đổi trong mã nguồn. CD giúp đảm bảo rằng ứng dụng luôn ổn định và sẵn sàng để triển khai, tạo ra sự liên tục và gia tăng trải nghiệm cho người dùng cũng như giảm công sức cho kỹ sư vận hành.

Việc vận dụng CD vào các dự án ngày càng thiết yếu, đặc biệt là trong các dịch vụ như Viblo. Tại Viblo chúng tôi sử dụng GitOps - phương pháp quản lý và triển khai hệ thống kết hợp với quản lý source code qua Git. GitOps giúp hỗ trợ tự động hoá quy trình triển khai và giữ trạng thái của hệ thống đồng bộ với mã nguồn trong kho lưu trữ source code Git.

Viblo đã thực hiện triển khai hệ thống với phương thức GitOps bằng công cụ Flux CD. Mỗi khi các đoạn mã (code) được vượt qua các bước kiểm tra tự động bằng CI như phần trên, Flux CD sẽ đảm nhận vai trò tự động triển khai lên môi trường staging hoặc production tuỳ theo mong muốn từ kỹ sư vận hành.

Dưới đây là luồng hoạt động của CD sau khi các đoạn mã được CI kiểm nghiệm. (Phần Continuous Delivery)

222.png

Khi thông qua các bước kiểm thử, đảm bảo source code, CI sẽ tự động dựng một docker image mới với tag và format của tag được định sẵn, image tag đảm bảo đúng format với config định trước từ config Flux CD và được lưu trong Gitops Repo. (Gitops Repo ở đây là repository chứa các file deployment config Flux CD)

Với Flux CD chúng tôi đã config để giúp cho việc tự động nhận biết các docker image mới được push lên trên kho lưu trữ image (image registry)

Mỗi khi nhận biết được có image mới vừa được tạo, Flux CD sẽ kiểm tra phiên bản hiện tại với phiên bản image mới nhất để tự động triển khai (deploy) dự án lên môi trường staging hoặc production.

Tổng quát

Với việc áp dụng tự động các quá trình kiểm thử, vận hành thông qua CI, CD, công sức của kỹ sư phần mềm, cụ thể là vận hành viên đã được giảm đi một cách đáng kể. Ngoài ra Viblo có thể giảm thiểu được những rủi ro, lỗi hệ thống không đáng có, đảm bảo trải nghiệm người dùng được tối ưu nhất khi hạn chế các thời gian chết (downtime) không đáng có của ứng dụng, mà hầu hết nguyên nhân tới chính từ việc thiếu một công cụ vận hành chuyên nghiệp.

Tại Viblo chúng tôi luôn luôn hướng tới việc áp dụng những công nghệ mới nhất và tối ưu trong các quá trình từ phát triển ứng dụng tới triển khai ứng dụng.

Tech stack

  • CI (self-hosted)
  • Flux CD
  • Helm Chart
  • Kubernetes
  • Docker
  • Harbor
  • Git

©️ Tác giả: Severside Engineer PHAM HIEU


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.