Chia sẻ kiến thức lập trình

Continuous integration (CI)

Tích hợp liên tục

Một trong những việc chúng ta vẫn làm thường ngày đó là code, tạo commit và push lên git server. Tuy nhiên đó khi chúng ta làm việc một mình, trong một nhóm nhỏ, chưa có quy trình hoặc trong một nhóm phải chạy gấp deadline. Nhưng khi làm việc trong một nhóm phát triển sản phẩm bài bản, bắt buộc chúng ta phải sử dụng đến Pull Request, vậy làm thế nào để việc merge code trở nên dễ dàng? Đó là lúc chúng ta cần đến Continuous integration (CI)

Định nghĩa

Tích hợp liên tục (CI) là việc cố gắng tự động hóa việc tích hợp mã nguồn (source code) từ nhiều người đóng góp vào một dự án phần mềm. Đây là phương pháp tiên tiến nhất hiện nay để cho phép các lập trình viên dễ dàng merge code và phát hành phiên bản mới nhất.

Cách CI hoạt động

Về bản chất thì CI cũng chỉ là việc gọi các API do các git server như Github hay Gitlab cung cấp và lệnh build của dự án. Việc thực hiện được CI đến đâu phụ thuộc nhiều vào các API mà git server cung cấp và những thứ có trong lệnh build. Các bước thực hiện một CI bao gồm:

  1. Dev sẽ tạo commit code vào tạo một Pull Request (PR) trên git server.
  2. Git server sẽ gọi API do công cụ CI cung cấp để thông báo có 1 PR mới.
  3. Các công cụ CI sẽ pull source code về và build
  4. Build là tổng hợp của các quá trình: biên dịch (nếu có), kiểm tra coding convetion (coding convention test - CT), unitest (UT), test tích hợp (integration test -IT)
  5. Công cụ CI sẽ trả lại kết quả cho git server
  6. Git server sẽ dựa vào kết quả mà công cụ CI trả về để quyết có cho merge PR hay không, nếu có lỗi, nó sẽ báo kiểu này:

DevOps cần làm gì?

Nhiệm vụ của DevOps rất quan trọng trong giai đoạn này:

  1. Phải kết hợp Dev để xây dựng lên công cụ CI, đối với các công ty, tập đoàn lớn thì đó phải là cả một hệ thống CI với hàng chục, hàng trăm server thì mới đủ khả năng phục vụ được, vì build là một trong những công việc siêu nặng nề. Hiện tại có rất nhiều công cụ hỗ trợ để làm CI, bạn cần lựa chọn một công cụ phù hợp với dự án hiện tại để đẩy nhanh tốc độ build và tiết kiệm được tài nguyên server.
  2. Giúp dev tạo các file cấu hình và thực hiện các bước cấu hình cần thiết để kết nối công cụ CI với Git server
  3. Ở bước 4 integration test (IT), đây là một bước rất nặng, đối với các dự án phức tạp với hàng trăm API, có thể phải tách ra thành nhiều server để đẩy nhanh quá trình IT, từ đó tăng tốc độ build và chuyển tiếp đến bước Continuous Delivery (CD) hoặc báo lỗi sớm cho Dev để fix

Một số lưu ý

CI sẽ không có nhiều ý nghĩa nếu chúng ta thiếu đi các bước kiểm tra coding convention (CT), Unitest (UT) hay Integration Test (IT), hiện nay có rất nhiều công cụ hay thư viện hỗ trợ như Maven checkstyle, sonar, junit, testng hay selenium, vậy nếu bạn hoặc dev của bạn đang thiếu những bước này, hay thảo luận với họ để cài đặt thêm nhé.
Thêm vào nữa là CI cũng chỉ giúp chúng ta tự động được phần nào, quan trọng hơn cả vẫn là coding review lẫn nhau trong team và các bước kiểm thử do chính chúng ta thực hiện, vậy đừng bao giờ phụ thuộc hết vào CI nhé.

Tổng kết

CI là một trong những giải pháp rất tốt để giảm thiểu xung đột và tăng tốc độ phát triển phần mềm. Nó có thể giúp chúng tự động làm được rất nhiều thứ và đảm bảo tất cả mọi người trong dự án sẽ phải tuân theo quy trình để đảm bảo chất lượng. Nếu dự án của bạn chưa có CI vậy hãy cài đặt ngay đi nhé.

Tham khảo

  1. atlassian
  2. Jenkins Github CI
Share: