CI/CD là gì ?

Phần mềm đang là lĩnh vực “hot” nhất hiện nay, nó hiện diện khắp nơi trong cuộc sống và phát triển với tốc độ chóng mặt. Sự phát triển không ngừng của phần mềm đã đặt ra những thách thức không nhỏ với các viên cùng với những quy trình phần mềm truyền thống. Làm thế nào để phát triển phần mềm với một cách liên tục, mượt mà trong khi vẫn đảm bảo chất lượng sản phẩm là một yêu cầu cấp thiết. Sự ra đời của Test automation và Continuous Integration/Continuous Development() là một phần của giải pháp.

Trước đây, phần mềm là những sản phẩm đóng gói như hàng hoá, được bán cho các doanh nghiệp trước tiên, và sau đó mới đến người tiêu dùng. Từ lâu quy trình đó đã bị đảo ngược. Hiện nay trên thế giới có hơn một tỉ smartphone, tạo ra một thị trường tiêu dùng mạnh mẽ nơi các ứng dụng phần mềm trở nên đa dạng hơn bao giờ hết. Trước đây phần mềm của các hãng lớn như phải mất hàng năm để ra mắt thị trường, thì bây giờ quá trình tương tự chỉ mất vẻn vẹn vài phút: bạn trên app store, đọc vài review, và sau đó bấm “buy”.

Tuy điều này mang lại cơ hội kinh doanh rất lớn, nó cũng gây ra nhiều áp lực không nhỏ cho quá trình phát triển phần mềm. Nếu bạn không có khả năng tưởng tượng, thiết kế, thực thi và phát hành một trang web hay một ứng dụng điện thoại trong vòng vài tháng thì sẽ có ai đó làm. Và một khi ứng dụng của bạn đã được phát hành thì người ta sẽ mong đợi một loạt các cải tiến liên tục sau đó.

Để đối phó với thách thức như vậy, cần có những hành động tương ứng. Đầu tiên là các lập trình viên phải có năng suất cao hơn bao giờ hết. Các ngôn ngữ mới, công cụ mới được phát triển, và lập trình viên tập trung cao độ vào việc nâng cao kỹ năng nghề nghiệp.

Tuy vậy, bài viết này sẽ tập trung nói về một điều quan trọng không kém trong việc nâng cao hiệu suất phát triển phần mềm: tự động hoá truy trình. Khi lập trình viên viết xong các mã code, thì bản thân các đoạn code đấy không chỉ dừng lại ở production, mà còn nhiều việc tiếp theo cần làm, đặc biệt là việc kiểm tra chất lượng code.

Các thuật ngữ liên quan ở đây là “Continuous Integration” và “Continuous Deployment” được viết tắt là CI/CD. Ban đầu Continuous Integration (Tích hợp liên tục) có nghĩa là bạn chạy “integration tests” mỗi khi code thay đổi; trong khi Continuous Delivery (Phát hành liên tục) nghĩa là bạn tự động phát hành mọi sự thay đổi mà qua được các test. Tuy nhiên gần đây thuật ngữ CI/CD được sử dụng với một nghĩa rộng hơn để diễn tả mọi thứ liên quan đến “automation of the pipeline” từ khi một lập trình viên thêm một thay đổi vào một central repository đến khi đoạn code nằm ở production.

GIỚI THIỆU VỀ CI/CD

CI là viết tắt của Continuous Integration

  • Là tích hợp liên tục, nhằm liên tục tích hợp các source code của các members trong team lại một cách nhanh chóng, giúp kiểm soát được tình hình phát triển thông qua các bước kiểm thử (Integration testregession test), nhằm đưa sản phẩm đạt đến sự ổn định.
  • Hình ảnh minh họa chu trình Continuous Integration (CI)

  • Chu trình làm việc với sources code:
    • Đầu tiên, các members trong team sẽ bắt đầu pull code mới nhất từ repo về branch để thực hiện các ticket nhất định.
    • Tiếp đó là quá trình typing và testing code để đảm bảo chất lượng ticket cũng như toàn bộ source code.
    • Members sẵn sàng cho việc commit vào branch phát triển của cả team.
    • Members cập nhật code mới từ repo về local repo
    • Merge code và giải quyết conflict.
    • Build và đảm bảo code pass qua các tests dưới local.
    • Commit code lên repo
    • Máy chủ CI lắng nghe các thay đổi code từ repository và có thể tự động build/test, sau đó đưa ra các thông báo (pass/failure) cho các members.

CD: Continuous Delivery hay Continuous Deployment ?

  • Trước hết Continuous Delivery: được hiểu là chuyển giao liên tục, là 1 tập hợp các kỹ thuật nhằm đảm bảo việc triển khai tích hợp souce code trên môi trường staging ( một môi trường rất giống với môi trường production). Theo cách này ta có thể đảm bảo source được kiểm thử một cách tỉ mỉ trước khi deploy lên môi trường production. Khi đó source code sẽ không được deploy tự động sang môi trường production.
  • Continuous Deployment: là 1 bước phát triển của Coninuous Delivery, giúp hoàn tất giai đoạn chuyển khai từ môi trường staging ( môi trường kiểm thử) sang môi trường production. Bằng cách này sources code sẽ đuợc tự động deploy lên môi trường production.
  • Vì vậy, ta sẽ hiểu CD là Continuous Delivery hay Continuous Deployment thì phụ thuộc vào cách thức mà nó triển khai trai trên môi trường production hay môi trường testing/staging
  • Sự khác nhau giữa Continuous Delivery vs Continuous Deployment được thể hiện dưới biểu đồ sau:

The Development Pipeline

Nhìn nhận tổng quan thì CI/CD pipeline thường gồm các bước sau:

1. Commit. Khi lập trình viên hoàn thành một thay đổi thì anh ta sẽ commit thay đổi đó vào một source code repository
2. Build. Thay đổi được lấy ra từ repository và sau đó phần mềm được build để có thể chạy trên máy tính. Bước này phụ thuộc vào ngôn ngữ nào được dùng, đối với các ngôn ngữ phiên dịch (interpreted languages) thì bước này có thể được loại bỏ.
3. Automated tests. Đây là phần chính của CI/CD pipeline. Các thay đổi được test ở nhiều góc độ để đảm bảo nó hoạt động và không làm hại đến những phần khác.
4. Deploy. Phiên bản đã được build sẽ được đưa lên production.

Toàn bộ pipeline cần phải tự động hoá. Mức cao nhất của tự động hoá là một commit đơn lẻ từ một lập trình viên sẽ được tự động chuyển thành một update lên production sau vài giờ.
Có một số công cụ dành cho việc tự động hoá CI/CD pipeline, bao gồm các giải pháp tích hợp sẵn như Cloudbees và Atlassian Bamboo và phần mềm riêng lẻ như Jenkins và Teamcity.

Một điều cần lưu ý là mô hình pipeline này yêu cầu phương pháp phát triển phần mềm Agile trong đó bạn luôn có một phiên bản hiện tại chạy (working version) của sản phẩm trên production, và chỉ áp dụng những thay đổi nhỏ mà có thể được test riêng rẽ và phát hành được.

Automated tests

Automated tests hiển nhiên là thành phần quan trọng nhất của bất kỳ CI/CD pipeline nào. Nếu không có automated tests mà có thể chạy nhanh, có tỉ lệ coverage cao, và không gây lỗi, thì sẽ không thể có một CI/CD pipeline thành công. Đơn giản vậy đó.

Automated tests bao gồm nhiều test suits:
– Unit tests. Đây là phần test được chạy đầu tiên, thường là bởi các lập trình viên, dùng để test các function hoặc class. Khi những function hoặc class này cần truy cập đến các tài nguyên bên ngoài, thì những tài nguyên đó thường được fake như là các “mock” hay “stub”.
– Integration tests. Là bước tiếp theo từ unit tests. Integration tests đảm bảo các module tạo nên ứng dụng hoạt động mượt mà với nhau. Lý tưởng nhất là integration tests được chạy trong môi trường tương tự với môi trường production.
– System tests. Test toàn bộ hệ thống trong một môi trường càng giống với môi trường production càng tốt.

Test Environments

Ngoài việc có một bộ tests chất lượng, thì môi trường chúng chạy trên đó cũng quan trọng không kém. Những yếu tố sau đây là rất cần thiết:
– Môi trường sạch sẽ. Sạch sẽ ở đây nghĩa là môi trường được reset trước mỗi lần chạy test để đảm bảo các lần test không ảnh hưởng lẫn nhau. Các công nghệ như hay snapshot có thể giúp thực hiện điều này.
– Môi trường tương đồng. Môi trường chạy test phải gần giống với môi trường production.
– Trường hợp lý tưởng thì môi trường có thể được tạo lập và huỷ bỏ nhanh chóng theo yêu cầu. Đưa những môi trường chạy code lên là một ý tưởng hay trong trường hợp này.

Các khuyến nghị

Nếu bạn cũng đồng ý rằng CI/CD mang lại nhiều lợi ích cho bạn hay công ty bạn, và bạn có ý định thực hiện CI/CD thì tôi sẽ có vài gợi ý cho bạn như dưới đây:
– Việc phát triển phần mềm nên đi qua nhiều bước nhỏ thay vì một sự thay đổi lớn lao. Hãy chia nhỏ một thay đổi lớn thành nhiều thay đổi nhỏ.
– Đầu tư thời gian cho việc tạo ra automated test suite. Thực hiện việc này một cách từ từ từng bước vì nó có thể quá lớn để có thể tạo ra một lúc. Nhưng không được dừng lại cho đến khi bạn đạt được tỉ lệ coverage tốt (>90%).
– Một khi bạn đã có vài test case, bắt đầu tạo ra quá trình tự động hoá cho pipeline.
– Sử dụng các công tắc tính năng hay deploy từng phần để từ từ đưa các tính năng mới đến người dùng.

Xem thêm CI, CD và DevOps là gì ?

Print Friendly, PDF & Email

Comments

comments

Bài viết liên quan

1 Trackback / Pingback

  1. CI, CD và DevOps là gì ? - Góc IT

Để lại lời nhắn