Cài Jenkins trên Linux: Từ zero đến chạy được trong 10 phút
Hướng dẫn cài Jenkins trên các distro Linux phổ biến — Debian/Ubuntu, Fedora, RHEL/CentOS — kèm những lỗi hay gặp mà docs không nói.
Nguyen Nhat Long
@longnn

Nếu bạn đang làm DevOps hay đơn giản là dev muốn tự setup CI/CD cho team nhỏ, thì Jenkins vẫn là lựa chọn "cũ mà chắc". Nhưng mà cài Jenkins trên Linux nghe thì dễ, thực tế lại hay vấp mấy lỗi ngớ ngẩn khiến mất cả buổi chiều. Mình đã từng như vậy, nên viết bài này để bạn không phải lặp lại.
Trước khi bắt tay vào: Hardware và Java
Jenkins không ngốn resource lắm khi mới cài, nhưng đừng để nó đánh lừa bạn. Docs chính thức ghi minimum là 256 MB RAM + 1 GB disk. Con số đó chỉ đúng khi bạn chạy đúng một job hello world.
Theo kinh nghiệm của mình, với team 3-5 người, build vài project Java hoặc Node thường xuyên, bạn nên chuẩn bị:
- RAM: 4 GB trở lên (8 GB nếu chạy Docker agent)
- Disk: 50 GB+ (artifact và build log ăn disk nhanh hơn bạn tưởng)
- Java 21 hoặc mới hơn
Điều quan trọng nhất mà nhiều người bỏ qua: cài Java trước, cài Jenkins sau. Nghe hiển nhiên nhưng mình đã thấy không ít người cài Jenkins trước rồi mới bổ sung Java, kết quả là service không start được với lỗi jenkins: failed to find a valid Java installation. Lý do là vì Jenkins package khi install sẽ kiểm tra Java environment ngay lúc đó, nếu chưa có thì nó không tự detect lại sau.
Cài trên Debian/Ubuntu
Đây là combo phổ biến nhất, đặc biệt với Ubuntu Server.
Bước 1: Cài Java
1sudo apt update2sudo apt install fontconfig openjdk-21-jre3java -version
Nếu output ra kiểu openjdk 21.0.x là ổn. Lưu ý cài openjdk-21-jre chứ không phải jdk — Jenkins chỉ cần runtime, không cần compiler.
Bước 2: Thêm Jenkins repo và cài đặt
Bạn có hai lựa chọn: LTS (ổn định, update mỗi 12 tuần) hoặc Weekly (có feature mới nhất nhưng có thể có bug).
Mình luôn khuyên dùng LTS cho production. Weekly chỉ nên dùng khi bạn cần test plugin mới hoặc đang contribute cho Jenkins ecosystem.
LTS:
1sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \2 https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key34echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]" \5 https://pkg.jenkins.io/debian-stable binary/ | sudo tee \6 /etc/apt/sources.list.d/jenkins.list > /dev/null78sudo apt update9sudo apt install jenkins
Weekly thì thay debian-stable bằng debian trong cả hai dòng trên.
Sau khi cài xong, Jenkins tự chạy như một systemd service trên port 8080. Mở browser, truy cập http://<server-ip>:8080 là thấy màn hình setup wizard.
Port 8080 bị chiếm thì sao?
Chuyện này hay xảy ra nếu server đang chạy Tomcat, Nginx proxy, hay bất kỳ service nào khác trên port 8080. Cách fix:
1sudo systemctl edit jenkins
Thêm vào:
1[Service]2Environment="JENKINS_PORT=8081"
Save lại, restart Jenkins là xong. Đơn giản nhưng docs chính thức giấu khá sâu cái này.
Cài trên Fedora
Fedora dùng dnf thay vì apt, flow tương tự:
1sudo wget -O /etc/yum.repos.d/jenkins.repo \2 https://pkg.jenkins.io/rpm-stable/jenkins.repo34sudo dnf upgrade5sudo dnf install fontconfig java-21-openjdk6sudo dnf install jenkins7sudo systemctl daemon-reload
Điều mình thấy hay là Fedora thường có Java version mới hơn trong repo mặc định, nên ít khi gặp vấn đề compatibility.
Cài trên RHEL / CentOS
Nếu bạn đang làm ở môi trường enterprise, khả năng cao server chạy RHEL hoặc CentOS. Flow gần giống Fedora nhưng dùng yum:
1sudo wget -O /etc/yum.repos.d/jenkins.repo \2 https://pkg.jenkins.io/rpm-stable/jenkins.repo3sudo rpm --import https://pkg.jenkins.io/rpm-stable/jenkins.io-2026.key45sudo yum upgrade6sudo yum install fontconfig java-21-openjdk7sudo yum install jenkins8sudo systemctl daemon-reload
Một lưu ý với RHEL/CentOS: nếu bạn dùng bản cũ (CentOS 7 chẳng hạn), có thể repo mặc định không có java-21-openjdk. Lúc đó cần thêm EPEL repo hoặc cài Java từ Adoptium (Temurin). Đừng cố chạy Jenkins với Java 11 — từ version gần đây Jenkins đã drop support rồi.
Start Jenkins và setup ban đầu
Sau khi cài xong trên bất kỳ distro nào:
1sudo systemctl enable jenkins2sudo systemctl start jenkins3sudo systemctl status jenkins
Nếu status hiện active (running) thì bạn đã thành công. Truy cập browser, Jenkins sẽ yêu cầu unlock password — lấy bằng lệnh:
1sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Paste vào, chọn "Install suggested plugins", tạo admin user, và bạn đã có Jenkins chạy production-ready.
Nếu Jenkins không start, check log bằng:
1journalctl -u jenkins.service -n 50
90% lỗi mình gặp rơi vào ba nhóm: Java không tìm thấy, port bị chiếm, hoặc permission trên thư mục JENKINS_HOME.
Mấy điều mình ước ai đó nói sớm hơn
- Backup `JENKINS_HOME` ngay từ đầu. Thư mục mặc định là
/var/lib/jenkins. Tất cả config, job, credential đều nằm ở đây. Mất thư mục này là mất hết. - Đừng chạy Jenkins bằng root. Package installer tự tạo user
jenkinsriêng — hãy giữ nguyên như vậy. - Dùng `apt` thay vì `apt-get` trên Debian/Ubuntu.
aptra từ 2014, output đẹp hơn, progress bar rõ ràng hơn. Không có lý do gì dùngapt-getnữa trừ khi bạn viết script cần backward compatibility. - Firewall. Nếu bạn dùng
ufwhoặcfirewalld, nhớ mở port 8080 (hoặc port bạn đã đổi). Cái này nghe ngu nhưng mình đã debug 2 tiếng chỉ vì quên mở firewall.
Đọc xong thì nhớ gì?
- Cài Java 21 trước, Jenkins sau — thứ tự quan trọng
- Dùng LTS cho production, Weekly cho playground
- Port mặc định 8080, đổi được qua
systemctl edit - Log nằm ở journalctl, không phải file log truyền thống
- Backup
/var/lib/jenkins— làm ngay, đừng để "mai tính"
Jenkins không phải tool mới, không sexy, không có logo gradient. Nhưng nó chạy, nó ổn định, và cộng đồng plugin khổng lồ. Cài đúng cách từ đầu sẽ tiết kiệm cho bạn rất nhiều đau đầu về sau. Chúc bạn setup trơn tru — và nếu gặp lỗi gì lạ, cứ check journalctl trước khi Google nhé.
Nguyen Nhat Long
@longnnThấy hay? Chia sẻ cho bạn bè!
Bài viết liên quan
Có thể bạn cũng thích
Setup NGINX + Next.js Standalone: Hướng dẫn từ thực chiến
Hướng dẫn chi tiết cách setup NGINX làm reverse proxy cho Next.js standalone mode, kèm tips từ kinh nghiệm deploy thực tế.
Cài SSL miễn phí cho Nginx với Let's Encrypt trên Ubuntu
Hướng dẫn từng bước cài certificate SSL miễn phí bằng Certbot cho Nginx trên Ubuntu, kèm auto-renewal và các mẹo hardening HTTPS từ thực tế.