Bạn sẽ cảm thấy ngạc nhiên khi Jenkins đứng đầu bảng về số lượng người sử dụng theo thống kê mới đây của Jetbrain và nhiều năm trước đó nữa, bạn cũng tự hỏi rằng sao họ không sử dụng Gitlab CI, Circle CI, Bitbucket pipelines, Github Actions, ArgoCD nhưng mọi chuyện đều có lý do của nó cả, hãy cùng 200Lab tìm hiểu nguyên nhân tại sao trong bài viết sau đây nhé.
1. Jenkins là gì ?
Jenkins là một giải pháp nguồn mở viết bằng Java cho phép bạn có thể thực hiện công việc CI/CD một cách tự động. Giải thích một cách dễ hiểu thì nó giúp bạn tự động hóa các giai đoạn phát triển phần mềm khác nhau như Build, Test và Deployment.
2. Jenkins được sử dụng để làm gì ?
Jenkins trở nên phổ biến bởi khả năng theo dõi và giám sát các hoạt động lặp đi lặp lại xuất hiện trong suốt quá trình phát triển dự án. Ví dụ: nếu nhóm của bạn đang thực hiện một dự án, Jenkins sẽ liên tục kiểm tra các bản Build của bạn và sớm cảnh báo cho bạn về bất kỳ sai sót nào trong quá trình này. Bên dưới đây sẽ mô tả chi tiết từng trường hợp
2.1 Triển khai CI/CD
Trong quá trình phát triển một tính năng mới hay chỉnh sửa lại tính năng cũ của một phần mềm với nhóm của mình thì chắc bạn sẽ không xa lạ gì với Test Case, được sử dụng trong quá trình kiểm thử trước khi code của bạn được deploy lên môi trường production.
Theo kinh nghiệm của cá nhân mình thì trước khi code của bạn đi tới được Production, nó sẽ phải bước qua các giai đoạn kiểm tra sau , giả sử bạn đang được giao nhiệm vụ chỉnh sửa 1 API nào đó có sẵn:
- Giai đoạn 1 - Developer Self-Test: Developer tự test trên máy cá nhân của mình trước khi push những thay đổi này lên Repository (Github/Bitbucket, Gitlab, ...) còn gọi là Unit Testing.
- Giai đoạn 2 - Continuous Integration/Continuous Deployment: Sau khi code của bạn đã được push lên Git, và bạn tạo một Pull Request ( mong muốn merge vào branch chính ở repo), trước đó các Devops Engineer đã thiết lập một số tác vụ kiểm thử Pull Request này của bạn và chúng được thiết lập bằng Jenkins, cụ thể như sau:
+ Continuous Integration: Checkout code mới nhất của bạn và thực hiện build lại, kết quả của quá trình này có thể là 1 file Docker Image. Sau đó các Job kiểm tra cú pháp (syntax) để xem bạn có tuân thủ những quy định như đặt tên biến, ... Tiếp theo các Unit Test mà Tester viết sẽ được thực thi, cuối cùng là integration test. Chỉ cần failed một trong những bước trên bạn sẽ không được merge vào branch chính
+ Continuous Deployment: trong trường hợp đơn giản thì job Jenkins này chỉ cần thay thế docker image trên docker registry và môi trường production sẽ pull bản mới nhất này về và khởi động lại service.
2.2 Tự động hoá tác vụ với Pipeline
Mình nghĩ khi nhắc đến Pipeline bạn sẽ liên tưởng đến một chuỗi các công việc thực thi theo từng bước 1, mỗi bước sẽ có khả năng rẽ nhánh dựa trên kết quả đầu ra đúng/sai (thành công/thất bại). Và pipeline cũng được sử dụng trong quá trình CI/CD như đã nói ở bên trên, tuy nhiên phần này mình sẽ không đề cập đến CI/CD nữa mà sẽ nói đến các ứng dụng khác của Pipeline.
Bạn có thể sử dụng Pipeline vào những công việc của Data Engineer, miễn là các công việc ấy được thư thi tuần tự theo từng bước, ví dụ như:
- Cập nhật dữ liệu Top 10 bộ phim xu hướng (Trending) nhất trong tuần theo người dùng. Bạn hoàn toàn có thể tạo ra pipeline với các bước như sau:
+ Bước 1: Tính tổng lượt xem theo từng bộ phim
+ Bước 2: Apply công thức tính toán những bộ phim Trending
+ Bước 3: Lấy ra lịch sử xem phim của người dùng và tiến hành loại đi các bộ phim đã xem (mỗi người dùng sẽ nhìn thấy list trending khác nhau)
+ Bước 4: Cập nhật vào Database - Trích xuất dữ liệu từ Google Analytics theo ngày
+ Bước 1: Lấy danh sách các property cần lấy dữ liệu GA
+ Bước 2: Với mỗi Property gọi API tương ứng
+ Bước 3: Nếu kết quả trả ra bình thường cập nhật vào Database, nếu bị lỗi thì quay lại bước 2, do API của Google Analytics vẫn luôn có khả năng bị lỗi khi gọi, thiết lập cơ chế retry 3 lần trong Jenkins
+ Bước 4: Nếu bước 3 thành công gửi tin nhắn telegram thành công, nếu không gửi tin nhắn cảnh báo và chạy lại job này trong 30m nữa
3. Đặc điểm nổi bật của Jenkins
Như mọi người đã thấy Jenkins được bầu chọn là công cụ CI/CD sử dụng bởi nhiều developer nhất năm 2024, vì các lý do sau đây
3.1 Mã nguồn mở
Không phải trả phí rõ ràng là lý do chính khiến Jenkins thu hút rộng rãi. Nó hoàn toàn miễn phí nên bất kỳ tổ chức nào cũng có thể bắt đầu sử dụng nó bất kể hạn chế về ngân sách. Jenkins cũng rất dễ cài đặt, và được phát triển bằng ngôn ngữ Java, có nghĩa là nó có thể chạy trên hầu hết các thiết bị và hệ điều hành. Bạn chỉ cần đơn giản sử dụng một số câu lệnh docker là có thể chạy nó ở trên máy của mình
Pull về image Jenkins từ Docker hub và chạy câu lệnh docker run
docker pull jenkins
docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins
3.2 Hỗ trợ bởi cộng đồng đông đảo
Bởi vì nó là phần mềm mã nguồn mở và là công cụ CI/CD được sử dụng trong nhiều năm, Jenkins hiện có một cộng đồng mạnh mẽ đằng sau nó. Điều này củng cố sự phổ biến của Jenkins vì bạn rất dễ dàng tìm thấy các hướng dẫn triển khai cũng như là sửa lỗi
3.3 Kho Plugin đa dạng
Một trong những lợi thế rất mạnh của Jenkins là danh mục plugin khổng lồ có thể mở rộng chức năng của nó. Theo số liệu mới nhất, Jenkins có hơn 1900 plugin do cộng đồng phát triển cho phép mọi tổ chức điều chỉnh hoặc nâng cao chức năng cơ bản để phù hợp với môi trường DevOps của họ. Ví dụ như: Jenkins -Slack, Jenkins - Telegram, ...
3.4 Khả năng Distributed
Cơ chế distributed trong Jenkins, thường được gọi là "Jenkins distributed build" hoặc "Jenkins master-slave architecture," cho phép Jenkins phân phối tải công việc (builds, tests, deployments) giữa nhiều máy tính (nodes). Điều này giúp cải thiện hiệu suất, khả năng mở rộng và độ tin cậy của hệ thống CI/CD
4. Kết luận
Bạn thấy đấy Jenkins không phải là một công cụ mới nhưng là có bề dày lịch sử rất lâu đời nên số lượng người sử dụng đông là việc hiển nhiên, chúng ta sẽ cũng tìm hiểu về các công cụ CI/CD khác trong những bài viết sau
Các bài viết liên quan:
Bài viết liên quan
Grafana Loki là gì? So sánh Loki và Elasticsearch
Nov 16, 2024 • 6 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read
Two-Factor Authentication (2FA) là gì? Vì sao chỉ Mật khẩu thôi là chưa đủ?
Nov 13, 2024 • 7 min read
ELK là gì? So sánh hiệu suất giữa ELK và PLG
Nov 06, 2024 • 9 min read
Docker Best Practices: Tối ưu Dung lượng Docker Image
Oct 30, 2024 • 8 min read
SQL Injection là gì? Những cách phòng ngừa SQL Injection
Oct 25, 2024 • 10 min read