Series Jenkins #1: Nỗi ám ảnh mang tên "Deploy tay" và Vị cứu tinh Jenkins
Chào anh em! Chắc hẳn ở đây ai làm dev cũng từng trải qua cái cảm giác "tim đập chân run" mỗi khi đến giờ release sản phẩm.
Hãy tưởng tượng bạn vừa code xong một API cực xịn bằng Node.js hay Golang cho hệ thống Backend. Chạy ở máy local (máy cá nhân) thì mượt mà vô cùng. Boss bảo: "Code ngon rồi, đưa lên server thật đi em!".
Và thế là quy trình "Deploy tay" bắt đầu:
- Nén code lại thành file
.zip. - Dùng FileZilla hoặc WinSCP hì hục đẩy file lên server.
- SSH vào server, giải nén file.
- Chạy lệnh tắt server cũ (
pm2 stophoặcsystemctl stop). - Gõ lệnh cài thư viện (
npm installhoặcgo mod tidy). - Bật lại server.
- Ngồi cầu nguyện cho nó không lỗi.
Nhưng đời không như mơ. Đôi khi bạn quên copy một file .env, hoặc máy bạn dùng Node.js bản 18 nhưng server lại cài bản 14. Bùm! Hệ thống sập. Khách hàng gọi réo rắt. Bạn cuống cuồng sửa trực tiếp trên server (hot-fix) trong sự hoảng loạn.
Đó là lúc chúng ta cần một khái niệm mang tên CI/CD và một "bác quản gia" tên là Jenkins.
1. CI/CD là gì? (Nói theo ngôn ngữ loài người)
Trước khi nói về Jenkins, chúng ta phải hiểu cái triết lý đã sinh ra nó: CI/CD. Đừng để những thuật ngữ học thuật làm bạn rối, nó thực chất rất đơn giản.
- CI (Continuous Integration - Tích hợp liên tục): Thay vì mỗi người code một góc, cuối tháng mới gom lại (và thường là conflict nát bét), CI khuyến khích anh em đẩy code lên kho chứa (như GitHub/GitLab) liên tục mỗi ngày. Mỗi lần bạn đẩy code lên, sẽ có một "con robot" tự động kéo code về, kiểm tra xem code có lỗi cú pháp không, có vượt qua được các bài test (Unit Test) không. Nếu lỗi, nó sẽ báo ngay cho bạn sửa.
- CD (Continuous Delivery / Continuous Deployment - Chuyển giao/Triển khai liên tục): Sau khi code đã được CI kiểm tra là "ngon lành", phần CD sẽ lo việc tự động hóa quá trình đẩy cái đống code đó lên môi trường Testing để QA test, hoặc đẩy thẳng lên môi trường Production cho người dùng xài. Không cần giải nén, không cần SSH thủ công nữa.
2. Vậy Jenkins là ai?
Jenkins là một phần mềm mã nguồn mở cực kỳ nổi tiếng, đóng vai trò chính là "con robot" mà chúng ta vừa nhắc ở trên.
Nếu để ý, bạn sẽ thấy logo của Jenkins là một bác quản gia già mặc vest, đeo nơ. Tại sao lại là quản gia? Vì nhiệm vụ của Jenkins là phục vụ bạn tận răng:
- Bạn vừa commit code? Bác quản gia tự đi lấy code về.
- Bạn muốn test code? Bác tự gõ lệnh chạy test.
- Bạn muốn build ra file thực thi hoặc Docker Image? Bác tự làm.
- Bạn muốn quăng nó lên server? Bác tự SSH vào server làm thay bạn luôn.
Tại sao Jenkins lại được giới công nghệ ưa chuộng đến vậy?
- Miễn phí và Open Source: Nó hoàn toàn miễn phí, cộng đồng hỗ trợ khổng lồ.
- Plugin "bạt ngàn": Jenkins sống nhờ plugin. Bạn muốn Jenkins kết nối với GitHub? Có plugin. Muốn gửi thông báo về Slack/Telegram khi deploy thành công? Có plugin. Muốn tích hợp với Docker, Kubernetes? Đều có plugin hết. Nó giống như một bộ Lego vậy.
- Mạnh mẽ và linh hoạt: Dù dự án của bạn là một web app nhỏ hay một hệ thống Microservices phức tạp, Jenkins đều có thể "cân" được nhờ khả năng tùy biến sâu bằng Script.
3. Tóm lại
Nếu coi việc viết code là trồng lúa, thì CI/CD chính là cái máy gặt đập liên hợp tự động hóa từ khâu cắt lúa, tuốt hạt cho đến đóng bao. Và Jenkins chính là người tài xế lái cái máy đó.
Khi bạn nắm vững Jenkins, bạn không chỉ tiết kiệm được hàng trăm giờ đồng hồ ngồi deploy tay, mà còn loại bỏ hoàn toàn "yếu tố con người" (human error) trong quá trình vận hành phần mềm. Bạn sẽ code tự tin hơn, ngủ ngon hơn.
Ở Bài 2, chúng ta sẽ bắt tay vào việc "thuê" bác quản gia này về nhà bằng cách cài đặt Jenkins và tìm hiểu xem bên trong bộ não của bác ấy hoạt động như thế nào nhé! Hẹn gặp lại anh em!
All rights reserved