Continuous Integration (CI) – Tích hợp liên tục

Continuous Integration (CI) – Tích hợp liên tục

August 7, 2018 1 By Nam Vu

1. Định nghĩa
Tích hợp liên tục (CI) là phương pháp phát triển phần mềm đòi hỏi các thành viên trong nhóm tích hợp công việc thường xuyên. Mỗi ngày, các thành viên đều phải theo dõi và phát triển công việc của họ ít nhất 1 lần. Việc này sẽ được một nhóm khác kiểm tra tự động, nhóm này sẽ tiền hành kiểm thử truy hồi để phát hiện lỗi nhanh nhất có thể. Cả nhóm thấy rằng phương pháp tiếp cận này giúp giảm bớt vấn đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn

2. Minh họa

Các developer thực hiện các ticket và đẩy code lên thư mực nơi sẽ lưu giữ code của Project.
Hệ thống CI sẽ lắng nghe và thực hiện kéo code về (server CI), build rồi test code.
Trong trường hợp build, test thất bại, các thành viên trong team sẽ nhìn thấy ngay được lỗi phát sinh và các developer sẽ chịu trách nhiệm sửa lỗi và đẩy code sửa lỗi đó lên repo.
3. Các đặc điểm thực tiễn của CI
Quản lý phiên bản (source control and version control ).
Tự động build bao gồm test.
Đôi ngũ phát triển thường xuyên chuyển (commit) source về nơi lưu trữ chính (mainline).
Mỗi khi code có thay đổi sẽ build lại (mainline) thông qua build server.
Báo lỗi cho người lập trình gây lỗi và quản lý dự án.
Phát hành phiên bản hoàn chỉnh cho khách hàng khi không còn lỗi.
Tự động phân phối phiên bản mới đến khách hàng.
Mọi người có thể nhìn thấy những gì đã xảy ra (thay đổi, lỗi…) để xem xét và giải quyết kịp thời.
Tuy nhiên, để triên khai hệ thống tích hợp liên tục, ta sẽ gặp những khó khăn như sau:

Cần thời gian thiết lập hệ thống ban đầu.
Đòi hỏi quản lý dự án, người lập trình, người kiểm định phải am hiểu mô hình phát triển phần mềm Agile, hệ thống tích hợp CI, cách sử dụng các công cụ hỗ trợ cho Agile và CI.
Chi phí thiết bị phần cứng (các server cho CI).
4. Lợi ích của Tích hợp liên tục
Để trả lời cho câu hỏi tại sao chúng ta phải sử dụng Hệ thống tích hợp liên tục, ta sẽ đưa ra vài lợi ích chính như sau

Giảm thiểu rủi ro do lỗi được phát hiện sớm.
Giảm thiểu sự lặp lại cho các quá trình
Tạo phần mềm có giá trị sử dụng sớm nhất có thể và sẳn sàng triểnkhai mọi lúc mọi nơi.
Cung cấp cái nhìn xuyên suốt tổng quan và cụ thể cho từng giai đoạn.
Nâng cao kỹ năng của đội ngũ nhân viên phát triển phần mềm.
Cải thiện chất lượng phần mềm

5. Các công cụ sử dụng
Code Repositories : SVN, Mercurial, Git, Visual Source Safe…
Continuous Build Systems : Jenkins, Bamboo, Cruise,Hudson, …
Test Unit Frameworks : JUnit,Cucumber , CppUnit …
Test report website : Mantis, TestLink, Redmine…
Artifact Repositories : Nexus, Artifactory, Archiva … .v.v.v