Jenkins là gì? Mô hình kiểm tra code tự động nổi tiếng
Jenkins là gì?
Jenkins mang đến một cách đơn giản hơn trong việc thiết lập môi trường tích hợp hoặc phân phối liên tục cho gần như tất cả các ngôn ngữ và kho mã nguồn nhờ vào việc sử dụng các pipeline hay tự động hóa các tác vụ phát triển thông thường khác. Jenkins không những không loại bỏ nhu cầu tạo script cho từng bước riêng lẻ, mà còn cung cấp thêm khả năng tích hợp nhanh hơn và mạnh mẽ hơn toàn bộ chuỗi công cụ xây dựng, kiểm tra và triển khai dễ dàng hơn là bạn tự xây dựng hoàn toàn.
"Đừng phá vỡ công trình xây dựng hàng đêm" là một quy tắc khá phổ biến trong giới phát triển phần mềm khi mà mỗi sáng họ lại phải gửi một phiên bản phần mềm hoàn toàn mới mà họ vẫn thực hiện mỗi ngày cho các tester. Trước khi có Jenkins, điều tốt nhất mà một developer có thể làm để tránh cho các nỗ lực hàng đêm bị phá hủy là cố gắng thực hiện và kiểm tra thật cẩn thận trên máy tính cục bộ trước khi chuyển giao code. Nhưng như vậy cũng có nghĩa là bạn sẽ phải tự mình thử nghiệm các thay đổi mà không có ai khác trao đổi và cam kết. Không có gì đảm bảo chắc chắn rằng nỗ lực hàng đêm sẽ hoàn thiện chỉ trong một lần duy nhất.
Và chúng ta có Jenkins – ban đầu là Hudson – để giải quyết tình huống này.
Hudson và Jenkins
Năm 2004, Kohsuke Kawaguchi - một nhà phát triển Java tại Sun vào một ngày cảm thấy mệt mỏi vì các bản dựng của mình thường xuyên bị phá bỏ và muốn tìm cách biết, trước khi đưa code vào kho lưu trữ, liệu code có hoạt động hay không. Vì vậy, Kawaguchi đã xây dựng một hệ thống server tự động hóa cho chính server và cho Java cho phép kiểm tra tình trạng code trước khi đưa vào kho, được gọi là Hudson. Hudson trở nên phổ biến tại Sun và lan sang các công ty khác dưới dạng nguồn mở.
Đến năm 2011, tranh chấp giữa Oracle (sau khi mua lại Sun) và cộng đồng nguồn mở Hudson độc lập đã dẫn đến một hướng khác với việc thay đổi tên thành Jenkins. Cả Hudson và Jenkins đều tiếp tục tồn tại, mặc dù Jenkins có phần phổ biến hơn. Năm 2014 Kawaguchi trở thành CTO của CloudBees, một công ty cung cấp các sản phẩm dựa trên nền tảng Jenkins.
Mô hình tự động Jenkins
Hiện nay Jenkins là máy chủ nguồn mở tự động hàng đầu với khoảng 1.400 plugin hỗ trợ tự động hóa tất cả các tác vụ phát triển. Vấn đề mà ban đầu Kawaguchi cố gắng khắc phục, tích hợp và phân phối mã Java liên tục (nghĩa là xây dựng dự án, chạy thử nghiệm, phân tích mã tĩnh và triển khai) chỉ là một trong số rất nhiều quy trình chúng ta có thể tự động hóa bằng Jenkins. 1.400 plugin này bao gồm 5 lĩnh vực: nền tảng, UI - giao diện người dùng, quản trị, quản lý mã nguồn và nhiều nhất là quản lý xây dựng, kiến trúc.
Một số khái niệm cốt lõi khác của Jenkins
Jenkins là công cụ được tích hợp liên tục và phân phối liên tục. Sau đây là một số khái niệm cốt lõi trong Jenkins:
1. Jenkins Controller
Jenkins Controller là máy chủ chính của Jenkins. Nó chịu trách nhiệm quản lý toàn bộ hệ thống Jenkins, bao gồm việc lập lịch các công việc, giám sát Jenkins Agents và hiển thị giao diện người dùng cho người dùng Jenkins. Jenkins Controller cũng chứa các thông tin cấu hình và lưu trữ các kết quả xây dựng.
2. Jenkins Agent
Jenkins Agent là các máy chủ phụ được Jenkins Controller chỉ đạo để thực hiện các công việc. Các Agent có thể chạy trên các máy chủ vật lý, máy ảo hoặc trong container. Jenkins Controller sẽ phân phối các công việc tới các Agent, và các Agent sẽ thực hiện các công việc đó rồi báo cáo lại kết quả cho Controller.
3. Jenkins Node
Trong Jenkins, một Node là một máy chủ cụ thể trong kiến trúc Jenkins. Node có thể là một Jenkins Controller hoặc một Jenkins Agent. Node là nơi các công việc được thực hiện. Jenkins Controller phân phối các công việc tới các Node phù hợp dựa trên cấu hình và khả năng của từng Node.
4. Jenkins Project
Jenkins Project là một định nghĩa của một quy trình xây dựng phần mềm. Mỗi Project chứa các cấu hình và các bước cần thiết để xây dựng, kiểm tra, triển khai phần mềm. Các loại Project phổ biến bao gồm Freestyle Project, Maven Project, và Pipeline Project.
5. Jenkins Plugins
Jenkins Plugins là các phần mở rộng có thể cài đặt vào Jenkins để bổ sung hoặc mở rộng chức năng của Jenkins. Plugins có thể cung cấp hỗ trợ cho các hệ thống kiểm soát phiên bản như Git, Subversion, hệ thống xây dựng, thông báo và nhiều tính năng khác. Plugins đóng vai trò quan trọng trong việc tùy chỉnh và mở rộng khả năng của Jenkins để phù hợp với nhu cầu cụ thể của các dự án.
6. Jenkins Pipeline
Jenkins Pipeline là một tính năng mạnh mẽ của Jenkins cho phép định nghĩa các quy trình CI/CD bằng mã. Pipeline sử dụng một ngôn ngữ kịch bản gọi là Groovy để viết các script định nghĩa các bước của quy trình xây dựng, kiểm tra, và triển khai phần mềm. Pipeline có thể được chia thành hai loại chính đó là: Declarative Pipeline: Được viết theo cú pháp định nghĩa rõ ràng, dễ đọc, dễ viết và duy trì. Scripted Pipeline: Được viết bằng Groovy và có tính linh hoạt cao hơn nhưng cũng phức tạp hơn.
Jenkins hoạt động như thế nào?
Jenkins được cung cấp như các gói lưu trữ Java 8 WAR và các gói cài đặt cho các hệ điều hành phổ biến, dưới dạng gói Homebrew, hình ảnh Docker và mã nguồn. Mã nguồn chủ yếu là Java, gồm một vài tệp Groovy, Ruby và Antlr.
Bạn có thể chạy độc lập Jenkins WAR hoặc dưới dạng một servlet trong máy chủ ứng dụng Java như Tomcat. Trong cả hai trường hợp, Jenkins sẽ tạo một giao diện người dùng web và chấp nhận các cuộc gọi đến API REST.
Khi bạn chạy Jenkins lần đầu tiên, chương trình sẽ tạo một tài khoản quản trị với mật khẩu ngẫu nhiên khá dài, bạn có thể patse mật khẩu này vào webpage ban đầu để unlock trình cài đặt.
Kiến trúc của Jenkins
Kiến trúc của Jenkins bao gồm nhiều thành phần và mô-đun khác nhau, giúp thực hiện các quy trình tích hợp và triển khai tự động hóa một cách hiệu quả.
Các nhà phát triển cam kết thay đổi mã nguồn, được lưu trữ trong kho lưu trữ. Máy chủ CI Jenkins kiểm tra kho lưu trữ theo các khoảng thời gian đều đặn và kéo bất kỳ mã mới nào có sẵn. Máy chủ Build xây dựng mã thành một tệp thực thi. Trong trường hợp xây dựng thất bại, phản hồi sẽ được gửi đến các nhà phát triển. Jenkins triển khai ứng dụng đã xây dựng lên máy chủ thử nghiệm.
Nếu thử nghiệm thất bại, các nhà phát triển sẽ được thông báo. Nếu mã không có lỗi, ứng dụng đã được thử nghiệm sẽ được triển khai trên máy chủ sản xuất. Các tệp có thể chứa mã khác nhau và rất lớn, đòi hỏi nhiều lần xây dựng. Tuy nhiên, một máy chủ Jenkins đơn lẻ không thể xử lý nhiều tệp và nhiều lần xây dựng cùng lúc; để làm được điều đó, cần có kiến trúc Jenkins phân tán.
Ưu, nhược điểm của Jenkins
Jenkins sở hữu các ưu và nhược điểm sau đây:
Ưu điểm
- Mã nguồn mở và miễn phí: Jenkins là một công cụ mã nguồn mở, có nghĩa là nó miễn phí và có một cộng đồng người dùng và phát triển mạnh mẽ hỗ trợ và cải tiến.
- Tích hợp đa nền tảng: Công cụ này có thể chạy trên nhiều hệ điều hành khác nhau như Windows, macOS, và Linux.
- Hỗ trợ Plugin phong phú: Có hơn 1.000 plugin có sẵn cho Jenkins, giúp tích hợp với hầu hết các công cụ phát triển phần mềm, từ các hệ thống kiểm soát phiên bản đến các nền tảng triển khai.
- Cộng đồng và hỗ trợ mạnh mẽ: Với một cộng đồng lớn, Jenkins có nhiều tài liệu, diễn đàn, và nhóm hỗ trợ. Bạn dễ dàng tìm thấy giải pháp cho các vấn đề phổ biến.
- Tích hợp dễ dàng với các công cụ khác: Jenkins có thể dễ dàng tích hợp với nhiều công cụ khác như Git, Maven, Docker, và Kubernetes, giúp quản lý các quy trình CI/CD hiệu quả hơn.
Nhược điểm
- Giao diện phức tạp: Giao diện người dùng của Jenkins có thể phức tạp và không thân thiện, đặc biệt đối với những người mới bắt đầu.
- Khó khăn trong quản lý plugin: Mặc dù có nhiều plugin hỗ trợ, việc quản lý và duy trì các plugin này có thể trở nên phức tạp và gây xung đột.
- Cấu hình phức tạp: Thiết lập và cấu hình Jenkins lần đầu có thể phức tạp và đòi hỏi kiến thức kỹ thuật sâu
- Hiệu suất và tài nguyên: Jenkins có thể tiêu tốn nhiều tài nguyên hệ thống, đặc biệt khi xử lý nhiều tác vụ cùng một lúc. Từ đó có thể gây ra các vấn đề về hiệu suất.
- Khả năng mở rộng hạn chế: Mặc dù Jenkins có thể mở rộng bằng các plugin và nút (nodes), việc quản lý một môi trường Jenkins lớn có thể trở nên phức tạp và đòi hỏi nhiều công sức.
- Bảo mật: Do đây là một công cụ mã nguồn mở và được sử dụng rộng rãi, nó cũng trở thành mục tiêu cho các cuộc tấn công. Việc duy trì bảo mật đòi hỏi phải cập nhật thường xuyên và cấu hình chính xác.
Các plugin trong Jenkins
Sau khi cài đặt, Jenkins cho phép bạn hoặc là chọn danh sách plugin mặc định hoặc là chọn plugin của riêng mình.
Khi bạn đã chọn bộ plugin ban đầu của mình, hãy nhấp vào nút Cài đặt và Jenkins sẽ thêm chúng vào.
Màn hình chính của Jenkins hiển thị các build queue hiện tại, trạng thái Executor, cung cấp các liên kết để tạo các mục mới (công việc), quản lý người dùng, xem lịch sử xây dựng, quản lý Jenkins, chế độ xem tùy chỉnh và quản lý thông tin đăng nhập.
Một mục Jenkins mới có thể là bất kỳ kiểu công việc nào trong sáu loại cộng thêm một thư mục để sắp xếp các mục bên trong.
Có 18 thao tác bạn có thể sử dụng trên trang Manage Jenkins, bao gồm tùy chọn mở giao diện dòng lệnh. Tuy nhiên, bạn cũng có thể cân nhắc các pipeline - các quy trình công việc nâng cao được xác định bởi các script.
Hướng dẫn tải và cài đặt Jenkins
Sau đây là các bước để tải và cài đặt Jenkins chi tiết:
Bước 1: Cài đặt Java
Jenkins yêu cầu Java để chạy. Hãy cài đặt Java Development Kit (JDK) nếu bạn chưa có. Mở terminal và chạy lệnh sau để cập nhật danh sách gói và cài đặt OpenJDK-> kiểm tra phiên bản java đã cài đặt.
Bước 2: Thêm khóa và nguồn của Jenkins vào hệ thống
Jenkins yêu cầu bạn thêm khóa của nó và thêm nguồn vào danh sách các nguồn của hệ thống.
Bước 3: Cài đặt Jenkins
Đầu tiên phải cập nhật danh sách gói một lần nữa, sau đó cài đặt Jenkins
Bước 4: Khởi động Jenkins
Sau khi cài đặt, hãy khởi động dịch vụ Jenkins. Cần đảm bảo Jenkins tự động khởi động mỗi khi hệ thống khởi động.
Bước 5: Mở cổng 8080
Mặc định Jenkins sẽ chạy trên cổng 8080. Bạn cần mở cổng này trên tường lửa để có thể truy cập từ trình duyệt.
Bước 6: Thiết lập Jenkins lần đầu
Mở trình duyệt và truy cập Jenkins. Bạn sẽ thấy một trang yêu cầu bạn nhập mật khẩu ban đầu. Mở terminal và lấy mật khẩu -> Dán mật khẩu vào trình duyệt và tiếp tục -> Chọn "Install suggested plugins" để cài đặt các plugin mặc định. Bạn cũng có thể chọn plugin tùy chỉnh theo nhu cầu -> Tạo tài khoản quản trị viên đầu tiên và tiếp tục cấu hình Jenkins.
Theo BizFly Cloud
.