Xây dựng hệ thống Jenkins với hàng chục nghìn job

Kết quả hình ảnh cho Jenkins scalable
SPN là công ty top unicorn ở Silicon Valley, họ phát triển một communication tool tương tự như Skype, Slack. Tuy nhiên bằng cách mua lại một công ty về security là Perzoinc, họ đã tích hợp được thuật toán mã hóa của Perzoinc vào sản phẩm. Giúp tool này có độ bảo mật cực kì cao, được các doanh nghiệp tài chính, ngân hàng như HSBC, Citi Bank ưa chuộng và sử dụng

Để đảm bảo sản phẩm được release liên tục nhanh chóng, do đó công ty đã có kế hoạch xây dựng một hệ thống CICD sử dụng Jenkins. Tuy nhiên họ gặp phải nhiều challenging sau đây
  • Có 4 môi trường dev, qa, uat, prod, ngoài ra còn nhiều team như qa performance, mobile… Mỗi team muốn có một Jenkins riêng để sử dụng để tránh conflict 
  • Số lượng nhân viên công ty, outsource lên tới cả ngàn, số lượng job chạy tính ra cũng hàng chục ngàn, làm thế nào để Jenkins chạy ổn định
  • Không thể build Jenkins này theo cách manual, cần build tự động để đảm bảo provision infra một cách nhanh chóng, giảm thiểu human mistake
  • Cần monitor hệ thống Jenkins để đảm bảo performance, xử lý issue kịp thời
Các kĩ sư của SPN để tạo một project gọi là WarpDrive. Tên một loại động cơ trong phim khoa học viễn tưởng, có khả năng “kéo không gian” khiến phi thuyền có thể bay với vận tốc cực lớn.
Để giải quyết khả năng high availably and scale. Jenkins được build trên nền K8S thành các cluster. Mỗi team muốn có CICD pipeline riêng sẽ được tạo cluster riêng
Bằng các setting trong RBAC (Role base access control), mỗi member trong 1 team được cấp quyền nhất định như Admin, User, Mod
1 Jenkins cluster bao gồm 1 master node và nhiều minion, nơi các Jenkins agent được deploy
Khi job Jenkins start, Jenkins master sẽ launch 1 con Jenkins agent (1 pod trong k8s), Jenkins agent sẽ chạy job, sau khi hoàn thành agent sẽ tự động bị destroy. Jenkins agent này run dưới dạng container, docker file được tạo và build riêng cho Jenkins agent, image up lên Google Cloud Registry
Để đảm bảo Jenkins master có thể launch, destroy Jenkin agent. Các kĩ sư cài đặt 1 K8s jenkins plugin, config để Jenkins có thể sử dụng docker images ở trên.
Tương tự Jenkins master cũng được build thành image từ dockerfile và up lên Google Registry. Các plugin của Jenkins cũng không cài đặt bằng tay, mà được định nghĩa trong 1 file txt, khi build image thì các plugin được tải và cài đặt. Cách đóng gói Jenkins master, slave thành docker tạo ra sự cơ động, portable, reusable 
Điều quan trọng là việc build up và deploy Jenkins được thực hiện hoàn toàn bằng code, (Infra as Code), sử dụng các công cụ như DSL, Helm, Terraform
Nhờ provision infra tự động bằng code, SPN đã giảm thiểu được human mistake, deploy Jenkins rất nhanh chóng và có thể clone ra nhiều cluster khác nhau
Khi đã deploy thành công thì việc tiếp theo là monitoring, để biết họ dùng công nghệ gì để monitoring, đón xem phần tiếp theo

1 nhận xét:

Được tạo bởi Blogger.