October 22, 2021

Jenkins X – công cụ thuần CI/CD trên cloud cho Kubernetes (K8S)

Điểm qua một tí về DevOps, một thuật ngữ mà những năm gần đây được nổi lên ví như một lĩnh vực về nghề IT mới. Vậy DevOps là gì?
DevOps (Development – Operations) là một thuật ngữ để chỉ một tập hợp các hành động trong đó nhấn mạnh sự hợp tác và trao đổi thông tin của các lập trình viên (Developer) và chuyên viên hệ thống (System admin) khi cùng làm việc để tự động hóa quá trình chuyển giao sản phẩm phần mềm và thay đổi kiến trúc hệ thống. Điều này nhằm thiết lập một văn hóa và môi trường nơi mà việc build (biên dịch phần mềm), kiểm tra, và phát hành phần mềm có thể xảy ra nhanh chóng, thường xuyên, và đáng tin cậy hơn.

Vậy câu hỏi đặt ra là làm sau DevOps có thể tạo thành một môi trường văn hóa kết nối giữa việc build, test và release sản phẩm tin cậy và nhanh chóng? Chắc chắn rằng sẽ có một “tay” nào đó hỗ trợ đắc lực cho việc này. Vâng “tay” đó chính là CI/CD Pipeline (Continuous Integration – Continuous Delivery). Nhiều người thường nói về DevOps, nhưng ít ai biết rằng cái lõi của nó đó là một “tay” vô cùng đắc hỗ trợ trợ xây dựng văn hóa kết nối cho developer.

Một cách hiểu đơn giản CI/CD Pipeline là một tool để tạo cầu nối giữa những team tham gia vào quá trình phát triển sản phẩm (build, test, đóng gói, staging, production). Nó là một hướng dễ dàng và nhanh chóng nhất để phát triển và đóng gói sản phẩm. Trong khi DevOps tập trung vào việc thiết lập văn hóa, CI/CD tập trung vào quá trình và các công cụ cần thiết để giúp các nhóm thích ứng với một nền văn hóa diễn ra liên tục.

CI/CD pipeline là một tập hợp nhiều công cụ để thiết lập “đường ống” liên tục đó. Chúng ta có thể tham khảo một vài mô hình CI/CD dưới đây để xem các công cụ phổ biến là gì nhé.

Mô hình 1:

Mô hình 2:

—————————————————————————–

Mô hình 3:

Như trên 3 mô hình tham khảo, chúng ta đều thấy sự xuất hiện của công cụ với tên là Jenkins. Nó là một tool dường như hiện diện trong đại đa số các hệ thống CI/CD.
Jenkins là một ứng dụng mã nguồn mở có thể xem là hàng đầu thế giới hiện nay trong việc xây dựng hệ thống CI/CD pipeline. Nó nổi tiếng chắc có lý do để nó nổi tiếng 🙂 Jenkins có một hệ thống Plugins mạnh mẽ, đa dạng, được update thường xuyên. Bên cạnh đó nó cũng dễ dàng cài đặt và vận hành đơn giản thông qua web UI. Nó chạy trên nhiều hệ thống Container Orchestrators: Openshift, Docker Warm, Kubernetes (K8S), Apache Mesos,…

Tuy nhiên, bài viết này không dừng ở Jenkins mà mục tiêu mình muốn nói đến đó là Jenkins X. Nghe cũng giống nhỉ, chỉ khác nhau là thêm X thôi 🙂
Jenkins X là một sub-project của Jenkins. Chức năng hoàn toàn giống với Jenkins, tuy nhiên đi theo một hướng mới đó là native cloud – định hướng CI/CD pipeline trên nền tảng Cloud. Nó sinh ra không phải thay thế Jenkins mà được xây dựng với khái niệm thuần CI/CD trên nền tảng Cloud chạy trên Kubernetes. Khi cài đặt Jenkins X, chúng ta đã sẵn sàng có một hệ thống CI/CD pipeline đúng nghĩa, không cần cài đặt các ứng nào thêm, tất cả đều được tích hợp (helm, jenkin, nexus, monocular, chartmuseum, Docker Registry,…). Tuy nhiên, về phần Docker Registry, hiện tại chỉ hỗ trợ cho Github…nhưng không sao, đã là định hướng là native cloud thì coming soon sẽ sớm được hỗ trợ tất cả:Google Container Registry, Azure Container Registry or Amazon Elastic Container Registry…vốn đang nỗi tiếng trong giới public cloud 🙂

Một số đặc điểm của Jenkins X:

  • Giải pháp thuần CI/CD trên K8S setup trên Cloud
  • Tự động cài đặt, cấu hình, upgrade jenkins trên hệ thống + tích hợp thêm các apps: helm, neux, monocular, trên K8S.
  • Auto CI/CD pipeline ứng dụng trên Kubernetes:
    • Docker images
    • Helm chart
    • Pipeline
  • Quản lý stage:
    • Testing
    • Staging
    • Production
  • Dễ dàng cho team developers xác định nhanh vấn đề (lỗi, bug,..)

Các tool đi kèm hỗ trợ đắc lực trong việc triển khai pipeline khi setup jenkins X:

  • Jenkins—provides both CI and CD automation, cloud native and make use of Kubernetes concepts: storage and scaling for example.
  • Nexus—acts as a dependency cache for Nodejs and Java applications to dramatically improve build times.
  • Docker Registry—an in cluster docker registry where our pipelines push application images, we will soon switch to using native cloud provider registries such as Google Container Registry, Azure Container Registry or Amazon Elastic Container Registry.
  • Chartmuseum—a registry for publishing Helm charts
  • Monocular—a UI used for discovering and running Helm charts.

Mình cũng xin chia sẽ thêm về Table of DevOps hiện đang hot về lĩnh vực CI/CD, các ban có thể hình dung được các tool để định hướng nghề nghiệp của mình theo đuổi.

https://digital.ai/periodic-table-of-devops-tools

Trong phạm vi bài viết này, mình chủ yếu nói về lý thuyết đơn thuần của jenkins X. Tiếp theo, phần sau mình sẽ có bài viết về demo setup và triển khai CI/CD Pipeline với Jenkins X trên môi trường GKE (Google Kubernetes Engine).

—————Thank you và hẹn gặp lại các bạn trong bài viết tiếp theo về Jenkins X————-

Pham Van Tuyen

Anh Tuyen Pham là Tổng giám đốc của Cloud Ace Việt Nam và là GDG Cloud HCM Chapter Lead. Anh là diễn giả quen thuộc tại các sự kiện do Google tổ chức tại Việt Nam như Kubernetes Vietnam, Google Cloud Next Extended. Anh đã có các chứng chỉ của Google Cloud như Google Cloud Architect và Data Engineer.

View all posts by Pham Van Tuyen →