This post walks through the environment setup and migration simulation process for Jenkins nodes moving from RHEL 8 to Rocky Linux 9
Environment
| IP | Hostname | OS | Keterangan |
|---|---|---|---|
| 10.20.0.210 | le-jenkins-master | RHEL 8 | Jenkins Master |
| 10.20.0.211 | le-jenkins-slave01 | RHEL 8 | Slave 1 (lama) |
| 10.20.0.212 | le-jenkins-slave02 | RHEL 8 | Slave 2 (lama) |
| 10.20.0.213 | le-jenkins-slave02 | Rocky 9 | Slave baru (akan pakai IP 10.20.0.212) |
Jenkins UI: http://10.20.0.210:8080
Step 1 — Setup Jenkins Master
subscription-manager register
dnf update -y
reboot
Install Java
# Java 17
dnf install -y \
java-17-openjdk-17.0.15.0.6-2.el8.x86_64 \
java-17-openjdk-devel-17.0.15.0.6-2.el8.x86_64 \
java-17-openjdk-headless-17.0.15.0.6-2.el8.x86_64
# Pilih versi Java aktif
alternatives --config java
Install Jenkins
wget https://get.jenkins.io/redhat-stable/jenkins-2.492.3-1.1.noarch.rpm
rpm -ivh jenkins-2.492.3-1.1.noarch.rpm
# Verifikasi
rpm -qa | grep jenkins
systemctl enable --now jenkins
Konfigurasi Firewall
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=50000/tcp
firewall-cmd --reload
Ambil Initial Password
cat /var/lib/jenkins/secrets/initialAdminPassword
Akses UI Jenkins di: http://10.20.0.210:8080
Step 2 — Setup Jenkins Slave (RHEL 8)
subscription-manager register
dnf update -y
reboot
Install Java
# Java 17
dnf install -y \
java-17-openjdk-17.0.15.0.6-2.el8.x86_64 \
java-17-openjdk-devel-17.0.15.0.6-2.el8.x86_64 \
java-17-openjdk-headless-17.0.15.0.6-2.el8.x86_64
# Set Java aktif ke versi 17
alternatives --config java
Buat User & Direktori Kerja
# Buat user dengan UID fixed
useradd -u 1500 -m -d /home/jenkins-remote -s /bin/bash jenkins-remote
passwd jenkins-remote # contoh: Jenkins123!
# Buat working directory
mkdir -p /data/jenkins-slave
chown -R jenkins-remote:jenkins-remote /data/
# Buat file penanda (untuk verifikasi nanti)
echo "RHEL8 - $(hostname)" > /data/jenkins-slave/server-info.txt
Aktifkan SSH & Firewall
systemctl enable --now sshd
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
Verifikasi
sudo -u jenkins-remote java -version
id jenkins-remote
Step 3 — Setup Jenkins Slave (Rocky Linux 9)
Install Java
# Java 17
dnf install -y \
java-17-openjdk-1:17.0.19.0.10-2.el9_7.x86_64 \
java-17-openjdk-devel-1:17.0.19.0.10-2.el9_7.x86_64 \
java-17-openjdk-headless-1:17.0.19.0.10-2.el9_7.x86_64
# Set Java aktif ke versi 17
alternatives --config java
Buat User & Direktori Kerja
# UID HARUS SAMA PERSIS dengan slave-1 lama
useradd -u 1500 -m -d /home/jenkins-remote -s /bin/bash jenkins-remote
passwd jenkins-remote # password SAMA dengan slave-1 lama
mkdir -p /data/jenkins-slave
chown -R jenkins-remote:jenkins-remote /data/
Aktifkan SSH, Firewall & SELinux
systemctl enable --now sshd
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
# Rocky 9 default SELinux Enforcing — restorecon wajib
restorecon -Rv /home/jenkins-remote
restorecon -Rv /data
Verifikasi
sudo -u jenkins-remote java -version
id jenkins-remote # harus uid=1500, sama dengan slave-1 lama
getenforce # cek status SELinux
Step 4 — Tambah Agent di Jenkins UI
Buka: http://10.20.0.210:8080 → Manage Jenkins → Nodes → New Node
slave-1 (RHEL 8 lama)
| Parameter | Nilai |
|---|---|
| Node name | slave-1 |
| Remote root directory | /data/jenkins-slave |
| Labels | slave rhel8 slave-1 |
| Host | 10.20.0.211 |
| Credentials | jenkins-remote / Jenkins123! |
| Host Key Verification | Non-verifying |
slave-2 (RHEL 8, tidak berubah)
| Parameter | Nilai |
|---|---|
| Node name | slave-2 |
| Remote root directory | /data/jenkins-slave |
| Labels | slave rhel8 slave-2 |
| Host | 10.20.0.212 |
| Credentials | jenkins-remote / Jenkins123! |
| Host Key Verification | Non-verifying |
Step 5 — Buat Pipeline Verifikasi
Buat job: New Item → Pipeline → nama: test-migration
pipeline {
agent none
stages {
stage('Verify Slave-1') {
agent { label 'slave-1' }
steps {
sh '''
echo "==============================="
echo "SLAVE-1 INFO"
echo "==============================="
echo "Hostname : $(hostname)"
echo "IP : $(hostname -I)"
echo "OS : $(cat /etc/os-release | grep PRETTY_NAME)"
echo "Java : $(java -version 2>&1 | head -1)"
echo "User : $(whoami) (uid=$(id -u))"
echo "Workdir : $(pwd)"
echo "Server : $(cat /data/jenkins-slave/server-info.txt)"
echo "==============================="
'''
}
}
stage('Verify Slave-2') {
agent { label 'slave-2' }
steps {
sh '''
echo "==============================="
echo "SLAVE-2 INFO"
echo "==============================="
echo "Hostname : $(hostname)"
echo "IP : $(hostname -I)"
echo "OS : $(cat /etc/os-release | grep PRETTY_NAME)"
echo "Java : $(java -version 2>&1 | head -1)"
echo "User : $(whoami) (uid=$(id -u))"
echo "Workdir : $(pwd)"
echo "==============================="
'''
}
}
}
}
Jalankan pipeline — pastikan kedua slave hijau sebelum lanjut ke migrasi.
Step 6 — Simulasi Migrasi (Reuse IP)
Fase 1 — Rsync Awal (slave lama masih hidup)
# Dari slave-2 lama (10.20.0.212) → slave-2-new (10.20.0.213)
rsync -avz --progress --delete \
/data/jenkins-slave/ \
jenkins-remote@10.20.0.213:/data/jenkins-slave/
Fase 2 — Cutover
# [Jenkins UI] Set slave-2 → OFFLINE → tunggu semua job selesai
# [Jenkins UI] Disconnect slave-2
# Rsync FINAL (delta saja, sangat cepat)
rsync -avz --progress --delete \
/data/jenkins-slave/ \
jenkins-remote@10.20.0.213:/data/jenkins-slave/
# [slave-2 lama] Shutdown
#shutdown -h now
# or set down ip
nmcli con show
nmcli con down <connection-name>
Fase 3 — Aktifkan Rocky Linux 9 dengan IP Lama
# [slave-1-new] Ganti IP sementara → IP lama (10.20.0.212)
nmcli con show
nmcli con mod 'System eth0' \
ipv4.addresses 10.20.0.212/24 \
ipv4.gateway 10.20.0.2 \
ipv4.dns 8.8.8.8,8.8.4.4 \
ipv4.method manual
nmcli con up 'System eth0'
# Verifikasi IP sudah aktif
ip addr show
ping -c 3 10.20.0.210 # ping ke Master
# Tulis ulang file penanda dengan info Rocky
echo "Rocky9 - $(hostname)" > /data/jenkins-slave/server-info.txt
Fase 4 — Reconnect dari Jenkins UI
Buka http://10.20.0.210:8080 → slave-2 → Launch Agent Controller SSH ke
10.20.0.212→ sekarang terhubung ke Rocky Linux 9.
Step 7 — Verifikasi Akhir
Jalankan ulang pipeline test-migration. Output slave-1 harus berubah seperti berikut:
===============================
SLAVE-2 INFO
===============================
Hostname : le-jenkins-slave02
IP : 10.20.0.212 ← IP sama dengan sebelumnya ✓
OS : "Rocky Linux 9.x" ← OS sudah Rocky ✓
Java : openjdk version "17" ← Java sama ✓
User : jenkins-remote (uid=1500) ← user & UID sama ✓
Workdir : /data/jenkins-slave
Server : Rocky9 - slave-2-new ← konfirmasi server baru ✓
===============================
























