Trong thế giới phát triển phần mềm hiện đại, việc tự động hóa đã trở thành một yếuak tố then chốt quyết định tốc độ và chất lượng sản phẩm. Jenkins, một công cụ mã nguồn mở hàng đầu, chính là chìa khóa cho bài toán Tích hợp liên tục (Continuous Integration – CI). Nó giúp tự động hóa các giai đoạn từ build, test đến triển khai, giảm thiểu sai sót do con người và tăng hiệu suất cho đội ngũ phát triển. Tuy nhiên, việc quản lý quy trình phát triển theo cách truyền thống thường gặp nhiều khó khăn, tốn thời gian và dễ phát sinh lỗi. Bài viết này sẽ hướng dẫn bạn cách cài đặt Jenkins trên CentOS 7, một hệ điều hành máy chủ ổn định và mạnh mẽ. Chúng ta sẽ cùng nhau đi qua từng bước, từ chuẩn bị môi trường, cài đặt Java, cấu hình Jenkins cho đến các phương pháp bảo trì hiệu quả nhất.

Trước khi bắt đầu cài đặt Jenkins, việc đảm bảo hệ thống của bạn đáp ứng các yêu cầu tối thiểu là vô cùng quan trọng. Điều này giúp Jenkins hoạt động ổn định và hiệu quả, tránh các sự cố không đáng có trong quá trình vận hành. Một môi trường được chuẩn bị kỹ lưỡng là nền tảng vững chắc cho một hệ thống CI/CD mạnh mẽ sau này.
Phần cứng và phần mềm cần thiết
Để Jenkins có thể chạy mượt mà, bạn cần một cấu hình phần cứng tối thiểu. Đối với một hệ thống nhỏ hoặc dùng cho mục đích học tập, bạn cần ít nhất một CPU, 2GB RAM và khoảng 50GB dung lượng ổ đĩa trống. Tuy nhiên, để đáp ứng nhu cầu của các dự án lớn hơn với nhiều job chạy song song, cấu hình đề xuất là từ 2-4 CPU, 4-8GB RAM trở lên và ổ đĩa SSD để tăng tốc độ truy xuất dữ liệu. Về phần mềm, bạn cần một hệ điều hành CentOS 7 đã được cài đặt và cập nhật phiên bản mới nhất. Các gói phần mềm cơ bản như `wget`, `firewalld` cũng nên được cài đặt sẵn sàng.
Các bước chuẩn bị môi trường
Đầu tiên, hãy cập nhật toàn bộ hệ thống CentOS 7 của bạn lên phiên bản mới nhất. Bạn có thể thực hiện việc này bằng cách chạy lệnh `sudo yum update -y` trong terminal. Việc cập nhật đảm bảo rằng bạn có các bản vá bảo mật và phiên bản phần mềm ổn định nhất. Tiếp theo, Jenkins mặc định hoạt động trên cổng 8080. Do đó, bạn cần cấu hình tường lửa để cho phép truy cập vào cổng này. Sử dụng các lệnh `sudo firewall-cmd –permanent –zone=public –add-port=8080/tcp` và `sudo firewall-cmd –reload` để mở cổng. Cuối cùng, hãy chắc chắn rằng máy chủ của bạn có kết nối mạng ổn định và bạn đang sử dụng tài khoản có quyền root hoặc `sudo` để thực hiện các lệnh cài đặt một cách suôn sẻ.
-(1).png)
Jenkins là một ứng dụng được viết bằng Java, vì vậy việc cài đặt Java Development Kit (JDK) là yêu cầu bắt buộc để nó có thể hoạt động. Việc lựa chọn và cài đặt đúng phiên bản Java không chỉ đảm bảo Jenkins chạy được mà còn ảnh hưởng đến hiệu suất và tính ổn định của toàn bộ hệ thống tích hợp liên tục của bạn. Đây là bước nền tảng không thể thiếu trong quy trình cài đặt.
Lựa chọn phiên bản Java phù hợp với Jenkins
Jenkins hỗ trợ nhiều phiên bản Java khác nhau, bao gồm cả OpenJDK và Oracle JDK. Hiện tại, các phiên bản Java được khuyến nghị và hỗ trợ rộng rãi là Java 8 và Java 11. OpenJDK là một lựa chọn phổ biến và hoàn toàn miễn phí, được cộng đồng hỗ trợ mạnh mẽ và có sẵn trong các kho lưu trữ mặc định của CentOS 7. Đối với hầu hết các trường hợp, sử dụng OpenJDK 8 hoặc 11 là đủ và đảm bảo tương thích tốt với các plugin phổ biến của Jenkins. Trong bài hướng dẫn này, chúng ta sẽ tiến hành cài đặt OpenJDK 8, một phiên bản đã được kiểm chứng về độ ổn định và hiệu năng.
Hướng dẫn cài đặt Java trên CentOS 7
Để cài đặt OpenJDK 8 trên CentOS 7, bạn chỉ cần mở terminal và thực thi câu lệnh `sudo yum install java-1.8.0-openjdk-devel -y`. Lệnh này sẽ tự động tải về và cài đặt gói JDK cần thiết từ kho lưu trữ của CentOS. Sau khi quá trình cài đặt hoàn tất, bạn có thể kiểm tra lại phiên bản Java đã được cài đặt thành công hay chưa bằng lệnh `java -version`. Kết quả trả về sẽ hiển thị thông tin chi tiết về phiên bản OpenJDK đang chạy trên hệ thống của bạn. Mặc dù không phải lúc nào cũng bắt buộc, việc thiết lập biến môi trường JAVA_HOME là một thực hành tốt. Nó giúp các ứng dụng khác và chính Jenkins dễ dàng xác định được đường dẫn cài đặt Java một cách chính xác.

Sau khi đã có môi trường Java sẵn sàng, bước tiếp theo là cài đặt Jenkins. Cách tốt nhất để cài đặt và quản lý Jenkins trên CentOS 7 là thông qua kho lưu trữ (repository) chính thức. Việc này không chỉ giúp quá trình cài đặt trở nên đơn giản hơn mà còn đảm bảo bạn dễ dàng nhận được các bản cập nhật và vá lỗi trong tương lai một cách tự động.
Thêm kho lưu trữ chính thức của Jenkins
Đầu tiên, chúng ta cần thêm key của Jenkins vào hệ thống để xác thực các gói cài đặt. Sử dụng lệnh `sudo rpm –import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key` để nhập key. Bước này đảm bảo rằng các gói bạn tải về từ kho lưu trữ là an toàn và chưa bị sửa đổi. Tiếp theo, hãy thêm kho lưu trữ của Jenkins vào danh sách quản lý của YUM. Chạy lệnh `sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo`. Lệnh này sẽ tải về file cấu hình repository và lưu vào đúng vị trí, giúp YUM biết nơi để tìm và tải về gói cài đặt Jenkins.
Cài đặt và chạy Jenkins
Khi kho lưu trữ đã được thêm, việc cài đặt Jenkins trở nên vô cùng đơn giản. Bạn chỉ cần chạy lệnh `sudo yum install jenkins -y`. Trình quản lý gói YUM sẽ tự động xử lý mọi thứ, từ việc tải gói Jenkins về cho đến cài đặt các gói phụ thuộc cần thiết. Sau khi cài đặt hoàn tất, bạn cần khởi động dịch vụ Jenkins. Sử dụng lệnh `sudo systemctl start jenkins` để bắt đầu chạy Jenkins. Để đảm bảo Jenkins tự động khởi động lại mỗi khi máy chủ được reboot, hãy chạy thêm lệnh `sudo systemctl enable jenkins`. Điều này rất quan trọng để duy trì hoạt động liên tục của hệ thống CI.

Khi Jenkins đã được cài đặt và dịch vụ đã khởi động, bước tiếp theo là truy cập giao diện web để hoàn tất quá trình cấu hình ban đầu. Đây là giai đoạn quan trọng để mở khóa Jenkins, cài đặt các plugin cần thiết và tạo tài khoản quản trị viên đầu tiên. Việc hoàn thành đúng các bước này sẽ giúp bạn có một hệ thống Jenkins sẵn sàng để sử dụng.
Khởi động Jenkins và truy cập giao diện web
Trước tiên, hãy kiểm tra trạng thái của dịch vụ Jenkins để chắc chắn rằng nó đang hoạt động ổn định. Bạn có thể dùng lệnh `sudo systemctl status jenkins`. Nếu dịch vụ đang chạy, bạn sẽ thấy trạng thái “active (running)”. Bây giờ, hãy mở một trình duyệt web trên máy tính của bạn và truy cập vào địa chỉ `http://dia_chi_ip_may_chu:8080` hoặc `http://localhost:8080` nếu bạn đang làm việc trực tiếp trên máy chủ. Màn hình đầu tiên bạn thấy sẽ là trang “Unlock Jenkins”, yêu cầu bạn nhập mật khẩu quản trị viên ban đầu.

Lấy mật khẩu mặc định và hoàn tất cài đặt ban đầu
Mật khẩu này được tạo tự động và lưu trong một file trên máy chủ. Để lấy mật khẩu, hãy quay lại terminal và chạy lệnh `sudo cat /var/lib/jenkins/secrets/initialAdminPassword`. Lệnh này sẽ hiển thị một chuỗi ký tự dài, đó chính là mật khẩu bạn cần. Sao chép chuỗi này và dán vào ô “Administrator password” trên trình duyệt, sau đó nhấn “Continue”. Ở bước tiếp theo, Jenkins sẽ đề nghị bạn cài đặt các plugin. Hãy chọn “Install suggested plugins” để Jenkins tự động cài đặt bộ plugin phổ biến và cần thiết nhất. Quá trình này có thể mất vài phút. Cuối cùng, bạn sẽ được yêu cầu tạo người dùng quản trị đầu tiên. Hãy điền đầy đủ thông tin và nhấn “Save and Finish”. Jenkins đã sẵn sàng để bạn sử dụng!
Sau khi hoàn tất cài đặt, sức mạnh thực sự của Jenkins nằm ở khả năng tạo và cấu hình các “Job” để tự động hóa quy trình phát triển. Một Job trong Jenkins là một tập hợp các bước được định nghĩa để thực hiện một tác vụ cụ thể, chẳng hạn như lấy mã nguồn, biên dịch, kiểm thử và triển khai. Đây là trái tim của hệ thống Tích hợp liên tục.
Thiết lập các Job tự động hóa build và test
Cách tiếp cận hiện đại và được khuyến khích nhất để định nghĩa một Job là sử dụng Pipeline, cụ thể là thông qua một file có tên là Jenkinsfile. Jenkinsfile cho phép bạn định nghĩa toàn bộ quy trình CI/CD dưới dạng mã (Pipeline as Code), giúp việc quản lý, sao lưu và chia sẻ trở nên dễ dàng hơn rất nhiều. Để bắt đầu, bạn có thể tạo một “Pipeline Job” mới trong giao diện Jenkins. Trong phần cấu hình, bạn trỏ đến hệ thống quản lý mã nguồn của mình, ví dụ như một kho lưu trữ Git. Jenkins sẽ tự động tìm và thực thi Jenkinsfile có trong kho chứa đó. Một Jenkinsfile cơ bản có thể định nghĩa các giai đoạn (stages) như “Build”, “Test”, và “Deploy”, mỗi giai đoạn chứa các lệnh cần thực thi tương ứng.

Cấu hình thông báo và báo cáo kết quả build
Một phần không thể thiếu của quy trình CI là việc thông báo kết quả. Jenkins cho phép bạn cấu hình để gửi thông báo tự động mỗi khi một Job hoàn thành, dù thành công hay thất bại. Bạn có thể cài đặt plugin để tích hợp với các công cụ giao tiếp phổ biến như Email, Slack, hoặc Microsoft Teams. Việc này giúp đội ngũ phát triển nhanh chóng nắm bắt được tình hình và xử lý sự cố kịp thời. Ngoài ra, để theo dõi chất lượng của dự án, việc cài đặt các plugin hỗ trợ báo cáo là rất cần thiết. Các plugin như JaCoCo cho báo cáo độ bao phủ của unit test, hoặc HTML Publisher để hiển thị các báo cáo HTML tùy chỉnh, sẽ cung cấp những thông tin trực quan và giá trị về kết quả của mỗi lần build.
Để hệ thống CI/CD của bạn luôn hoạt động ổn định, an toàn và hiệu quả, việc bảo trì và cập nhật Jenkins định kỳ là vô cùng cần thiết. Giống như bất kỳ phần mềm nào khác, Jenkins và các plugin của nó thường xuyên có các bản phát hành mới để vá lỗi bảo mật, cải thiện hiệu năng và bổ sung tính năng. Bỏ qua việc này có thể khiến hệ thống của bạn gặp rủi ro.
Cập nhật Jenkins và các plugin an toàn
Vì chúng ta đã cài đặt Jenkins thông qua kho lưu trữ YUM, việc nâng cấp phiên bản Jenkins trở nên rất đơn giản. Bạn chỉ cần chạy lệnh `sudo yum update jenkins` trên máy chủ CentOS 7. Hệ thống sẽ tự động tải về và cài đặt phiên bản mới nhất. Đối với các plugin, bạn có thể quản lý và cập nhật chúng trực tiếp từ giao diện web của Jenkins. Hãy truy cập vào mục “Manage Jenkins” > “Plugin Manager” và chuyển đến tab “Updates”. Tại đây, bạn sẽ thấy danh sách các plugin có phiên bản mới. Bạn nên kiểm tra và cập nhật chúng định kỳ để đảm bảo tính tương thích và bảo mật cho hệ thống.

Sao lưu và khôi phục dữ liệu Jenkins
Mọi cấu hình của Jenkins, bao gồm các Job, plugin, và thiết lập hệ thống, đều được lưu trữ trong thư mục JENKINS_HOME, mặc định là /var/lib/jenkins. Mất dữ liệu trong thư mục này đồng nghĩa với việc mất toàn bộ công sức thiết lập của bạn. Do đó, việc sao lưu JENKINS_HOME là cực kỳ quan trọng. Bạn có thể viết một script đơn giản để nén thư mục này và lưu trữ ở một nơi an toàn (ví dụ như một server khác hoặc dịch vụ lưu trữ đám mây) và đặt lịch chạy tự động hàng ngày bằng cron job. Khi cần khôi phục, bạn chỉ cần dừng dịch vụ Jenkins, giải nén file sao lưu để ghi đè lên thư mục JENKINS_HOME hiện tại, và khởi động lại dịch vụ.
Trong quá trình cài đặt và sử dụng Jenkins, bạn có thể sẽ gặp phải một số sự cố phổ biến. Việc nhận biết và biết cách xử lý chúng sẽ giúp bạn tiết kiệm rất nhiều thời gian và công sức, đảm bảo hệ thống CI của bạn nhanh chóng hoạt động trở lại. Dưới đây là hai trong số những vấn đề thường gặp nhất và cách khắc phục chúng.

Jenkins không khởi động hoặc lỗi port 8080 bị chiếm dụng
Một trong những lỗi phổ biến nhất là Jenkins không thể khởi động. Nguyên nhân đầu tiên bạn nên kiểm tra là logs của dịch vụ bằng lệnh `sudo journalctl -u jenkins`. Logs sẽ cung cấp thông tin chi tiết về nguyên nhân gây ra lỗi. Một lý do hay gặp là cổng 8080, cổng mặc định của Jenkins, đã bị một ứng dụng khác chiếm dụng. Để giải quyết, bạn có thể tìm và dừng ứng dụng đang dùng cổng 8080 hoặc thay đổi cổng hoạt động của Jenkins. Để đổi cổng, bạn cần chỉnh sửa file cấu hình tại /etc/sysconfig/jenkins, tìm đến biến JENKINS_PORT và thay đổi giá trị từ “8080” sang một cổng khác còn trống, sau đó khởi động lại dịch vụ Jenkins.
Lỗi quyền truy cập hoặc không thể kết nối với Git repository
Khi cấu hình Job để kết nối với kho lưu trữ Git, lỗi không thể kết nối là rất phổ biến. Nguyên nhân thường xuất phát từ việc cấu hình sai quyền truy cập. Nếu bạn sử dụng kết nối SSH (ví dụ: git@github.com:user/repo.git), hãy chắc chắn rằng bạn đã tạo một cặp khóa SSH cho người dùng jenkins trên máy chủ, và đã thêm public key vào tài khoản Git của bạn. Nếu bạn sử dụng kết nối HTTPS, bạn cần tạo và sử dụng Personal Access Token (PAT) với các quyền truy cập phù hợp, sau đó lưu token này dưới dạng “Credentials” trong Jenkins và sử dụng nó khi cấu hình Job. Kiểm tra kỹ lưỡng các bước thiết lập credentials sẽ giúp bạn giải quyết hầu hết các vấn đề liên quan đến kết nối Git.
Để tối ưu hóa hiệu quả và đảm bảo an ninh cho hệ thống Jenkins của bạn, việc tuân thủ các thực hành tốt nhất là điều cần thiết. Những nguyên tắc này không chỉ giúp hệ thống chạy mượt mà hơn mà còn giảm thiểu rủi ro bảo mật và dễ dàng hơn trong việc quản lý lâu dài. Đây là những kinh nghiệm được đúc kết từ cộng đồng người dùng Jenkins trên toàn thế giới.
Thứ nhất, luôn cập nhật Jenkins và các plugin lên phiên bản mới nhất. Các nhà phát triển liên tục phát hành các bản vá lỗi, đặc biệt là các lỗ hổng bảo mật. Việc chạy một phiên bản cũ có thể khiến hệ thống của bạn trở thành mục tiêu của các cuộc tấn công. Hãy tạo thói quen kiểm tra và cập nhật định kỳ ít nhất mỗi tháng một lần.

Thứ hai, bảo mật Jenkins một cách nghiêm túc. Hãy kích hoạt chế độ bảo mật, tạo các tài khoản người dùng riêng biệt thay vì dùng chung tài khoản admin. Sử dụng plugin “Role-based Authorization Strategy” để phân quyền chi tiết cho từng người dùng hoặc nhóm người dùng. Điều này đảm bảo rằng mỗi người chỉ có quyền truy cập và thực hiện các hành động cần thiết cho công việc của họ, giảm thiểu nguy cơ phá hoại hoặc thay đổi cấu hình ngoài ý muốn.
Thứ ba, hãy tự động hóa việc sao lưu cấu hình. Như đã đề cập, thư mục JENKINS_HOME chứa toàn bộ “linh hồn” của hệ thống Jenkins. Thiết lập một cron job để tự động sao lưu thư mục này hàng ngày ra một vị trí an toàn là một chính sách bảo hiểm không thể thiếu. Cuối cùng, hãy thường xuyên giám sát logs và hiệu suất của máy chủ. Việc theo dõi tài nguyên CPU, RAM, và dung lượng đĩa sẽ giúp bạn phát hiện sớm các vấn đề tiềm ẩn trước khi chúng gây ra sự cố nghiêm trọng.
Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết từ việc chuẩn bị môi trường, cài đặt cho đến cấu hình và bảo trì Jenkins CI trên hệ điều hành CentOS 7. Việc thiết lập thành công một hệ thống Jenkins không chỉ giúp tự động hóa quy trình phát triển phần mềm mà còn mang lại vô số lợi ích: giảm thiểu sai sót, tăng tốc độ phát hành sản phẩm, và giải phóng thời gian cho đội ngũ phát triển để tập trung vào việc sáng tạo. Jenkins trên nền tảng CentOS 7 tạo thành một bộ đôi mạnh mẽ, ổn định và linh hoạt, sẵn sàng đáp ứng nhu cầu của bất kỳ dự án nào.
Đừng chần chừ nữa, hãy bắt đầu áp dụng những kiến thức này để xây dựng hệ thống CI/CD cho riêng mình ngay từ hôm nay. Tự động hóa là tương lai của phát triển phần mềm, và Jenkins chính là công cụ đắc lực giúp bạn tiến vào tương lai đó. Các bước tiếp theo bạn có thể khám phá bao gồm việc xây dựng các pipeline phức tạp hơn, tích hợp Jenkins với các công cụ kiểm thử tự động, containerization như Docker, và các nền tảng triển khai đám mây. Chúc bạn thành công trên con đường chinh phục tự động hóa!