Tổng quan đồ án
Trong bối cảnh phát triển phần mềm hiện đại, việc đảm bảo chất lượng phần mềm và tăng tốc độ triển khai ứng dụng là một yếu tố quan trọng đối với mọi tổ chức phát triển công nghệ. Quy trình tích hợp CI/CD (Continuous Integration/Continuous Delivery) cho phép tự động hóa các công đoạn trong vòng đời phát triển phần mềm như kiểm thử, xây dựng và triển khai, giảm thiểu sai sót và tăng năng suất cho đội ngũ phát triển. Tuy nhiên, trong môi trường phức tạp, việc quản lý hạ tầng và các dịch vụ triển khai trên nhiều môi trường vẫn là một thách thức lớn.
Dự án này nhằm triển khai quy trình CI/CD tích hợp GitOps cho ứng dụng Eshop được xây dựng theo kiến trúc Microservices. GitOps sử dụng Git để quản lý tất cả các cấu hình và trạng thái của ứng dụng, giúp việc triển khai và duy trì hệ thống trở nên đơn giản và hiệu quả hơn. Bằng cách tự động hóa quy trình này, em mong muốn tối ưu hóa quá trình phát triển ứng dụng, giảm thiểu sự phụ thuộc vào các bước thủ công và đảm bảo tính nhất quán giữa các môi trường phát triển, kiểm thử và sản xuất.
Ứng dụng Eshop theo mô hình microservices giúp chia nhỏ các chức năng thành các dịch vụ độc lập, dễ dàng bảo trì và mở rộng, góp phần tăng cường tính linh hoạt và khả năng quản lý.
Với sự phát triển nhanh chóng của các ứng dụng web, việc triển khai và duy trì hệ thống không chỉ dừng lại ở việc phát triển mã nguồn mà còn bao gồm việc xây dựng một quy trình mạnh mẽ và hiệu quả để triển khai phần mềm lên các môi trường sản xuất. Quy trình CI/CD giúp đội ngũ phát triển duy trì và triển khai ứng dụng liên tục mà không gây gián đoạn cho các dịch vụ. Tuy nhiên, trong một môi trường phân tán và quy mô lớn như kiến trúc microservices, việc áp dụng CI/CD một cách hiệu quả đòi hỏi có một công cụ phù hợp như GitOps.
Em chọn đề tài này vì GitOps là một phương pháp tối ưu trong việc quản lý cấu hình, hạ tầng, và quy trình triển khai trong các hệ thống phức tạp. Hơn nữa, Eshop là một ứng dụng thương mại điện tử có tiềm năng phát triển lớn và việc tối ưu hóa quy trình phát triển, giảm thiểu rủi ro trong việc triển khai là rất cần thiết.
Mục tiêu của đề tài
Mục tiêu của đề tài là xây dựng và triển khai một quy trình CI/CD kết hợp với GitOps cho ứng dụng Eshop dựa trên kiến trúc Microservices. Cụ thể:
- Xây dựng quy trình tự động hóa việc kiểm thử và triển khai ứng dụng Eshop sử dụng GitOps.
- Tích hợp kiểm thử tự động và quét bảo mật giúp phát hiện lỗi và lỗ hổng bảo mật sớm, đảm bảo ứng dụng an toàn trước khi triển khai.
- Cung cấp giải pháp giúp tiết kiệm thời gian triển khai, giảm thiểu lỗi do con người và tăng cường tính bảo mật và ổn định cho ứng dụng.
- Hỗ trợ việc mở rộng ứng dụng dễ dàng thông qua mô hình Microservices và duy trì tính linh hoạt trong quá trình phát triển ứng dụng.
Cơ sở lý thuyết
1 CI/CD, GitOps và microservices
CI/CD là viết tắt của Continuous Integration (CI) và Continuous Delivery (CD). Có thể hiểu nó được kết hợp bởi quy trình Tích hợp liên tục và Phân phối liên tục.
CI/CD giúp tạo ra sản phẩm cuối cùng nhanh chóng bằng cách kết hợp công việc của mỗi cá nhân, nhằm đảm bảo chất lượng, tăng tốc độ phát triển, và giảm thiểu rủi ro trong quá trình triển khai.
Quy trình này được chia thành hai giai đoạn cốt lõi như đã nêu ở trên: Continuous Integration (CI) tập trung vào việc tích hợp code của các lập trình viên vào một nhánh chính của dự án một cách thường xuyên. Mỗi lần tích hợp đều đi kèm với các bước tự động hóa như:
- Build: Xây dựng ứng dụng từ mã nguồn để kiểm tra tính khả thi.
- Test: Chạy các bộ kiểm tra tự động (unit test, integration test) để phát hiện lỗi sớm.
- Linting: Kiểm tra chất lượng mã nguồn nhằm đảm bảo rằng code tuân thủ các tiêu chuẩn coding style.
Nhờ CI, các lỗi tiềm ẩn được phát hiện nhanh chóng, giúp giảm chi phí sửa lỗi và nâng cao chất lượng phần mềm.
Continuous Delivery (CI) là bước tiếp theo sau CI, nơi phần mềm đã được kiểm tra được chuẩn bị để phát hành. Quá trình này tập trung vào việc:
- Đóng gói (Packaging): Đóng gói ứng dụng dưới dạng artifact (như Docker image) sẵn sàng để triển khai.
- Triển khai (Deployment): Đưa phần mềm đến môi trường staging hoặc production một cách tự động hoặc bán tự động.
- Giám sát (Monitoring): Theo dõi trạng thái ứng dụng để đảm bảo rằng các phiên bản mới hoạt động ổn định.
Continuous Delivery đảm bảo rằng sản phẩm luôn sẵn sàng phát hành bất cứ khi nào cần thiết, giảm thiểu thời gian đưa ứng dụng ra thị trường.
2 GitOps và mối quan hệ với CI/CD
GitOps là một phương pháp tiếp cận triển khai ứng dụng dựa trên Git, kết hợp với CI/CD. Toàn bộ trạng thái mong muốn của hệ thống (cấu hình, ứng dụng, tài nguyên) được lưu trữ trong một kho Git. Các công cụ GitOps sẽ tự động đồng bộ hóa trạng thái thực tế với trạng thái mong muốn, đảm bảo:
- Quản lý phiên bản: Mọi thay đổi đều được theo dõi thông qua lịch sử commit.
- Triển khai an toàn: Triển khai ứng dụng thông qua các pull request hoặc merge request, giảm thiểu rủi ro.
- Khả năng phục hồi: Dễ dàng quay lại trạng thái trước đó nếu xảy ra lỗi.
GitOps kết hợp CI/CD giúp tự động hóa việc triển khai và quản lý hạ tầng, đặc biệt phù hợp với các hệ thống microservices, nơi các thành phần được triển khai độc lập nhưng cần phối hợp chặt chẽ.
3 CI/CD và Microservices
Microservices là kiến trúc phần mềm chia ứng dụng thành các dịch vụ nhỏ, độc lập, mỗi dịch vụ thực hiện một chức năng cụ thể. CI/CD hỗ trợ mạnh mẽ cho kiến trúc microservices nhờ:
- Pipeline độc lập: Mỗi service có thể có pipeline CI/CD riêng, đảm bảo các thay đổi chỉ ảnh hưởng đến một phần nhỏ của hệ thống.
- Tích hợp liên tục: Các service được kiểm tra khả năng tương tác với nhau trong môi trường staging trước khi phát hành.
- Triển khai nhanh: Mỗi service có thể được triển khai riêng biệt, giảm thời gian gián đoạn hệ thống.
Sự kết hợp giữa CI/CD, GitOps và microservices giúp tối ưu hóa quy trình phát triển và triển khai, từ đó cải thiện tốc độ và chất lượng của sản phẩm.
Phân tích và thiết kế hệ thống
Kiến trúc hệ thống tổng quan

Mô hình triển khai hệ thống được thiết kế nhằm áp dụng quy trình tích hợp CI/CD kết hợp GitOps, đảm bảo tính liên tục, tự động hóa và an toàn trong toàn bộ chu trình phát triển và triển khai ứng dụng eShop theo kiến trúc microservices. Mô hình này được chia thành các bước cụ thể như sau:
Phát triển mã nguồn
Quy trình bắt đầu từ việc nhà phát triển thực hiện các thay đổi mã nguồn và đẩy chúng lên kho mã nguồn GitLab. GitLab không chỉ đóng vai trò là nơi quản lý mã nguồn mà còn kích hoạt quy trình CI/CD tự động mỗi khi có merge request từ các sub-feature về feature cũng như từ feature về dev hoặc đưa lên cách branch khác như uat và prod. Việc tích hợp CI/CD tại đây đảm bảo rằng mọi thay đổi đều được kiểm tra và xử lý một cách tự động trước khi triển khai vào các môi trường kế tiếp.
Tạo Build Artifact
Pipeline CI/CD sẽ thực hiện quá trình build mã nguồn, chuyển đổi thành các tệp nhị phân hoặc file nén (Build Artifact). Đây là sản phẩm đầu ra quan trọng, sẵn sàng cho các bước triển khai tiếp theo.
Kiểm tra và phân tích chất lượng mã nguồn
Khi pipeline CI/CD được kích hoạt, mã nguồn sẽ được phân tích bằng công cụ SonarQube. Công cụ này giúp phát hiện các lỗi tiềm ẩn, vi phạm tiêu chuẩn coding, hoặc các vấn đề về bảo mật trong mã nguồn. Nếu mã nguồn không đáp ứng các tiêu chuẩn, pipeline sẽ dừng lại và gửi thông báo cho nhà phát triển để sửa lỗi. Điều này giúp đảm bảo rằng chỉ những mã nguồn chất lượng cao mới được tiếp tục xử lý.
Xây dựng container image
Sau khi vượt qua giai đoạn kiểm tra mã nguồn, mã sẽ được đóng gói thành các container image bằng công cụ Docker.
- Trivy được sử dụng để quét các container image này nhằm phát hiện các lỗ hổng bảo mật.
- Nếu không phát hiện vấn đề nghiêm trọng, các container image sẽ được đẩy lên Harbor, một hệ thống quản lý container registry, nơi lưu trữ và quản lý các phiên bản image một cách an toàn và có kiểm soát.
Quản lý cấu hình triển khai
Quá trình triển khai ứng dụng được quản lý thông qua Helm, công cụ giúp tổ chức và chuẩn hóa các biểu đồ triển khai (Helm Chart).
- Các biểu đồ Helm chứa cấu hình triển khai cho ứng dụng microservices trên môi trường Kubernetes.
- Mọi thay đổi cấu hình hoặc cập nhật sẽ được quản lý và đồng bộ chính xác thông qua kho Git.
Triển khai ứng dụng qua ArgoCD
- Một trong những điểm nổi bật của mô hình là việc sử dụng ArgoCD để triển khai ứng dụng theo mô hình GitOps.
- ArgoCD chịu trách nhiệm đồng bộ trạng thái giữa Git và các môi trường Kubernetes. Ứng dụng được triển khai lần lượt qua các môi trường:
– Dev: Môi trường phát triển, nơi ứng dụng được kiểm tra và thử nghiệm.
– UAT: Môi trường kiểm thử, nơi các tính năng được kiểm tra bởi đội ngũ
QA hoặc khách hàng.
– Prod: Môi trường sản xuất, nơi ứng dụng chính thức được đưa vào sử dụng. Ngoài ra tại đây còn triển khai ứng dụng theo chiến lượng green/blue để giảm thiểu lỗi cũng những giảm thiểu downtime.
Quản lý hạ tầng Hạ tầng triển khai được quản lý một cách tự động và linh hoạt thông qua các công cụ hiện đại:
- Terraform: Được sử dụng để thiết lập và quản lý hạ tầng trên cả môi trường Google Cloud và GKE On-Prem. Terraform đảm bảo rằng hạ tầng được định nghĩa bằng mã (Infrastructure as Code – IaC), giúp tái sử dụng và mở rộng dễ dàng.
- Ansible: Hỗ trợ tự động hóa việc cấu hình hệ thống, bao gồm Host Bastion và các môi trường triển khai. Ansible giúp giảm thiểu lỗi thủ công, tăng tính nhất quán và hiệu quả.
Giám sát và cảnh báo
Sau khi ứng dụng được triển khai, hệ thống giám sát được thiết lập để đảm bảo hoạt động ổn định và phát hiện kịp thời các sự cố:
- Prometheus: Thu thập dữ liệu hiệu năng từ các ứng dụng và môi trường Kubernetes, bao gồm số liệu về CPU, RAM, trạng thái container, và các chỉ số khác.
- Grafana: Hiển thị dữ liệu thu thập được qua các dashboard trực quan, giúp đội ngũ kỹ thuật dễ dàng theo dõi và phân tích.
- Các cảnh báo được tích hợp qua email hoặc Slack để thông báo khi hệ thống phát hiện lỗi hoặc sự cố hiệu năng.
Kiến trúc của eShop microservices



Thực hiện hệ thống




Kết quả
Trong quá trình triển khai dự án, chúng tôi đã hoàn thành tất cả các mục tiêu chính đã đề ra trong đề bài và kế hoạch dự án. Cụ thể như sau:
- Xây dựng toàn bộ hệ thống từ môi trường dev đến môi trường uat và prod: Đầu tiên, hệ thống môi trường phát triển (dev), kiểm thử (uat), và sản xuất (prod) đã được xây dựng và cấu hình đầy đủ, đảm bảo tính liên thông giữa các môi trường này. Các công cụ như Kubernetes, Docker, và Helm đã được sử dụng để triển khai các ứng dụng và dịch vụ microservices, cùng với cấu trúc mạng để đảm bảo ứng dụng hoạt động ổn định và hiệu quả.
- Hoàn thành luồng CI/CD devsecops tích hợp gitops cho ứng dụng eshop theo kiến trúc microservices: Luồng CI/CD DevSecOps được thiết lập và tích hợp chặt chẽ với GitOps để đảm bảo tự động hoá việc kiểm tra mã nguồn, bảo mật ứng dụng, triển khai liên tục và quản lý cấu hình. Quá trình kiểm thử bảo mật tự động (CI) đã giúp kiểm tra các lỗ hổng bảo mật của code, trong khi việc triển khai tự động và cấu hình hệ thống qua GitOps đảm bảo tính chính xác và nhất quán cho mọi môi trường.
- Thiết kế luồng hoạt động cho các team trong projects: Luồng làm việc cho các team trong dự án, bao gồm team phát triển (development), team kiểm thử (QA), và team vận hành (Ops), đã được thiết kế để tối ưu hóa quá trình phát triển, kiểm thử và triển khai ứng dụng.
- Xây dựng hệ thống giám sát sử dụng Prometheus, Grafana và Alert Manager: Để đảm bảo hoạt động ổn định của hệ thống, một giải pháp giám sát đã được triển khai bao gồm Prometheus để thu thập và lưu trữ các chỉ số, Grafana để trực quan hóa dữ liệu, và Alert Manager để thông báo khi có sự cố xảy ra. Hệ thống này giúp theo dõi hiệu suất của toàn bộ ứng dụng và dự báo các vấn đề sắp tới.
- Sử dụng thành công Ansible và Terraform trong quản lý hạ tầng: Để tự động hóa quá trình triển khai và quản lý hạ tầng trên Google Cloud, chúng tôi đã sử dụng Ansible và Terraform. Terraform được sử dụng để tạo và quản lý các tài nguyên hạ tầng, bao gồm các máy ảo (VMs), mạng, và các dịch vụ lưu trữ trên Google Cloud Platform (GCP). Ansible được sử dụng để cấu hình và tự động triển khai các phần mềm lên các máy ảo. Việc này giúp tối ưu hóa công việc, giảm thiểu lỗi do thao tác thủ công, đồng thời tăng tính nhất quán và khả năng tái sử dụng cấu hình hạ tầng.


