Chuyển đến nội dung chính

Quy trình CI/CD là gì?

Các doanh nghiệp gặp áp lực trong việc đưa ra các bản cập nhật phần mềm, sửa lỗi và đổi mới trong thị trường ứng dụng ngày càng cạnh tranh. Các đội ngũ phần mềm và vận hành phải hợp tác làm việc để giải quyết phản hồi của người dùng, giải quyết các vấn đề và triển khai các bản cập nhật mà không làm ảnh hưởng đến hoạt động kinh doanh. Các chu kỳ phát triển phần mềm thông thường, đặc biệt là các chu kỳ dựa trên mô hình thác nước, gặp khó khăn trong việc theo kịp tốc độ phân phối phần mềm hiện đại. Khi vòng đời phát triển phần mềm trở nên nhanh gọn hơn, các đội ngũ phát triển chuyển sang quy trình CI/CD để tạo mã chính xác, chất lượng cao và an toàn hơn một cách hiệu quả.

CI/CD là viết tắt của tích hợp liên tục và phân phối liên tục. Trong một số trường hợp, CD cũng có nghĩa là triển khai liên tục.

  • Tích hợp liên tục cho phép nhiều nhà phát triển đồng thời làm việc và hợp nhất mã của họ mà không ảnh hưởng đến tính ổn định của mã.
  • Phân phối liên tục là một quy trình làm việc tự động để thử nghiệm, xác nhận và chuẩn bị phần mềm để phát hành khi có sự chấp thuận của con người.
  • Triển khai liên tục tương tự như phân phối liên tục, ngoại trừ việc phê duyệt được tự động hóa bởi các quy tắc được cấu hình sẵn.

CI/CD có thể được triển khai như một quy trình để tự động hóa tất cả các quy trình thủ công trước đây. Để hiểu rõ hơn về cách hoạt động của quy trình CI/CD, hãy tham khảo sơ đồ dưới đây.

Mỗi giai đoạn trong quy trình CI/CD bao gồm các hoạt động cụ thể trong quá trình phát triển phần mềm. Chúng có tính năng kiểm tra tự động để kiểm tra mã về chất lượng, lỗ hổng và các vấn đề kỹ thuật khác trước khi các bản dựng phần mềm được chuyển sang bước tiếp theo. Bằng cách này, các đội ngũ phát triển có thể xác định và khắc phục các vấn đề về mã sớm hơn, giúp doanh nghiệp tiết kiệm đáng kể thời gian, nguồn lực và chi phí.

Thiết lập một quy trình CI/CD có vẻ đơn giản. Tuy nhiên, các doanh nghiệp thường phải đối mặt với những thách thức khi triển khai quy trình làm việc CI/CD, đặc biệt là với thiết lập tại chỗ. Ví dụ, các công ty gặp khó khăn về cơ sở hạ tầng khi họ cần quản lý một số lượng lớn các ứng dụng, công cụ và thành viên trong đội ngũ. Nếu không được hỗ trợ, các nhà phát triển sẽ phải dành nhiều thời gian hơn để sửa chữa quy trình thay vì xử lý mã.

Chuyển quy trình làm việc CI/CD sang đám mây AWS cho phép các đội ngũ điều chỉnh quy mô khối lượng công việc phát triển phần mềm hiện đại, truyền đạt các thay đổi và quản lý tài nguyên hiệu quả hơn. Ví dụ: Duolingo đã di chuyển quy trình CI/CD sang AWS EC2 Mac và triển khai các chiến lược tự động mở rộng nâng cao. Kết quả là, họ đã giảm thời gian xây dựng từ 50 phút xuống chỉ còn 16 phút.

Làm thế nào để thiết lập một đường dẫn CI/CD?

AWS giúp việc triển khai CI/CD trở nên dễ dàng hơn, tự động và an toàn hơn với các dịch vụ được quản lý và tự động hóa. Thay vì cung cấp thủ công các công cụ phát triển, máy chủ và tài nguyên, đội ngũ của bạn có thể tập trung vào các hoạt động quan trọng hơn, chẳng hạn như đáp ứng yêu cầu của người dùng và lập chiến lược cho quá trình phát hành phần mềm.

Để bắt đầu, bạn có thể sử dụng AWS CloudFormation để tự động triển khai tài nguyên đám mây mà các nhóm DevOps cần để thiết lập đường dẫn CI/CD. Bạn bắt đầu bằng cách mô tả các tài nguyên bạn cần trong mẫu hoặc sử dụng các mẫu được xây dựng sẵn. CloudFormation sau đó sẽ cung cấp các tài nguyên, cùng nhau tạo thành môi trường nền tảng hỗ trợ CI/CD. Sau đó, bạn có thể triển khai các giai đoạn cho đường dẫn CI/CD trong đám mây AWS như sau.

Nguồn

Giai đoạn nguồn theo dõi các thay đổi về phiên bản mà các nhà phát triển thực hiện. Các nhà phát triển sao chép một phiên bản của mã gốc vào máy cục bộ của mình từ kho lưu trữ trung tâm chung. Sau đó, họ chỉnh sửa, biên soạn, kiểm tra và hợp nhất mã đã sửa đổi với kho lưu trữ.

Dưới đây là cách đội ngũ của bạn có thể thực hiện và quản lý các thay đổi mã bằng các công cụ AWS.

Bước 1 - Mã tác giả với IDE

Nhà phát triển có thể tạo mã mới hoặc chỉnh sửa mã hiện có với AWS Cloud9, đây là một môi trường phát triển tích hợp (IDE) dựa trên đám mây hỗ trợ các ngôn ngữ lập trình phổ biến. Với Cloud9, bạn có thể viết, chạy và gỡ lỗi mã nguồn trên trình duyệt web, miễn là bạn có quyền truy cập vào internet. Ngoài ra, nếu bạn cài đặt IDE của bên thứ ba, bạn có thể tải xuống bộ phát triển phần mềm (SDK) để cho phép viết mã bằng nhiều ngôn ngữ khác nhau, bao gồm Java, Python và JavaScript. SDK cho phép bạn truy cập tài nguyên và thư viện AWS thông qua giao diện lập trình ứng dụng (API) từ môi trường mã hóa ưa thích của bạn.

Bước 2 - Gửi mã vào kho lưu trữ trung tâm

Các nhà phát triển sử dụng các công cụ của bên thứ ba, chẳng hạn như GitHub, để tạo kho lưu trữ mã riêng, quản lý yêu cầu thay đổi mã (pull request) và hợp nhất các thay đổi. Nó hoạt động như một hệ thống kiểm soát phiên bản, cho phép bạn theo dõi những thay đổi mà các lập trình viên khác đã thực hiện, và quay lại mã nguồn hoạt động trước đó nếu cần thiết.

Xây dựng và kiểm thử

Ở giai đoạn xây dựng, mã lưu trong kho lưu trữ trung tâm sẽ được gửi đến một máy chủ xây dựng. Sau đó, máy chủ xây dựng biến mã nguồn và các phần phụ thuộc thành một tệp phần mềm được gọi là tạo tác (artifact), mà các nhà phát triển có thể chạy trong các giai đoạn tiếp theo. Ví dụ: nếu bạn đang xây dựng một chương trình Java, bạn sẽ nhận được một tệp JAR hoặc WAR. Một số thử nghiệm sơ bộ có thể được thực hiện ở giai đoạn này, bao gồm phân tích mã đơn vị và mã tĩnh.

  • Các bài kiểm tra đơn vị đảm bảo rằng các chức năng phần mềm riêng lẻ đưa ra kết quả chính xác. 
  • Việc phân tích mã tĩnh sẽ kiểm tra mã nguồn để xác định lỗi, lỗ hổng bảo mật và tuân thủ các tiêu chuẩn mã hóa.

Nếu mã không thành công trong bất kỳ thử nghiệm nào, các nhà phát triển sẽ khôi phục nó về trạng thái trước đó và giải quyết các vấn đề.

Thông thường, các đội ngũ phần mềm cần tự thiết lập máy chủ xây dựng riêng để đóng gói các ứng dụng của mình. Ngoài ra, họ sẽ cần viết các tập lệnh kiểm tra theo cách thủ công, xác thực chúng và theo dõi kết quả thông qua các lần lặp. Giờ đây, họ có thể sử dụng AWS CodeBuild để tăng tốc quy trình xây dựng CI/CD. Dịch vụ này cho phép nhóm của bạn tự động hóa các bản dựng và kiểm tra phần mềm khi họ thực hiện các thay đổi. Nó định vị mã nguồn từ kho lưu trữ được chỉ định và chạy tập lệnh xây dựng mà bạn đã cấu hình.

AWS CodeBuild sẽ tự động điều chỉnh quy mô khả năng tính toán của nó để phù hợp với khối lượng công việc xây dựng của bạn. Bằng cách này, bạn không phải đợi các bản dựng trước hoàn thành trước khi bắt đầu một bản mới. Các đội ngũ phần mềm có thể xác định sớm các vấn đề về mã và giải quyết chúng trước khi chúng trở nên phức tạp.

Ví dụ: nếu bạn đang xây dựng dự án Node.js, bạn có thể tích hợp khung thử nghiệm Jasmine hoặc Jest với AWS CodeBuild. Các framework này cho phép bạn dễ dàng viết các trường hợp thử nghiệm, chỉ định kết quả mong đợi và xác thực chúng trong quá trình chạy bản dựng. 

Giai đoạn thử nghiệm diễn ra ngay sau giai đoạn chạy bản dựng. Giai đoạn này được thiết kế để áp dụng thử nghiệm nghiêm ngặt hơn, cho phép các đội ngũ phần mềm nâng cao chất lượng mã, hiệu suất, bảo mật và các khía cạnh quan trọng khác. Với đường dẫn CI/CD, thử nghiệm được tự động hóa và mở rộng đến một số lĩnh vực.

  • Kiểm tra tích hợp đảm bảo rằng tất cả các dịch vụ và thành phần của bên thứ ba mà ứng dụng sử dụng đều tương tác chính xác với nhau.
  • Các bài kiểm tra chức năng cung cấp một đánh giá toàn diện về ứng dụng dựa trên quan điểm của người dùng cuối.
  • Các thử nghiệm bảo mật thăm dò ứng dụng để tìm các rủi ro và lỗ hổng bảo mật có thể xảy ra.
  • Các bài kiểm tra hiệu suất đảm bảo ứng dụng vẫn đáp ứng và hoạt động trong trường hợp có điều kiện khắc nghiệt hoặc bất ngờ, chẳng hạn như lưu lượng truy cập tăng đột ngột.

Một lần nữa, ứng dụng phải vượt qua tất cả các bài kiểm tra được chỉ định trước khi chuyển sang giai đoạn tiếp theo.

Dàn dựng

Giai đoạn dàn dựng cho phép bạn thực hiện bước kiểm tra cuối cùng trên ứng dụng trước khi phát hành đến người dùng cuối. Ở giai đoạn này, các đội ngũ phần mềm triển khai ứng dụng trong một môi trường mô phỏng các triển khai trong thế giới thực. Thông thường, họ sử dụng dữ liệu thử nghiệm và chọn một nhóm người dùng thực để kiểm tra ứng dụng. Việc này nhằm mục đích tìm ra những lỗi còn tiềm ẩn trước khi đưa sản phẩm ra mắt.

Ví dụ: bạn đã cập nhật một ứng dụng và bạn muốn kiểm tra cách ứng dụng hoạt động khi nhận các tương tác của người dùng. Triển khai ứng dụng trong môi trường dàn dựng giúp bạn đánh giá hiệu suất phần mềm mà không làm gián đoạn hoạt động kinh doanh. Sau khi hoàn thành tất cả các điều kiện thử nghiệm, các đội ngũ phần mềm triển khai ứng dụng vào môi trường sản xuất, giúp người dùng cuối có thể truy cập được.

Triển khai đa môi trường có thể là một thách thức, đặc biệt nếu các đội ngũ làm việc này theo cách thủ công. AWS CodeDeploy có thể đơn giản hóa hoạt động triển khai ứng dụng. Dịch vụ này giúp tự động hóa việc triển khai ứng dụng cho các môi trường khác nhau. Bạn có thể xem các hoạt động triển khai, theo dõi các thay đổi và quay trở lại phiên bản trước nếu cần. Nó cũng thu hẹp khoảng cách giữa dàn dựng và sản xuất. Ví dụ: bạn có thể sử dụng hướng dẫn triển khai chính xác mà bạn sử dụng để dàn dựng cho bản phát hành sản xuất.

Sản xuất

Sản xuất là môi trường trực tiếp nơi người dùng thực sự truy cập ứng dụng của bạn. Sau khi sửa đổi, thử nghiệm và xác nhận các thay đổi, các đội ngũ phần mềm phát hành ứng dụng đã cập nhật trong môi trường sản xuất. Mặc dù hành động này đánh dấu sự kết thúc của đường dẫn CI/CD, các nỗ lực để đảm bảo ứng dụng đáp ứng các yêu cầu về hiệu suất, bảo mật và kinh doanh vẫn tiếp tục. Do đó, bạn sẽ cần phải liên tục theo dõi khi ứng dụng hoạt động trong môi trường sản xuất.

Amazon CloudWatch là một dịch vụ cung cấp cho các đội ngũ phát triển và vận hành thông tin về các ứng dụng mà họ triển khai trên AWS, tại chỗ hoặc các môi trường đám mây khác. Nó tự động thu thập và trực quan hóa dữ liệu vận hành, cho phép bạn hiểu rõ hơn về cách ứng dụng của bạn hoạt động trong điều kiện thực tế. Ngoài ra, bạn có thể đặt cảnh báo và nhận thông báo về các sự kiện cần sự chú ý kịp thời từ đội ngũ của bạn.  

Làm thế nào bạn có thể tự động hóa một đường dẫn CI/CD?

Hợp lý hóa các công cụ CI/CD từ các nhà cung cấp khác nhau có thể là một thách thức, đặc biệt nếu nó liên quan đến các thiết lập thủ công mở rộng. Tuy nhiên, với AWS CodePipeline, bạn có thể tự động hóa, mở rộng và tăng tốc toàn bộ quy trình phát hành mã trong khi vẫn duy trì tính linh hoạt.

AWS CodePipeline cho phép bạn lập mô hình quy trình làm việc CI/CD với giao diện người dùng đồ họa. Bạn có thể dễ dàng tích hợp các dịch vụ AWS vào đường dẫn hoặc kết nối với các công cụ và tài nguyên hiện có mà bạn sử dụng. Ví dụ: nếu bạn muốn sử dụng Jenkins làm máy chủ xây dựng, bạn có thể tích hợp nó với AWS CodePipeline.

Dưới đây, chúng tôi tóm tắt các bước để thực hiện điều này.

  1. Cài đặt Jenkins và plugin AWS CodePipeline cho Jenkins.
  2. Sau đó, đặt quyền truy cập với Quản lý danh tính và truy cập trong AWS (IAM) cho Jenkins. Điều này cho phép Jenkins sử dụng thông tin chứng thực được ủy quyền để tương tác với AWS CodePipeline.
  3. Đăng nhập vào bảng điều khiển AWS CodePipeline và tạo một đường ống tùy chỉnh.
  4. Kết nối đường ống với kho lưu trữ mã nguồn được chia sẻ, chẳng hạn như GitHub.
  5. Sau đó, thêm một giai đoạn xây dựng và chọn Jenkins làm máy chủ xây dựng.
  6. Thêm bất kỳ giai đoạn thử nghiệm cần thiết nào, bao gồm các hành động thử nghiệm bắt buộc và trình kích hoạt xây dựng.
  7. Tiếp theo, kết nối giai đoạn triển khai với AWS CodeDeploy hoặc dịch vụ triển khai khác. 

AWS có thể hỗ trợ nhu cầu đường dẫn CI/CD của bạn như thế nào?

Đường dẫn CI/CD cho phép các doanh nghiệp sản xuất, thử nghiệm và phát hành các bản cập nhật ứng dụng nhanh hơn mà không ảnh hưởng đến chất lượng và bảo mật phần mềm. Các nhóm phát triển phần mềm sửa đổi mã, hợp nhất các thay đổi, tự động hóa các thử nghiệm, lên lịch triển khai và hơn thế nữa với các công cụ CI/CD tự động. Tuy nhiên, một số nhóm phải đối mặt với những thách thức trong việc mở rộng quy mô quy trình làm việc CI/CD do hạn chế về cơ sở hạ tầng, tài nguyên và quy trình.

AWS cung cấp một bộ giải pháp dựa trên đám mây để tạo, hợp lý hóa và mở rộng quy mô đường dẫn CI/CD của bạn.

  • AWS CloudFormation cung cấp tài nguyên để các công cụ CI/CD chạy trên đó.
  • AWS Cloud9 cho phép các nhà phát triển viết, chạy và gỡ lỗi mã từ trình duyệt của họ.
  • AWS CodeBuild cho phép bạn biên dịch, kiểm tra và đóng gói ứng dụng của mình mà không cần quản lý máy chủ xây dựng của riêng bạn.
  • AWS CodeDeploy tự động triển khai trên bất kỳ môi trường nào, bao gồm các phiên bản tại chỗ và AWS.
  • AWS CodePipeline cho phép bạn lập mô hình toàn bộ quy trình làm việc CI/CD, từ môi trường nguồn đến môi trường sản xuất trực tiếp.
  • AWS CloudWatch cho phép các đội ngũ vận hành liên tục theo dõi, ghi nhật ký và phân tích các ứng dụng đã triển khai.

Nếu bạn cần thêm hỗ trợ thiết lập đường dẫn CI/CD, vui lòng liên hệ với bộ phận Dịch vụ Chuyên nghiệp của Amazon.