Tích hợp liên tục (CI) là gì?

Tích hợp liên tục (CI) là gì?

Tích hợp liên tục (CI - Continuous Integration) là một phương pháp phát triển phần mềm mà các thành viên trong nhóm có thể tích hợp công việc của họ ít nhất một lần mỗi ngày. Trong phương pháp này, mọi tích hợp đều được kiểm tra bằng một bản build tự động để tìm kiếm lỗi.

Khái niệm CI được giới thiệu lần đầu tiên hơn hai thập kỷ trước để tránh "địa ngục tích hợp", xảy ra khi quá trình tích hợp bị dừng cho đến khi kết thúc một dự án.

Trong CI sau khi code được commit, phần mềm được build và test ngay lập tức. Trong một dự án lớn với nhiều developer, commit code được thực hiện nhiều lần trong ngày.

Với mỗi lần commit, code sẽ được build và test. Nếu vượt qua được các bài test, bản build đã sẵn sàng để deploy. Nếu deploy thành công, code sẽ được đẩy lên production. Commit, build, test và deploy này là một quá trình liên tục và do đó còn được gọi là tích hợp / triển khai liên tục (continuous integration /deployment - CI/CD).

Sử dụng CI vs Không sử dụng CI

Dưới đây là sự khác biệt chính giữa phát triển sử dụng CI hoặc không sử dụng CI.

Không sử dụng CI Sử dụng CI
Rất nhiều lỗi Ít lỗi hơn
Commit không thường xuyên Commit thường xuyên
Bản phát hành không thường xuyên và chậm Bản phát hành hoạt động thường xuyên
Khó tích hợp Tích hợp dễ dàng và hiệu quả
Kiểm thử xảy ra muộn Kiểm thử xảy ra sớm và thường xuyên.
Vấn đề đã nêu khó khắc phục hơn Tìm và khắc phục sự cố nhanh hơn và hiệu quả hơn.
Khả năng hiển thị dự án kém Khả năng hiển thị dự án tốt hơn

Sự khác biệt giữa Biên dịch và Tích hợp liên tục (CI)

Sự khác biệt giữa Biên dịch và Tích hợp liên tục (CI)

Trong khi Biên dịch chỉ biên dịch mã thì Tích hợp liên tục (CI) thực hiện các hoạt động sau:

Tích hợp DB:

  • Đảm bảo DB và code đồng bộ.
  • Tự động tạo DB và dữ liệu thử nghiệm.

Kiểm tra code:

  • Đảm bảo code không bị lỗi.
  • Xác định vấn đề sớm và áp dụng các best practice.

Triển khai tự động:

  • Cho phép bạn phát hành sản phẩm bất cứ lúc nào.
  • Có thể triển khai và hoạt động trên mọi máy.

Tạo tài liệu:

  • Đảm bảo tài liệu mới nhất.
  • Tạo báo cáo và số liệu biên dịch.

Biên dịch:

Biên dịch là quá trình máy tính thực hiện để chuyển đổi mã ngôn ngữ lập trình cấp cao thành ngôn ngữ máy mà máy tính có thể hiểu được. Nó đảm bảo một trình biên dịch mã trên mọi nền tảng mục tiêu.

Build khi nào?

  • Tại mỗi lần commit code.
  • Mỗi khi sự phụ thuộc thay đổi.

Build như thế nào?

Build như thế nào?
  • Tốt nhất, build nên được thực hiện từ dòng lệnh và không nên phụ thuộc vào IDE.
  • Quá trình build nên diễn ra thường xuyên bằng cách sử dụng máy chủ CI chuyên dụng, không phải công việc được lập lịch sẵn.
  • CI sẽ tự động build mỗi lần có code check-in chứ không chỉ vào lúc nửa đêm.
  • Bản dựng phải cung cấp phản hồi ngay lập tức và không yêu cầu nhà phát triển nỗ lực
  • Xác định các chỉ số chính và theo dõi chúng một cách trực quan. Quan trọng hơn, hãy hành động ngay lập tức

Bạn cần những gì để tiến hành quy trình CI?

Bạn cần những gì để tiến hành quy trình CI?

Dưới đây là các yếu tố chính mà bạn cần để hoàn thiện toàn bộ quy trình CI:

  • Hệ thống kiểm soát phiên bản (VCS): Nó cung cấp một phương pháp đáng tin cậy để tập trung và duy trì các thay đổi được thực hiện cho dự án của bạn theo thời gian.
  • Máy ảo: Bạn nên có một máy chủ dự phòng hoặc ít nhất một máy ảo để xây dựng hệ thống của mình.
  • Giải pháp công cụ CI được lưu trữ: Để tránh máy chủ hoặc máy ảo, bạn nên sử dụng giải pháp công cụ CI được lưu trữ. Công cụ này giúp duy trì toàn bộ quy trình và cung cấp khả năng mở rộng dễ dàng hơn.
  • Công cụ: Nếu bạn chọn một biến thể tự lưu trữ, bạn sẽ cần cài đặt một trong nhiều công cụ CI như Jenkins, TeamCity, Bamboo, GitLab, v.v.

Tích hợp liên tục (CI) hoạt động như thế nào?

Chắc hẳn bạn đã biết đến chiếc điện thoại cổ Nokia. Nokia đã từng thực hiện một quy trình gọi là build mỗi đêm. Sau nhiều commit code từ các nhà phát triển khác nhau trong ngày, phần mềm được build mỗi đêm. Vì phần mềm chỉ được build một lần trong ngày nên việc cô lập, xác định và sửa lỗi trong codebase lớn là một điều rất khó khăn.

Sau đó, họ đã áp dụng cách tiếp cận Tích hợp liên tục (CI). Phần mềm được buid và kiểm thử ngay sau khi một nhà phát triển commit code. Nếu bất kỳ lỗi nào được phát hiện, nhà phát triển tương ứng có thể nhanh chóng sửa chữa lỗi đó.

Tích hợp liên tục (CI) hoạt động như thế nào?

Các tính năng của Tích hợp liên tục (CI)

Dưới đây là các tính năng quan trọng của Tích hợp liên tục (CI):

  • Cho phép bạn duy trì một kho lưu trữ source code duy nhất.
  • Bạn có thể kiểm thử bản sao của môi trường production.
  • Môi trường kiểm thử nên gần với môi trường production.
  • Tính khả dụng liên tục của một bản build hiện tại.
  • Các stack holder có thể xem toàn bộ quá trình build và thử nghiệm và triển khai.

Tại sao sử dụng Tích hợp liên tục (CI)?

Dưới đây là những lý do quan trọng để sử dụng Tích hợp liên tục (CI):

  • Giúp bạn xây dựng phần mềm chất lượng tốt hơn.
  • Quy trình CI giúp mở rộng quy mô số lượng nhân viên và sản lượng phân phối của các nhóm kỹ sư.
  • CI cho phép các nhà phát triển phần mềm làm việc độc lập trên các tính năng song song.
  • Giúp bạn tiến hành thử nghiệm lặp lại.
  • Tăng khả năng hiển thị cho phép giao tiếp tốt hơn.
  • Giúp phát triển một sản phẩm có thể build hoàn toàn tự động.
  • Giúp bạn giảm thiểu rủi ro bằng cách triển khai nhanh hơn và dễ dự đoán hơn.
  • Phản hồi ngay lập tức khi có vấn đề.
  • Tránh nhầm lẫn vào phút cuối về ngày và thời gian phát hành.

Best practice khi sử dụng Hệ thống CI

Dưới đây là một số best practice khi triển khai Hệ thống CI:

  • Commit code sớm và thường xuyên, không bao giờ commit code bị lỗi.
  • Sửa lỗi bản build ngay lập tức.
  • Hành động dựa trên các thông số.
  • Tích hợp trong mọi môi trường mục tiêu.
  • Việc build phần mềm cần phải được thực hiện theo cách để nó có thể được tự động hóa.
  • Không phụ thuộc vào IDE.
  • Build và kiểm tra mọi thứ khi nó thay đổi.
  • Lược đồ cơ sở dữ liệu được tính là tất cả mọi thứ.
  • Giúp bạn tìm ra các chỉ số chính và theo dõi chúng một cách trực quan.
  • Commit code thường xuyên và sớm.
  • Kiểm soát source code mạnh mẽ.
  • Tích hợp liên tục (CI)  chạy unit test bất cứ khi nào bạn commit code.
  • Tự động hóa việc build và kiểm tra code của mọi người.
  • Giữ quá trình build nhanh chóng với triển khai tự động.

Nhược điểm của CI

Dưới đây là các nhược điểm của quá trình Tích hợp liên tục:

  • Cần có thời gian thiết lập và đào tạo ban đầu để làm quen với máy chủ CI.
  • Phát triển các quy trình thử nghiệm phù hợp là điều cần thiết.
  • Bộ thử nghiệm được phát triển tốt yêu cầu nhiều tài nguyên cho máy chủ CI.
  • Chuyển đổi các quy trình quen thuộc.
  • Yêu cầu máy chủ và môi trường bổ sung.
  • Thời gian chờ đợi có thể xảy ra khi nhiều nhà phát triển muốn tích hợp mã của họ cùng một lúc.

Công cụ cho quy trình CI

Dưới đây là một số công cụ CI cần thiết nhất:

Jenkins

Jenkins

Jenkins là một công cụ tích hợp liên tục mã nguồn mở. Nó được viết bằng ngôn ngữ lập trình Java. Nó tạo điều kiện thuận lợi cho việc kiểm tra theo thời gian thực và báo cáo về những thay đổi riêng biệt trong một cơ sở mã lớn hơn. Phần mềm này giúp các nhà phát triển nhanh chóng tìm và giải quyết các khiếm khuyết trong cơ sở mã của họ và tự động kiểm tra các bản dựng của họ.

Bamboo

Bamboo

Bamboo là một máy chủ tích hợp liên tục (CI) thực hiện build - nó tự động build, kiểm tra và phát hành ở một nơi duy nhất. Nó làm việc với phần mềm JIRA và Bitbucket. Bamboo hỗ trợ nhiều ngôn ngữ  lập trình và công nghệ như CodeDeply, Ducker, Git, SVN, Mercurial, AWS và Amazon S3.

TeamCity

TeamCity

TeamCity là một máy chủ tích hợp liên tục (CI) hỗ trợ nhiều tính năng mạnh mẽ. Nó duy trì một máy chủ CI mạnh và ổn định ngay cả khi không có bản build nào đang chạy. Nó cung cấp chất lượng code tốt hơn cho bất kỳ dự án nào.

Tóm lược

  • Tích hợp liên tục (CI) là một phương pháp phát triển phần mềm mà các thành viên trong nhóm có thể tích hợp công việc của họ ít nhất một lần một ngày.
  • Phát triển mà không có CI tạo ra nhiều lỗi, trong khi phát triển có  CI cung cấp code ít lỗi hơn.
  • Các hoạt động quan trọng của Tích hợp liên tục (CI) là 1) Tích hợp DB; 2) Kiểm tra mã; 3) Triển khai tự động, Tạo tài liệu và Biên dịch.
  • Quá trình build sẽ diễn ra thường xuyên bằng cách sử dụng máy chủ CI chuyên dụng, không phải công việc được lập lịch sẵn.
  • Các yếu tố quan trọng của CI là 1) Hệ thống kiểm soát phiên bản 2) Máy ảo 3) Giải pháp công cụ Host CI 4) Công cụ
  • Tích hợp liên tục cho phép bạn duy trì chỉ một kho lưu trữ source code duy nhất.
  • Quy trình CI giúp bạn xây dựng phần mềm chất lượng tốt hơn.
  • Các best practice quan trọng nhất của quy trình Tích hợp liên tục (CI) là commit code sớm và thường xuyên, không bao giờ commit code lỗi.
  • Hạn chế chính của quy trình CI là bộ thử nghiệm được phát triển tốt yêu cầu nhiều tài nguyên cho máy chủ CI.
  • Jenkins, Bamboo, Azure Devops, Gitlab và TeamCity là một số công cụ Tích hợp liên tục hữu ích.
CI/CD
Bài Viết Liên Quan:
Hướng dẫn tạo User, Role và phân quyền trong Jenkins
Trung Nguyen 25/11/2020
Hướng dẫn tạo User, Role và phân quyền trong Jenkins

Bài viết này sẽ hướng dẫn bạn cách cài đặt, cấu hình plugin Role-based Authorization Strategy để tạo user, role và phân quyền trong Jenkins.

Hướng dẫn cài đặt plugin Git cho Jenkins
Trung Nguyen 23/11/2020
Hướng dẫn cài đặt plugin Git cho Jenkins

Bài viết này sẽ hướng dẫn bạn từng bước cài đặt plugin Git vào Jenkins. Tạo dự án đầu tiên trong Jenkins và cấu hình cho plugin Git.

Hướng dẫn cài đặt Jenkins trên Windows
Trung Nguyen 22/11/2020
Hướng dẫn cài đặt Jenkins trên Windows

Hướng dẫn đầy đủ và chi tiết từng bước cách tải, cài đặt, cấu hình mở khóa, cấu hình plugin cho Jenkins trên Windows.

Tích hợp liên tục (CI) sử dụng Jenkins
Trung Nguyen 22/11/2020
Tích hợp liên tục (CI) sử dụng Jenkins

Jenkins là gì? Tại sao nên sử dụng Tích hợp liên tục (CI) với Jenkins? Ưu điểm của việc sử dụng Jenkins để làm server tính hợp liên tục (CI).