Những điều bạn cần biết về mô hình CI/CD với CircleCI

Bài viết được sự cho phép của tác giả: Vũ Công Tấn Tài

Đợt tháng 3 vừa rồi, mình có lên kế hoạch tổ chức một buổi seminar nho nhỏ để chia sẻ với các bạn sinh viên về mô hình tích hợp liên tục (continuous integration), gọi một cách ngắn gọn là mô hình CI/CD trong phát triển và triển khai phần mềm. Rất không may là đợt rồi xảy ra dịch Covid-19, khiến các kế hoạch bị hủy bỏ.

Vì không thể tổ chức seminar nên mình đành để tài liệu ở đây và trình bày ngắn gọn nội dung trong bài post này. Hi vọng có thể chia sẻ với mọi người chút kiến thức hữu ích.

  Mô hình 3 lớp (three-layer) có gì hay?
  So sánh 4 mô hình truyền thông trong hệ thống IoT

Hình thức và tóm tắt nội dung

Ban đầu, mình định tổ chức buổi chia sẻ dạng trình chiếu và tương tác, do đó tài liệu mình soạn ra ở dạng file trình bày (slide). Phần nội dung slide trình bày được để ở mục dưới, trong phần này mình sẽ tóm tắt một vài ý chính trong bài.

Một số ý chính của nội dung chia sẻ:

  • Lý do ra đời của hệ thống tích hợp liên tục: không phải ngẫu nhiên mà người ta nghĩ ra trò CI/CD trong phát triển phần mềm, cái gì cũng có lí do của nó cả.
  • Mô hình hoạt động của một hệ thống CI/CD: khi biết mình gặp vấn đề gì rồi, người ta sẽ nghĩ ra một cách thức nào đó để giải quyết nó, mô hình CI/CD là một trong số đó. Phần này mình cũng đề cập tới một vài lợi ích và sự đánh đổi khi theo đuổi mô hình này.
  • Triển khai CI/CD với CircleCI: Khi đã nghĩ ra được mô hình giải quyết, người ta phải tạo ra công cụ để thực hiện điều đó, và người ta đã tạo ra CircleCI. Lưu ý là: CircleCI chỉ là 1 công cụ để thực hiện mô hình CI/CD, ngoài ra còn nhiều công cụ khác lắm: Jenkins, JavisCI, …
  • Hướng dẫn và demo triển khai CI với CircleCI

Mình có để link mã nguồn demo CircleCI ở cuối bài, các bạn có thể tham khảo.

Mình hay sử dụng CI/CD trong trường hợp nào

Triển khai liên tục (CD: continuous deployment) là một vấn đề khó, hoặc rất khó. Nó không chỉ liên quan tới cách setup hệ thống, mà còn có thể liên quan tới khách hàng sử dụng, dữ liệu người dùng, downtime khi update, … Vậy nên trong hầu hết trường hợp, mình chỉ sử dụng tích hợp liên tục (CI).

Một số trường hợp có thể dùng CI:

  • Cài đặt các hệ thống kiểm tra coding standards (kiểm tra lint, style, khi làm việc đội nhóm.
  • Thực thi automation test (unit test, configuration test, e2e test, …) mỗi khi source code có sự thay đổi.
  • Đóng gói phần mềm (build file apk, file cài đặt, …)

Nội dung file trình bày

Đây là slide nội dung chính về mô hình CI/CD và các khái niệm cơ bản khi triển khai với CircleCI:

Mã nguồn demo:

  • Chạy CI kiểm tra định dạng mã nguồn với Eslint và Unit test với Jest mỗi khi có sự thay đổi source code: CircleCI experimental project.
  • Chạy CI thực thi unit test với PHPUnit cho project: PHPUnit experiment.

Nếu các bạn thấy hữu ích, đừng ngại ngần mà nhấn sao (Star) trên github cho mình nhé.

Cảm ơn các bạn.

Bài viết gốc đăng tải tại Những dòng code vui

Có thể bạn quan tâm:

Xem thêm các việc làm Developer hấp dẫn tại TopDev