CI/CD: Overview

Đợt này mình ngụp lặn trong bug nên có tìm hiểu đôi chút về DevOps để giúp ích, chủ động trong công việc, nắm được chi tiết toàn bộ các phần của dự án cũng như fix bug được nhanh chóng hơn.

Đầu tiên trong bài viết này chúng ta sẽ tìm hiểu về CI/CD, mình sẽ giới thiệu các bạn về kiến thức mình tìm hiểu được về chúng trong DevOps, hi vọng sẽ cung cấp nhiều thông tin có ích cho mọi người, đặc biệt là những Dev muốn học thêm về phần Ops như mình.

Chúng ta cùng bắt đầu thôi!

What is CI/CD ?

CI CD là gì? Những lợi ích mà nó mang lại cho doanh nghiệp là gì?
Nguồn: Google

Waterfall, Agile và bây giờ là DevOps. Đây là cách các developers hiện đại xây dựng các sản phẩm mới. Với sự phát triển của DevOps, các phương pháp tích hợp liên tục (CI), phân phối liên tục (CD), còn được gọi chung là CI/CD và triển khai liên tục (tùy chỉnh) đã xuất hiện. Các phương pháp phát triển và phân phối phần mềm truyền thống đang nhanh chóng trở nên lỗi thời. Trước đây, hầu hết phần mềm sẽ được triển khai và chuyển giao dưới dạng các phiên bản hàng tháng, hàng quý hoặc thậm chí hàng năm. Tuy nhiên, bây giờ trong thời đại của DevOps, cùng với CI CD, thời gian này giảm xuống còn vài tuần, một ngày, hoặc thậm chí nhiều lần một ngày, đặc biệt là khi SaaS đang chiếm lĩnh thế giới và các ứng dụng có thể được cập nhật một cách dễ dàng và nhanh chóng..

Continuous integration, continuous delivery and continuous deployment

Nguồn: Google

CI (Continuous Integration): Có thể hiểu theo cách tổng quát là tự động hoá trong khâu sản xuất. Là một phương pháp phát triển phần mềm yêu cầu các thành viên trong nhóm tích hợp công việc của họ với nhau một cách thường xuyên. Mỗi lần tích hợp sẽ được xây dựng tự động để phát hiện lỗi nhanh nhất có thể. Sử dụng CI làm giảm các vấn đề tích hợp và cho phép developers xây dựng phần mềm nhanh hơn và đúng tiến độ.

Quy trình làm việc của CI có thể được diễn ra như sau:

  • Developers sẽ commit code và push lên repository.
  • Tiếp theo, CI server sẽ thực hiện giám sát trên repository và kiểm tra xem có bất kỳ sự thay đổi nào trên chúng hay không.
  • Khi xảy ra những thay đổi, CI server sẽ phải hiện ra code mới nhất từ repo và sau đó sẽ build, chạy các unit test và integration test.
  • Tiếp sau đó, CI server sẽ tạo ra những response và gửi đến cho các thành viên trong dự án. Và CI server lại tiếp tục chờ đợi những thay đổi từ repository.
  • Mỗi lần mà developer làm xong các task của mình, họ sẽ chạy trên local trước để kiểm tra trước khi commit code lên repository. Đây là một công đoạn thường xuyên diễn ra tại bất cứ thời gian nào. Việc xây dựng tích hợp sẽ không xảy ra nếu chúng không ảnh hưởng đến repository.

CI là phương pháp phát triển phần mềm theo hướng tự động hóa

Nguồn: Google

Vậy lợi ích của CI là gì:
– Progress tích hợp – test – report sẽ diễn ra liền mạch và tự động. Giảm thiểu rủi ro nhờ việc phát hiện lỗi và fix sớm, giúp tăng chất lượng sản phẩm nhờ khả năng tự động kiểm tra và quan sát.
– Những quy trình thủ công lặp đi lặp lại hằng ngày cũng được giảm tải, thay vào đó là xây dựng và kiểm thử tự động mà không cần đến sự giúp đỡ của con người

CD (Continuous Delivery) trong khi CI là quy trình để build và test tự động, thì Continuous Delivery (tạm dịch là chuyển giao liên tục) lại nâng cao hơn một chút, bằng cách triển khai tất cả thay đổi về code (đã được build và test) đến môi trường testing hoặc staging. CD cho phép developers tự động hóa phần mềm testing, kiểm tra phần mềm qua nhiều thước đo trước khi triển khai. Những bài test này có thể bao gồm UI testing, integration testing, API testing,… 

CD sử dụng Deployment Pipeline giúp chia quy trình chuyển giao thành các giai đoạn. Mỗi giai đoạn có những mục tiêu riêng để xác minh chất lượng của các tính năng từ một góc độ vô cùng khác để có thể kiểm định được chức năng và tránh những lỗi phát sinh ảnh hưởng đến người dùng.

Nguồn: Google


Ngoài ra, còn có Continuous Deployment : là một step khác ngoài Continuous Integration, tương tự như Continuous Delivery. Sự khác biệt ở chỗ là thay vì triển khai ứng dụng của bạn theo cách thủ công, nó có thể được triển khai tự động mà không cần thiết tới sự can thiệp của con người.

Chúng ta có thể tóm tắt lại những ý trên qua lược đồ sau:

Nguồn: google

CI/CD tools

Hiện tại trên thị trường có rất nhiều tool CI/CD và tuỳ theo mỗi yêu cầu dự án, ngân sách, chiến lược, thì mọi người có thể chọn tool phù hợp nhất cho dự án của mình. Sau đây mình sẽ tổng hợp một số tool CI/CD tiêu biểu nhất trên thị trường:


GitLab CI/CD is the part of GitLab that you use for all of the continuous methods (Continuous Integration, Delivery, and Deployment). With GitLab CI/CD, you can test, build, and publish your software with no third-party application or integration needed.


Gitlab CI/CD là một công cụ được tích hợp sẵn trong GitLab, có sẵn cho các nền tảng được sử dụng rộng rãi như Windows, Linux và macOS. Giao diện thân thiện trực quan và dễ sử dụng.
Nó là một trong những công cụ CI / CD tốt nhất vì nó cung cấp một loạt các tính năng như:
– Đánh giá Code
– CI / CD triển khai liên tục v.v.. trong một bảng điều khiển duy nhất.
Nếu code của bạn lưu trên Gitlab thì đây đúng là một công cụ tốt nhất, sẽ không bị lệ thuộc vào các tool khác khi thiết lập và config. Gitlab cũng là một nhà cung cấp dịch vụ đáng tin cậy nên tính ổn định sẽ rất cao. 
Đây cũng là một trong những dịch vụ tin cậy nhất được sử dụng ở hầu hết các dự án tại FlintersVN

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software.

Jenkins được viết bằng Java nên Jenkins có thể kết hợp được với hầu hết các công cụ khác của hệ thống tích hợp liên tục với nhiều nền tảng khác nhau. 
Jenkins open source và miễn phí, được đánh giá rất cao trên github, nó phù hợp với cả công ty khởi nghiệp cũng như các công ty lớn.
Jenkins đã có mặt từ rất lâu trong mảng này cho nên cộng đồng rất lớn và có hàng nghìn plugins được đóng góp từ cộng đồng cho đủ các trường hợp, người dùng có thể tự tạo plugin và chia sẻ một cách dễ dàng.
Đặc biệt đây là một giải pháp rất tiết kiệm chi phí

Build like never before. Set up sophisticated pipelines using Kotlin or get started in a few clicks using the intuitive user interface. Receive instant notifications about build results directly in your IDE, determine whether your code will break the build without committing it, and so much more.


Tương tự như Jenkins, TeamCity cũng được build trên máy chủ bằng Java, thường được sử dụng cho các dự án Java và .NET, có thể được cài đặt trên máy chủ Windows và Linux.
TeamCity được coi là sự thay thế tốt nhất cho Jenkins. Nó được phát triển và vận hành bởi JetBrains (công ty chủ quản của PyCharm, IntelliJ Idea, v.v.). được bảo mật và cung cấp các plugin cực kỳ ổn định.
TeamCity được sử dụng miễn phí cho các dự án mã nguồn mở và cung cấp cho các nhóm nhỏ

Summary:

Trên đây mình đã tổng hợp một số kiến thức tổng quan về CI/CD cũng như giới thiệu một số tool thông dụng trên thị trường.

Ở bài viết tiếp theo của phần này mình sẽ hướng dẫn các bạn cụ thể về Gitlab CI/CD cũng như ở Flinters đang sử dụng chúng như thế nào.

Hi vọng sẽ cung cấp được nhiều thông tin bổ ích cho bạn đọc, cũng như nhận được các ý kiến đóng góp từ mọi người để mình hoàn thiện bài viết hơn.

References:

https://docs.gitlab.com/ee/ci/introduction/index.html
https://cafedev.vn/top-5-cong-cu-ci-tot-nhat-hien-nay
https://www.jetbrains.com/teamcity/promo/cloud/
https://www.jenkins.io/doc/

One Comment

Add a Comment

Scroll Up