Cập nhật lần cuối vào 02/11/2023 bởi Phạm Mạnh Cường
Continuous Integration cùng với Continuous Delivery hay CI/CD đã trở thành một quy trình không thể thiếu trong phát triển phần mềm.
Giờ đây, CI/CD mang tới quá nhiều lợi ích mà lại dễ triển khai, do đó kiến thức về CI/CD trở thành bắt buộc với mỗi developer.
- Continuous integration (CI) là gì?
- Lợi ích của Continuous integration (CI)
- Cách thức hoạt động của Continuous integration (CI)
- Countinuous Integration (CI) và Continuous Deployment/ Continuous Delivery (CD)
- Khi nào nên sử dụng Continuous integration (CI)?
- Best practices của Continuous integration (CI)
- Các services và tools cung cấp Continuous integration (CI)
Continuous integration (CI) là gì?
Continuous Integration (CI) hay Tích hợp liên tục là một quá trình phát triển phần mềm trong đó các nhà phát triển tích hợp mã mới vào mã nguồn ít nhất một lần mỗi ngày trong suốt chu kỳ phát triển.
Automation Testing được thực hiện đối với mỗi lần tích hợp để xác định các sự cố tích hợp sớm hơn khiến chúng dễ khắc phục hơn. Điều này cũng giúp tránh các sự cố ở lần hợp nhất cuối cùng cho bản phát hành.
Nhìn chung, Continuous Integration (CI) giúp hợp lý hóa quy trình xây dựng, mang lại phần mềm chất lượng cao hơn và lịch trình phân phối dễ dự đoán hơn.
Xem thêm: Test-driven development (TDD) là gì?
Lợi ích của Continuous integration (CI)
Điểm mạnh nhất của Continuous Integration là giảm thiểu rủi ro, bằng cách tìm ra các lỗi một cách nhanh nhất.
Tuy Continuous Integration không sửa các lỗi cho bạn nhưng chúng sẽ giúp bạn tìm ra lỗi chỉ trong vài phút khi ai đó đưa code của họ vào hệ thống.
Ngoài ra, Continuous Integration còn mang lại các lợi ích khác như:
- Tiến bộ liên tục và chứng minh được điều đó thông qua các phản hồi của hệ thống CI
- Cải thiện sự hợp tác nhóm; mọi người trong nhóm có thể thay đổi mã, tích hợp hệ thống và nhanh chóng xác định xung đột với các phần khác của phần mềm
- Cải thiện khả năng tích hợp hệ thống, giúp giảm bớt những bất ngờ ở cuối vòng đời phát triển phần mềm
- Giảm số lỗi trong quá trình kiểm tra hệ thống
- Cải thiện năng suất và hiệu quả của nhóm
- Sản phẩm chất lượng cao hơn, ổn định hơn
- Tăng sự hài lòng của khách hàng
- Các nhà phát triển hạnh phúc hơn, năng suất hơn
Cách thức hoạt động của Continuous integration (CI)
Continuous integration Workflow
Giải thích
Trước đây, dự án được chia làm nhiều tính năng và mỗi người đảm nhiệm code một tính năng đó. Tuy nhiên vấn đề thực sự xảy ra khi việc ghép các code đấy thành một sản phẩm tổng thể.
Lỗi liên tục và không biết rõ chính xác lỗi ở đâu, lỗi của ai, lỗi như thế nào.
Với Continuous integration (CI) thì chúng ta sẽ có một kho source code chung, và mỗi developer có trách nhiệm đưa nó về máy cá nhân. Sau đó triển khai code trên nền tảng cá nhân và tự kiểm thử.
Nếu code chạy thì lúc này developer mới đưa lên hệ thống CI để kiểm tra xem code có vấn đề không. Nếu hệ thống báo lỗi thì ngay lập tức chúng ta biết đoạn code này bị lỗi ở đâu, ai chịu trách nhiệm và sửa ngay lập tức.
Nếu hệ thống không báo lỗi thì chúng sẽ được đưa vào source code và thông báo tới toàn bộ thành viên trong nhóm.
Countinuous Integration (CI) và Continuous Deployment/ Continuous Delivery (CD)
Continuous Integration và Continuous Delivery hay còn gọi tắt là CI/CD. Về cơ bản, chúng như các vector cùng hướng nhưng độ dài khác nhau. Mục tiêu đều là hướng tới giảm bớt lỗi trong quá trình phát hành sản phẩm bằng cách kiểm thử mã liên tục.
Sự khác biệt chính giữa cả ba là ở phạm vi tự động hóa được áp dụng.
- Continuous Integration (CI) : các nhánh tính năng tồn tại trong thời gian ngắn, nhóm đang hợp nhất với nhánh chính nhiều lần mỗi ngày, quy trình xây dựng và thử nghiệm hoàn toàn tự động , đưa ra phản hồi trong vòng 10 phút; việc triển khai là thủ công.
- Continuous Delivery (CD) : CI + toàn bộ quy trình phát hành phần mềm được tự động hóa, nó có thể bao gồm nhiều giai đoạn và việc triển khai vào sản xuất là thủ công.
- Continuous Deploymnet : CI + CD + triển khai hoàn toàn tự động vào sản xuất.
Khi nào nên sử dụng Continuous integration (CI)?
Giờ đây thì Continuous Integration và Continuous Delivery gần như đã trở thành quy trình bắt buộc ở đa số các tổ chức IT. Tuy nhiên trước khi triển khai CI/CD thì nên có đủ chuyên môn, kĩ năng và hiểu biết nhất định về các bên cung cấp dịch vụ.
Best practices của Continuous integration (CI)
Maintain a Single Source Repository: Chỉ có một mã nguồn cơ sở duy nhất, các mã nguồn khác được sử dụng để code đều là bản copy của mỗi thành viên đưa về máy tính của mình.
Automate the Build: Các quy trình nên được tự động hoá nhiều nhất có thể, điều này sẽ giúp việc tích hợp nhanh hơn, rõ ràng hơn và dễ dàng hơn.
Make Your Build Self-Testing: Mỗi developer nên có một bộ test riêng của mình, điều này đảm bảo code có sự chuẩn xác nhất định trước khi đưa vào hệ thống CI/CD. Giảm bớt các lỗi không đáng có của code.
Everyone Commits To the Mainline Every Day: Công việc của từng cá nhân phải được đảm bảo vẫn đi theo đúng hướng/ kế hoạch đã đề ra chứ không phải mỗi người làm mỗi việc và không có sự phối hợp.
Every Commit Should Build the Mainline on an Integration Machine: Sự commit về công việc của mọi người nên xây dựng thành một hệ thống cho cả team đi theo, điều này sẽ giúp công việc trơn tru và dễ tích hợp hơn.
Fix Broken Builds Immediately: Ngay khi có lỗi được thông báo từ hệ thống CI/CD, các lỗi này phải được sửa ngay lập tức bằng cách tìm ra ai là người viết, lỗi sai ở đâu.
Keep the Build Fast: Luôn đảm bảo sự nhanh chóng của việc phát triển phần mềm, điều này thúc đẩy mọi người phải chú trọng hơn vào các phản hồi từ hệ thống CI/CD và xử lý ngay tức khắc. Tốt nhất là nên có hành động trong vòng 10 phút khi có phản hồi.
Test in a Clone of the Production Environment: Luôn luôn đảm bảo rằng có một môi trường test riêng trước khi được đưa vào thực tế, điều này đảm bảo rằng mã nguồn cơ sở luôn tiếp nhận các code sạch sẽ nhất, tốt nhất.
Make it Easy for Anyone to Get the Latest Executable: Code ở đây đều được sở hữu bởi tất cả mọi người, và để cho việc môi trường lẫn code luôn mới nhất để cho các thành viên đưa về máy cá nhân là một điều rất quan trọng.
Everyone can see what’s happening: Bất kỳ ai trong nhóm đều xứng đáng biết điều gì đang diễn ra, họ có thể góp ý, họ có thể biết tình hình và đưa ra các ý tưởng phù hợp.
Automate Deployment: là một điều cần thiết. CI/CD cần quá nhiều lần kiểm thử trước khi deploy, nếu không tự động quy trình này thì chúng ta sẽ mất rất nhiều công sức lẫn nguồn lực.
Các services và tools cung cấp Continuous integration (CI)
Bitbucket Pipelines
Tóm tắt:
- Bitbucket Pipelines là một công cụ CI được tích hợp trực tiếp vào Bitbucket, một hệ thống kiểm soát phiên bản đám mây do Atlassian cung cấp.
- Nếu dự án của bạn đã có trên Bitbucket thì Bitbucket Pipelines là bước tiếp theo để kích hoạt CI
- Bitbucket Pipelines được quản lý dưới dạng mã để bạn có thể dễ dàng xác định các định nghĩa đường ống và bắt đầu xây dựng.
- Bitbucket Pipelines, cũng cung cấp CD. Điều này có nghĩa là các dự án được xây dựng bằng Bitbucket Pipelines cũng có thể được triển khai vào cơ sở hạ tầng sản xuất
Đặc trưng:
- Dễ dàng thiết lập và cấu hình
- Trải nghiệm Bitbucket hợp nhất
- Đám mây của bên thứ 3
Trang web: https://bitbucket.org/product/features/pipelines
Jenkins
Tóm tắt: Jenkins là một Công cụ CI kỳ cựu với thành tích đã được chứng minh từ lâu. Nó là nguồn mở và được thúc đẩy bởi các cập nhật của cộng đồng. Jenkins chủ yếu nhằm mục đích cài đặt tại chỗ. Jenkins là một lựa chọn tuyệt vời khi tổ chức của bạn cần hỗ trợ tại chỗ để xử lý khách hàng nhạy cảm như dữ liệu tuân thủ HIPAA.
Đặc trưng:
- Tại chỗ
- Mã nguồn mở
- Hệ sinh thái addon/plugin mạnh mẽ
Trang web: https://jenkins.io/
AWS CodePipeline
Tóm tắt: Amazon Web Services là một trong những nhà cung cấp cơ sở hạ tầng đám mây thống trị nhất trên thị trường. Họ cung cấp các công cụ và dịch vụ cho tất cả các loại nhiệm vụ phát triển cơ sở hạ tầng và mã. CodePipeline là sản phẩm Công cụ CI của họ. CodePipeline có thể giao tiếp trực tiếp với các công cụ AWS hiện có khác để mang lại trải nghiệm AWS liền mạch.
Đặc trưng:
- Đám mây hoàn toàn
- Tích hợp với các dịch vụ Web của Amazon
- Hỗ trợ plugin tùy chỉnh
- Kiểm soát truy cập mạnh mẽ
Trang web: https://aws.amazon.com/codepipeline/
CircleCI
Tóm tắt: CircleCI là Công cụ CI kết hợp duyên dáng với Github, một trong những công cụ lưu trữ đám mây của hệ thống kiểm soát phiên bản phổ biến nhất. CircleCI là một trong những Công cụ CI linh hoạt nhất ở chỗ nó hỗ trợ ma trận các hệ thống kiểm soát phiên bản, hệ thống vùng chứa và cơ chế phân phối. CircleCi có thể được lưu trữ tại chỗ hoặc được sử dụng thông qua dịch vụ đám mây.
Đặc trưng:
- Trình kích hoạt thông báo từ các sự kiện CI
- Hiệu suất được tối ưu hóa cho các bản dựng nhanh
- Dễ dàng gỡ lỗi thông qua SSH và các bản dựng cục bộ
- Phân tích để đo lường hiệu suất xây dựng
Trang web: https://circleci.com/
Azure Pipelines
Tóm tắt: Azure là nền tảng cơ sở hạ tầng đám mây của Microsoft, Microsoft tương đương với Amazon Web Services. Giống như AWS CodePipeline đã nói ở trên, Azure cung cấp Công cụ CI được tích hợp hoàn toàn vào bộ công cụ lưu trữ Azure.
Đặc trưng:
- Tích hợp nền tảng Azure
- Hỗ trợ nền tảng Windows
- Hỗ trợ vùng chứa
- Tích hợp Github
Trang web: https://azure.microsoft.com
GitLab
Tóm tắt: Gitlab là một Công cụ CI mới cung cấp trải nghiệm DevOps đầy đủ. Gitlab được tạo ra với mục đích cải thiện trải nghiệm tổng thể của Github. Gitlab cung cấp UX hiện đại có hỗ trợ vùng chứa.
Đặc trưng:
- Lưu trữ tại chỗ hoặc đám mây
- Kiểm tra bảo mật liên tục
- Dễ học UX
Trang web: https://about.gitlab.com
Atlassian Bamboo
Tóm tắt: Một sản phẩm CI khác từ Atlassian. Trong khi Bitbucket Pipelines hoàn toàn là một tùy chọn được lưu trữ trên nền tảng đám mây thì Bamboo lại cung cấp một giải pháp thay thế tự lưu trữ.
Đặc trưng:
- Tích hợp tốt nhất với bộ sản phẩm Atlassian
- Một thị trường rộng lớn về các tiện ích bổ sung và plugin
- Hỗ trợ container với các đại lý Docker
- API kích hoạt cho chức năng IFTTT
Trang web: https://www.atlassian.com/software/bamboo