Hiện nay, các mô hình phát triển phần mềm truyền thống đang không còn được tối ưu như trước nữa. Thay vào đó, sự phát triển liên tục của công nghệ sẽ yêu cầu các Developer phải liên tục phát triển bản thân và cập nhật code của dự án. Vậy đâu sẽ là mô hình phát triển phần mềm phù hợp cho hiện tại? CICD chính là giải pháp dành cho bạn. Chúng ta sẽ đi sâu tìm hiểu về “CICD là gì” trong bài viết nhé!
CICD là gì?
Quy trình phát triển phần mềm truyền thống diễn ra theo 6 giai đoạn cơ bản như:
Khảo sát => phân tích hệ thống => lập kế hoạch => thực hiện kế hoạch => kiểm thử => triển khai và bảo trì.
Quy trình phát triển phần mềm truyền thống vẫn đang được triển khai và sử dụng rất nhiều trong giới công nghệ thông tin. Tuy nhiên, để đáp ứng theo sự phát triển “như vũ bão” của công nghệ, mô hình phát triển phần mềm truyền thống đang dần bộc lộ những nhược điểm và dần không còn tối ưu như trước đây.
Vì thế, những mô hình phát triển phần mềm khác đang dần được xây và triển khai sao cho phù hợp với thời đại. Và CICD là mô hình 2 trong 1 sẽ đáp ứng, thích ứng với biến đổi công nghệ này.
CICD là viết tắt của 2 cụm từ:
- CI: Continuous Integration – tích hợp liên tục
- CD: Continuous Delivery – chuyển giao liên tục hoặc Continuous Deployment – triển khai liên trục.
Nhưng trong bài viết sẽ định hướng tìm hiểu về Continuous Integration + Continuous Delivery bạn nhé!
CI là gì? Tích hợp liên tục là gì?
CI là viết tắt của Continuous Integration, tạm dịch là tích hợp liên tục. Công việc này sẽ đòi hỏi đội nhóm phát triển phần mềm sẽ phải gia tăng thêm khối lượng công việc và thực hiện những công việc như: thường xuyên kiểm tra và phát triển chức năng được giao trong phần mềm.
Quy trình CI sẽ giúp các Developer có thể liên tục thực hiện gia tăng chức năng, các bản cập nhật cho phần mềm của mình. Bạn đầu, chức năng của bạn sẽ được viết riêng lẻ, sau đó được tích hợp vào mã nguồn chính sau khi đã vượt qua toàn bộ những yếu tố nghiệp vụ cần thiết, mã hóa và các thử nghiệm.
Để hiểu hơn, bạn nên tìm hiểu thêm về Pull Request nhé!
CD là gì? Chuyển giao liên tục là gì?
CD là viết tắt của Continuous Delivery, tạm dịch là chuyển giao liên tục. Đây là giai đoạn tiếp nối của CI, thực hiện các bổ sung cho phần mềm đến khi sản phẩm phần mềm được phân phối đến tay người tiêu dùng.
Trong giai đoạn này, bạn sẽ cần phải thực hiện nhiều việc hơn với cường độ cao hơn. Continuous Delivery sẽ là giai đoạn triển khai những thay đổi về code đã được phát triển và kiểm thử vào môi trường testing hoặc staging. Tuy nhiên, may mắn thay, chúng ta có rất nhiều phần mềm hỗ trợ cho việc tự động hóa kiểm thử trước khi chuyển giao cho khách hàng, hoặc triển khai cho khách hàng của bạn sử dụng.
Sau giai đoạn của CD cũng là CD :)) nhưng khác về mặt ý nghĩa và thường xuyên bị nhầm lẫn với nhau – Continuous Deployment, triển khai liên tục. Kỹ thuật triển khai code tự động vào môi trường sản phẩm chính thức.
Tuy nhiên, việc triển khai tự động code thẳng vào sản phẩm chính thức chỉ vừa qua giai đoạn test sẽ khá nguy hiểm vì nhiều lý do. Vì thế, bạn sẽ vẫn phải cần thực hiện thủ công để đảm bảo sản phẩm là tốt nhất nhé!
CICD – Yêu cầu và cơ hội
Trong phần này, chúng ta sẽ tiếp tục tìm hiểu xem những yêu cầu cần thiết để triển khai CI/CD ra sao cũng như những cơ hội, lợi ích của bạn – dự án – đội nhóm của bạn nhận được trong mỗi giai đoạn nhé!
Continuous Integration
Những gì bạn cần
- Nhóm của bạn sẽ phải cần tự viết các bài test tự động cho những tính năng mới, tự cải tiến và debug cho phần mềm của mình.
- Bạn/ người quản lý sẽ cần phải chủ động giám sát cùng với một máy chủ có khả năng có thể giám sát kho lưu trữ chính và tích hợp liên tục các bài kiểm tra tự động cho những commit mới được đẩy lên.
- Developer phải hợp nhất các thay đổi trong code một cách thường xuyên nhất – ít nhất 1 lần 1 ngày.
Những điều nhận được
Chỉ mới 3 gạch đầu dòng cơ bản, nhưng khi triển khai thực tế bạn sẽ thấy khối lượng công việc trở nên khủng khiếp như thế nào. Tuy nhiên, bạn sẽ được những lợi ích như sau:
- Ít bug diễn ra trong sản phẩm chính thức khi đến tay người sử dụng vì các phép quy hồi sẽ ghi lại những bug đó bằng những bài test tự động từ trước.
- Việc tích hợp vào bảng phát hành (release) sẽ dễ dàng hơn các vấn đề đã được tích hợp và giải quyết từ trước.
- Trường hợp phải giải quyết các sự cố lớn sẽ ít diễn ra hơn, khi được cảnh báo nếu phát vỡ bản build. Sau đó, họ có thể xử lý sự cố và chuyển sang nhiệm vụ tiếp theo.
- Chi phí kiểm tra và nguồn nhân lực được giảm xuống đáng kể nếu bạn sử dụng các bài test tự động có thể kiêm tra cùng lúc hàng trăm bài.
Continuous Delivery
Những gì bạn cần
Trong giai đoạn này, bạn sẽ cần nhiều nguồn tài nguyên lẫn nhân lực để thực hiện như:
- Bạn sẽ cần phải có nền tảng vững chắc về kiến thức và khả năng kiểm tra những bộ test bao gồm cả mã nguồn cơ sở của bạn.
- Quá trình triển khai nên diễn ra tự động. Tuy nhiên, giai đoạn khởi động vẫn sẽ cần phải thực hiện thủ công nhưng khi đã triển khai công việc còn lại sẽ ít cần sự can thiệp của con người.
- Nhóm của bạn sẽ cần phải “cắm cờ” những chức năng mà đội nhóm của bạn vẫn chưa hoàn thiện để không ảnh hưởng đến khách hàng trong quá trình sử dụng.
Những điều nhận được
- Đến đây, hầu hết các phần việc phức tạp đã hoàn tất. Quá trình release phần mềm không còn phải chuẩn bị nhiều ngày nữa.
- Bạn có thể release phần mềm của mình thường xuyên hơn và tăng tốc việc nhận phản hồi từ khách hàng để nâng cấp phần mềm. Bạn có thể thấy đặc điểm này ở những phần mềm trên điện thoại.
- Những thay đổi sẽ được thực hiện liên tục và các quyết định thay đổi nhỏ sẽ không quá ảnh hưởng và việc lặp lại nhanh hơn sẽ giúp cả nhóm phát triển hơn.
Đến đây, có lẽ bạn cũng đã hiểu hơn về “CICD là gì” rồi đúng không nào? Việc triển khai CICD trong thực tế sẽ yêu cầu nhiều nguồn nhân lực, tài nguyên hơn so với mô hình truyền thống. Tuy nhiên,Tino Group tin rằng những thay đổi của bạn sẽ khiến khách hàng cảm thấy hài lòng hơn!
Những câu hỏi thường gặp về CICD
Những dự án nào sử dụng CICD trong thực tế?
Có rất nhiều dự án phần mềm khổng lồ đang sử dụng quy trình phát triển CICD trong thực tế như:
REACT.JS – được duy trì và phát triển bởi Facebook
TensorFlow – là một dự án về Machine Learning và AI của Google
Sự khác biệt giữa Continuous Delivery và Continuous Deployment là gì?
Nếu viết tắt, bạn sẽ khó lòng biết CD là Continuous Delivery hay Continuous Deployment. Tuy nhiên, cả Continuous Delivery và Continuous Deployment đều là một phần của CICD và điểm khác biệt duy nhất giữa Continuous Delivery và Continuous Deployment là:
Khả năng phát triển tự động hoàn toàn của Continuous Deployment trong khi đó, Continuous Delivery vẫn có giai đoạn Deploy là phải thực hiện thông thường.
Có nên áp dụng CICD vào dự án hay không?
Câu trả lời của vấn đề này sẽ hoàn toàn phụ thuộc vào bạn – dự án của bạn và khả năng của đội ngũ của bạn đang có. Nếu phát triển theo mô hình truyền thống, bạn có thể làm một lần và ngưng hoặc bảo hành theo yêu cầu của khách hàng. Trong khi đó, nếu triển khai CICD, đội nhóm của bạn sẽ phải đi theo dự án suốt vòng đời sống của dự án.
Nên tham khảo những tài liệu nào để áp dụng CICD?
Sẽ có rất nhiều nguồn tài liệu để bạn có thể tham khảo và áp dụng CICD. Tuy nhiên, đa phần nguồn tài liệu “xịn” sẽ viết bằng tiếng Anh. Vì thế, khả năng đọc hiểu tiếng Anh, tiếng Anh chuyên ngành sẽ là yêu cầu đầu tiên.
Nguồn tài liệu cá nhân người viết bài cảm thấy rất bổ ích là của Atlassian, họ là nhà phát triển của Bucket, Trello rất nổi trong những năm gần đây. Một số tài liệu nên tham khảo: