Belajar Jenkins - Troubleshooting & Debugging Jenkins Pipelines
Episode 19 of 21

Belajar Jenkins - Troubleshooting & Debugging Jenkins Pipelines

Di episode ini kita membahas cara menganalisis log Jenkins mulai dari System Log sampai log agent, plus fitur Replay dan Snippet Generator untuk menguji perubahan pipeline tanpa commit baru. Kita juga mempelajari penanganan masalah JVM seperti OOM, thread dump, dan agent yang terputus.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 18 kita menjaga Jenkins tetap sehat lewat backup dan monitoring. Tapi sebaik apa pun sistemnya, pipeline tetap akan gagal — dan yang membedakan engineer hebat adalah kecepatan menemukan akar masalahnya. Di episode ini kita masuk mode detektif: membaca log dengan benar, menguji perubahan tanpa commit, dan menangani masalah JVM yang paling sering mengganggu.

Kita akan membahas:

  1. Analisis log Jenkins: System Log dan log agent.
  2. Fitur Replay Pipeline untuk menguji perubahan sintaks tanpa commit baru.
  3. Snippet Generator di /pipeline-syntax untuk menghasilkan sintaks Groovy.
  4. Troubleshooting JVM: OOM, thread dump, dan agent yang terputus.

Membaca Jenkins System Log

Semua peristiwa di controller tercatat di System Log, diakses dari Manage Jenkins lalu System Log. Di sana kita bisa memfilter level (ALL, SEVERE, WARNING, INFO, FINE) dan mencari pesan error tanpa harus membuka file di server.

File log sebenarnya terletak di JENKINS_HOME/logs/. Untuk insiden yang baru terjadi, filter paling efektif adalah mencari pesan SEVERE dan WARNING:

Cari error di System Log
grep -E "SEVERE|WARNING" /var/lib/jenkins/logs/jenkins.log | tail -50

Log Agent Node

Ketika agent terputus atau gagal terhubung, log agent ada di halaman tiap node: Manage Jenkins lalu Nodes lalu nama agent, kemudian klik Log. Dari situ kita bisa melihat penyebab kegagalan koneksi, seperti kunci SSH yang tidak cocok atau alamat host yang salah.

Tip

Gunakan filter log berdasarkan package Java, misalnya jenkins.model atau hudson.slaves, untuk mempersempit area pencarian di System Log. Jangan membaca seluruh log sekaligus.

Replay Pipeline: Menguji Tanpa Commit

Fitur Replay adalah penyelamat saat pipeline gagal di baris tertentu. Daripada mengubah Jenkinsfile, commit, dan push hanya untuk menguji satu baris, klik Replay di halaman build yang gagal. Jenkins membuka editor dengan isi pipeline yang persis sama, dan kita bisa mengedit langsung, lalu menjalankan ulang build tersebut.

JenkinsPerubahan kecil lewat Replay
steps {
    echo "Debug: WORKSPACE = ${env.WORKSPACE}"
    sh 'ls -la ${WORKSPACE}'
}

Setelah build uji sukses, perbaikan tersebut baru kita commit ke repository. Ini mempercepat iterasi debugging karena menghilangkan siklus commit-push yang lambat.

Warning

Replay memakai versi pipeline dari build yang dipilih, bukan dari SCM terbaru. Pastikan nomor build yang di-Replay adalah build yang gagal, agar perubahan kecil tepat sasaran.

Snippet Generator di /pipeline-syntax

Menghafal sintaks ratusan step Groovy adalah mustahil — dan tidak perlu. Jenkins menyediakan Snippet Generator di alamat /pipeline-syntax, yang menghasilkan sintaks lengkap dari form yang diisi.

Cara menggunakannya:

  1. Buka alamat /pipeline-syntax di instance Jenkins.
  2. Pilih step dari dropdown, misalnya withCredentials atau emailext.
  3. Isi parameter di form yang muncul.
  4. Klik Generate Groovy, salin hasilnya, lalu tempel ke Jenkinsfile.

Contoh output untuk step sh dengan penangkapan output:

Output Snippet Generator
script {
    def output = sh(
        script: 'curl -s https://api.example.com/health',
        returnStdout: true
    ).trim()
    echo "Health: ${output}"
}

Snippet Generator juga menyediakan Declarative Directive Generator untuk block seperti environment, when, atau parameters. Ini menjadikan Jenkins UI sebagai dokumentasi interaktif yang selalu sinkron dengan plugin yang terpasang.

Troubleshooting JVM & Memory

Out-of-Memory (OOM)

OOM terjadi saat heap JVM controller tidak cukup untuk beban build. Gejalanya: build mati mendadak, halaman UI lambat, dan muncul pesan java.lang.OutOfMemoryError di System Log. Penyelesaiannya menaikkan batas heap lewat parameter JVM saat container controller dijalankan:

Dockerfile controller dengan heap lebih besar
FROM jenkins/jenkins:lts-jdk17
ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false -Xmx4g -Xms2g"

Note

Naikkan heap bertahap, jangan langsung set maksimum. Pantau metrik jenkins_jvm_memory_used_bytes di Grafana (episode 18) untuk memastikan alokasi sesuai kebutuhan nyata.

Thread Dump

Kalau controller terasa macet atau response lambat tanpa pola, ambil thread dump untuk melihat apa yang sedang dikerjakan semua thread. Jenkins menyediakan endpoint /threadDump yang menampilkan snapshot semua thread. Dari sana, cari thread dengan status BLOCKED atau WAITING yang berulang.

Ambil thread dump dari endpoint Jenkins
curl -k "https://jenkins.example.com/threadDump" | grep -A 5 "java.lang.Thread.State: BLOCKED"

Agent yang Terputus

Agent yang terputus biasanya bukan soal memory controller, melainkan jaringan atau proses agent. Langkah pemecahannya:

  1. Buka log agent dan cari pesan koneksi terakhir.
  2. Pastikan agent dan controller bisa saling ping, serta port tidak diblokir firewall.
  3. Cek resource agent: proses build bisa membunuh agent jika memory penuh.
  4. Untuk agent berbasis proses JVM, pastikan heap agent tidak terlalu kecil.

Untuk agent yang sering putus karena jaringan tidak stabil, gunakan agent berbasis container yang restart otomatis saat gagal, dan periksa apakah ada proxy atau firewall yang memutus koneksi remoting karena idle.

Penutup

Di episode ini kita mempelajari troubleshooting dan debugging:

  • System Log dan log agent adalah sumber kebenaran untuk menemukan akar masalah.
  • Replay memungkinkan menguji perubahan pipeline tanpa commit baru.
  • Snippet Generator di /pipeline-syntax menghasilkan sintaks Groovy dari form interaktif.
  • OOM ditangani dengan menaikkan heap, thread dump dianalisis via /threadDump, dan agent yang putus dicek dari log serta jaringan.

Sekarang kita sudah punya semua keterampilan untuk membangun dan memelihara Jenkins. Di episode 20, episode terakhir series ini, kita merangkai semuanya menjadi satu studi kasus pipeline enterprise production-grade yang lengkap — dari webhook sampai deployment production. Sampai jumpa!