Continuous Integration là gì? Giải thích chi tiết về CI
Continuous Integration (CI) từ lâu đã là khái niệm không hề xa lạ với anh em phát triển phần mềm. Tuy nhiên, với một số anh em trước đây chỉ làm việc độc lập, CI có vẻ như là điều gì đó còn khá xa lạ.
Bài viết này cung cấp cho anh em cái nhìn đầy đủ và rõ ràng về CI, ưu điểm khi áp dụng CI vào trong dự án phát triển phần mềm.
Cùng bắt đầu tìm hiểu thôi anh em!
1. Cotinuous integration là gì?
Trước hết, cùng tìm hiểu định nghĩa về CI (Cotinuous integration). Đầu tiên,
Continuous integration is a DevOps software development practice where developers regularly merge their code changes into a central repository, after which automated builds and tests are run CI (tích hợp liên tục), là một phương pháp phát triển phần mềm DevOps trong đó các nhà phát triển thường xuyên hợp nhất các thay đổi code của họ vào kho lưu trữ trung tâm, sau đó chạy các bản dựng (demo) và thử nghiệm tự động (testing)
Định nghĩa hơi rối nhưng có thể hiểu thằng Continuous là liên tục, vậy CI là phương pháp phát triển phần mềm. Trong quá trình phát triển phần mềm, không thể tránh khỏi việc anh em developer liên tục đẩy code lên. Nhiều nhánh merge lại với nhau trong repo chính. Để có thể liên tục phát triển, ta cần chạy kiểm tra (testing), deploy và release. Vậy với CI, quá trình phát triển phần mềm này có thể diễn ra liên tục, không bị gián đoạn.
Tích hợp liên tục cũng thường đề cập đến giai đoạn xây dựng hoặc tích hợp của quy trình phát hành phần mềm và bao gồm cả thành phần tự động hóa. Mặc dù bản thân C và I không đề cập tới tự động (automation), nhưng anh em lưu ý bản thân từ tiếp tục (Continuous) đã mang ý nghĩa liên tục (cần có tự động để đảm bảo tính liên tục)
1.1 Tại sao ta lại cần CI?
Với một số anh em làm việc độc lập (theo kiểu cá nhân), trước đây rất có thể anh em sẽ ít gặp các trường hợp về conflict code. Làm cái nào cứ làm trên 1 nhánh, lúc nào xong thì release. Nhưng nếu tham gia vào team phát triển phần mềm, việc không merge code thường xuyên sẽ là thảm hoạ. Conflict tùm lum, không thể release cho khách hàng những tính năng đã phát triển.
Lý do này chính là lý do tại sao ta cần tới Cotinuous integration.
1.2 CI hoạt động như thế nào?
Về cơ bản CI có thể trigger trên từng commit của anh em developer. Sau khi trigger được, CI sẽ thực hiện một số bước (ta gọi là stages). Các stages này thực hiện đầy đủ các bước cần thiết cho việc deployment.
2. Tự động hoá với automation CI/CD
Thay vì phải thực hiện từng bước từng bước để deploy, với continuous integration, về mặt bản chất, ta cố gắng thực hiện tự động hoá các bước sẽ phải làm. Ví dụ
-
- Pull code
-
- Install các thư viện cần thiết
-
- Build code
-
- Shutdown hoặc restart môi trường hiện tại
Với CI, các bước sẽ được thực hiện tự động. Thông thường một CI hoàn chỉnh sẽ bao gồm những thành phần sau:
-
- Microservices development
-
- Serverless architecture
-
- Continuous testing
-
- Deployment containers
Trường hợp xảy ra lỗi, CI/CD cũng sẽ chịu trách nhiệm ghi lỗi, thực hiện một số actions khác nhau nếu gặp phải lỗi trong quá trình triển khai liên tục.
3. Áp dụng continuous integration mang lại lợi ích gì?
CI có lợi ích gì khi áp dụng vào quy trình sản xuất phần mềm? Đầu tiên, với CI, anh em developer có thể đẩy code lên hàng ngày, hàng giờ. Chính vì vậy, trong trường hợp có sự cố, sẽ dễ dàng để phát hiện và fix.
Tránh trường hợp để tới cuối của quy trình phát triển phần mềm mới thấy có lỗi, lúc đó thì toang, sửa không kịp. Ngoài ra, một số CI,CD còn cho phép gắn cờ. Ví dụ nhóm tính năng này sẽ phát triển nhưng chưa chắc sẽ được release, cả team có thể họp với nhau và gắn cờ. Với nhóm tính năng có cờ đó, sẽ không release trong đợt này.
Vậy với CI
-
- Việc build tự động hoàn toàn, anh em không cần take time vào việc build, deploy.
-
- Continuous testing (cái này cứ mỗi lần push code là mỗi lần test). Bộ test case có thể viết trước.
-
- Security automation (phần kiểm tra bảo mật cho code cũng có thể tiến hành hoàn toàn tự động). Cứ mỗi lần đẩy lên là một lần test, tránh các rủi ro về bảo mật.
4. Các giai đoạn trọng continuous integration
Trước khi bàn về stages (bước) trong continuous integration. Ta cần hiểu stages là gì? Stages là từng bước được tiến hành cho 1 CI, CD pipeline hoàn chỉnh. Hiểu sơ thì nó là một bước.
Ví dụ trước khi build anh em cần pull code mới nhất về, vậy pull code là 1 stages. Build code lại là 1 stages mới khác. 2 stages này là 2 stages hoàn toàn khác nhau, nhưng cần có đủ các stages để một CI có thể hoạt động được.
Dưới dây là ví dụ các stages cho một CI hoàn chỉnh. Tất nhiên tuỳ vào dự án, đặc thù code hoặc môi trường của từng dự án mà stages của anh em có thể khác nhau.
-
- Bước 1: lấy code mới nhất + build
-
- Bước 2: chạy code quality check, scan security, …
-
- Bước 3: theo như infrastructure
-
- Bước 4: build xong thì đem code qua môi trường cần deploy
-
- Bước 5: kiểm tra môi trường, quản lý biến môi trường các kiểu
-
- Bước 6: build xong thì restart hoặc start lại API, database services các kiểu
-
- Bước 7: kiểm tra hết thì kiểm tra status, nếu fail thì rollback toàn bộ
-
- Bước 8: ghi log thành công thất bại phục vụ quản lý sau này
Trên đây là ví dụ 8 bước của một CI, CD. Anh em có thể tham khảo, tuy nhiên tuỳ từng dự án số bước có thể khác nhau. Tuy nhiên luôn nhớ concept là cái nào tự động được thì nên tự động.
5. Các continuous integration phổ biến hiện nay
Danh sách các continuous integration phổ biến hiện nay bao gồm:
-
- Argo CD
-
- Buddy
-
- Drone
-
- Travis CI
Anh em có thể bấm voà từng CI, CD để tham khảo tài liệu, đọc sơ để so sánh ưu nhược điểm của từng loại CI,CD hiện nay. Biết thêm càng nhiều càng tốt phải không nào?
6. Tổng kết
Tóm lại continuous integration (CI) giúp đỡ rất nhiều trong quá trình phát triển dự án phần mềm. Ngày nay, nó đã trở thành một phần không thể thiếu trong các dự án. Không chỉ các vị trí Devops cần biết về CI, bản thân lập trình viên ngày nay cũng cần phải có kiến thức về CI, CD trong quá trình phát triển phần mềm.
CI, CD là tiêu chuẩn phổ biến trong hầu hết các doanh nghiệp. Giúp giảm bớt thời gian, công sức của team, của đội nhóm. Cung cấp nhanh chóng cho khách hàng các bản release của phần mềm. Hạn chế các rủi ro về bảo mật
7. Tham khảo
Cảm ơn anh em đã đọc bài – Thank you for your attension – Happy coding!
Tác giả: Kiên Nguyễn
Có thể bạn muốn xem thêm:
- Áp dụng quy trình hiện đại khi làm phần mềm cho hệ thống nhúng
- Một vài câu hỏi thông dụng về Git thường gặp
- Gitlab CI
Đừng bỏ lỡ Việc làm Developer hấp dẫn trên TopDev
- G Giải Quyết Bài Toán Kinh Doanh Bằng Big Data và AI
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- F Framework nào tốt nhất cho dự án của bạn? – Checklist chi tiết
- K Kinh nghiệm xử lý responsive table hiệu quả
- S Stackoverflow là gì? Bí kíp tận dụng Stack Overflow hiệu quả
- 7 7 kinh nghiệm hữu ích khi làm việc với GIT trong dự án
- B Bài tập Python từ cơ bản đến nâng cao (có lời giải)
- B Bảo mật API là gì? Một số nguyên tắc và kỹ thuật cần biết
- H Hướng dẫn cài đặt và tự học lập trình Python cơ bản từ A-Z
- C Chinh Phục Phân Tích Dữ Liệu Với Pandas Trong Python: Hướng Dẫn Từng Bước