Quay lại
DevOps
5 phút đọc21 tháng 3, 20264

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.

N

Nguyen Nhat Long

@longnn

Jenkins

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

Terminal
1sudo apt update
2sudo apt install fontconfig openjdk-21-jre
3java -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:

Terminal
1sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \
2 https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key
3
4echo "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/null
7
8sudo apt update
9sudo 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:

Terminal
1sudo systemctl edit jenkins

Thêm vào:

INI
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ự:

Terminal
1sudo wget -O /etc/yum.repos.d/jenkins.repo \
2 https://pkg.jenkins.io/rpm-stable/jenkins.repo
3
4sudo dnf upgrade
5sudo dnf install fontconfig java-21-openjdk
6sudo dnf install jenkins
7sudo 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:

Terminal
1sudo wget -O /etc/yum.repos.d/jenkins.repo \
2 https://pkg.jenkins.io/rpm-stable/jenkins.repo
3sudo rpm --import https://pkg.jenkins.io/rpm-stable/jenkins.io-2026.key
4
5sudo yum upgrade
6sudo yum install fontconfig java-21-openjdk
7sudo yum install jenkins
8sudo 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:

Terminal
1sudo systemctl enable jenkins
2sudo systemctl start jenkins
3sudo 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:

Terminal
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:

Terminal
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 jenkins riêng — hãy giữ nguyên như vậy.
  • Dùng `apt` thay vì `apt-get` trên Debian/Ubuntu. apt ra từ 2014, output đẹp hơn, progress bar rõ ràng hơn. Không có lý do gì dùng apt-get nữa trừ khi bạn viết script cần backward compatibility.
  • Firewall. Nếu bạn dùng ufw hoặc firewalld, 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é.

NN

Nguyen Nhat Long

@longnn

Thấy hay? Chia sẻ cho bạn bè!

Bài viết liên quan

Có thể bạn cũng thích

Xem tất cả