Pelajari Jenkins dari dasar. Panduan ini mencakup instalasi, pipeline basics, dan real-world CI/CD workflow untuk mengotomatisasi software delivery Anda.

Jenkins telah menjadi tulang punggung modern CI/CD pipeline. Baik Anda mengotomatisasi test, membangun Docker image, atau deploy ke produksi, Jenkins menangani pekerjaan berat. Tetapi jika Anda baru mengenal Jenkins, learning curve bisa terasa curam—ada terlalu banyak plugin, terlalu banyak opsi konfigurasi, dan terlalu banyak cara untuk melakukan hal yang sama.
Panduan ini memotong kebisingan. Kami akan mulai dengan fundamental, berjalan melalui setup dunia nyata, dan menunjukkan cara membangun pipeline otomatis pertama Anda. Di akhir, Anda akan memahami cara kerja Jenkins dan siap mengimplementasikannya dalam project Anda sendiri.
Jenkins adalah automation server open-source. Anggap saja sebagai pekerja yang tidak kenal lelah yang menonton repository kode Anda, menjalankan test setiap kali Anda push perubahan, membangun artifact, dan men-deploy ke infrastruktur Anda—semuanya tanpa intervensi manusia.
Inilah mengapa penting:
Kecepatan: Automated pipeline menangkap bug menit setelah diperkenalkan, bukan hari kemudian dalam produksi.
Konsistensi: Proses build yang sama berjalan setiap kali. Tidak ada lagi masalah "bekerja di mesin saya".
Scalability: Jenkins mendistribusikan pekerjaan di multiple agent, jadi build Anda tidak bottleneck.
Fleksibilitas: Dengan ribuan plugin, Jenkins terintegrasi dengan hampir semua tool dalam stack Anda.
Alternatifnya? Manual testing, manual deployment, dan manual mistake. Jenkins menghilangkan friction itu.
Sebelum menggali setup, pahami konsep foundational ini:
Job adalah unit kerja dasar dalam Jenkins. Ini adalah set instruksi yang dieksekusi Jenkins. Job paling sederhana mungkin "jalankan test pada setiap commit."
Pipeline adalah job yang lebih sophisticated yang mendefinisikan seluruh workflow Anda sebagai kode. Alih-alih klik melalui UI, Anda menulis Jenkinsfile yang mendeskripsikan setiap stage: build, test, deploy.
Pipeline adalah pendekatan modern. Mereka version-controlled, repeatable, dan lebih mudah di-debug.
Jenkins berjalan pada controller (server utama) dan mendistribusikan pekerjaan ke agent (mesin worker). Separasi ini mencegah satu build lambat dari memblokir yang lain.
Anggap saja seperti restoran: controller adalah manager yang mengambil pesanan, dan agent adalah chef yang menjalankannya secara parallel.
Trigger memberitahu Jenkins kapan menjalankan job. Trigger umum termasuk:
Pipeline dibagi menjadi stage (fase logis seperti "Build", "Test", "Deploy"). Setiap stage berisi step (perintah atau aksi individual).
Jenkins berjalan pada sistem apa pun dengan Java terinstal. Inilah yang Anda butuhkan:
Pendekatan termudah adalah menggunakan package manager Anda:
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkinsMulai service:
sudo systemctl start jenkins
sudo systemctl enable jenkinsVerifikasi sedang berjalan:
sudo systemctl status jenkinsJika Anda lebih suka containerization:
docker run -d -p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins \
jenkins/jenkins:ltsIni expose Jenkins pada http://localhost:8080 dan memungkinkan Jenkins untuk spawn Docker container untuk build.
Navigasi ke http://localhost:8080 (atau IP server Anda). Jenkins akan meminta unlock key:
sudo cat /var/lib/jenkins/secrets/initialAdminPasswordPaste key, kemudian ikuti setup wizard:
Tip
Simpan kredensial admin Anda di tempat yang aman. Anda akan membutuhkannya untuk mengelola Jenkins nanti.
Mari kita bangun contoh praktis: pipeline yang clone Git repository, jalankan test, dan report hasil.
Dalam job configuration, scroll ke Pipeline dan pilih Pipeline script. Paste ini:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
echo 'Cloning repository...'
git branch: 'main', url: 'https://github.com/your-org/your-repo.git'
}
}
stage('Build') {
steps {
echo 'Building application...'
sh 'npm install'
sh 'npm run build'
}
}
stage('Test') {
steps {
echo 'Running tests...'
sh 'npm test'
}
}
stage('Deploy') {
steps {
echo 'Deploying to production...'
sh 'echo "Deployment would happen here"'
}
}
}
post {
always {
echo 'Pipeline finished'
}
success {
echo 'Pipeline succeeded!'
}
failure {
echo 'Pipeline failed!'
}
}
}Klik Save dan kemudian Build Now. Jenkins akan mengeksekusi setiap stage secara sequential.
agent any: Jalankan pada agent apa pun yang tersediastages: Definisikan fase workflow Andasteps: Perintah untuk dieksekusi di setiap stagepost: Aksi setelah pipeline selesai (success, failure, always)Section post crucial untuk notifikasi. Anda dapat mengirim Slack message, email, atau trigger webhook pada failure.
Secara manual klik "Build Now" tidak scale. Mari kita otomatisasi dengan webhook.
http://your-jenkins-server:8080/github-webhook/application/jsonModifikasi pipeline Anda untuk trigger pada push:
pipeline {
agent any
triggers {
githubPush()
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/your-org/your-repo.git'
}
}
// ... rest of stages
}
}Sekarang, setiap kali Anda push ke GitHub, Jenkins secara otomatis memulai build. Tidak ada intervensi manual yang diperlukan.
Important
Pastikan server Jenkins Anda dapat diakses dari GitHub (bukan di belakang firewall). Jika internal-only, gunakan polling sebagai gantinya: pollSCM('H/5 * * * *') untuk check setiap 5 menit.
Salah:
sh 'docker login -u myuser -p mypassword'Benar:
withCredentials([usernamePassword(credentialsId: 'docker-hub', usernameVariable: 'USER', passwordVariable: 'PASS')]) {
sh 'docker login -u $USER -p $PASS'
}Simpan credential dalam Jenkins → Manage Jenkins → Manage Credentials. Reference mereka dengan ID dalam pipeline Anda.
Build yang hung dapat memblokir seluruh pipeline Anda. Selalu set timeout:
pipeline {
agent any
options {
timeout(time: 30, unit: 'MINUTES')
}
// ... stages
}Old artifact terakumulasi dan mengkonsumsi disk space. Bersihkan setelah build:
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
}
// ... stages
}Ini menyimpan hanya 10 build terakhir.
Jenkins log adalah debugging lifeline Anda. Jangan hapus. Sebaliknya, archive important artifact:
post {
always {
junit 'test-results/**/*.xml'
archiveArtifacts artifacts: 'build/**', allowEmptyArchive: true
}
}Declarative pipeline lebih mudah dibaca dan dipertahankan daripada scripted pipeline. Tetap dengan syntax yang ditunjukkan dalam panduan ini.
Simpan Jenkinsfile Anda dalam Git repository, bukan dalam Jenkins UI. Dengan cara ini, perubahan pipeline tracked dan reviewable:
cat > Jenkinsfile << 'EOF'
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make build'
}
}
}
}
EOF
git add Jenkinsfile
git commit -m "Add CI/CD pipeline"
git pushKemudian dalam Jenkins, pilih Pipeline script from SCM dan point ke repository Anda.
Percepat build dengan menjalankan independent stage secara parallel:
pipeline {
agent any
stages {
stage('Test') {
parallel {
stage('Unit Tests') {
steps {
sh 'npm run test:unit'
}
}
stage('Integration Tests') {
steps {
sh 'npm run test:integration'
}
}
stage('Lint') {
steps {
sh 'npm run lint'
}
}
}
}
}
}Ketiga stage berjalan simultaneously, memotong build time secara signifikan.
Blue Ocean adalah modern UI Jenkins. Instal via Manage Jenkins → Manage Plugins → search "Blue Ocean". Ini menyediakan:
Notifikasi tim Anda tentang build failure:
post {
failure {
slackSend(
color: 'danger',
message: "Build failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}"
)
}
success {
slackSend(
color: 'good',
message: "Build passed: ${env.JOB_NAME} #${env.BUILD_NUMBER}"
)
}
}Instal Slack plugin terlebih dahulu, kemudian konfigurasi workspace token Anda dalam Jenkins credential.
Jenkins powerful, tetapi tidak selalu tool yang tepat:
Gunakan Jenkins ketika:
Pertimbangkan alternatif ketika:
Jenkins bersinar dalam enterprise environment dengan complex requirement. Untuk project lebih sederhana, lighter alternative mungkin lebih baik.
Anda sekarang memahami Jenkins fundamental. Berikut action plan Anda:
Jenkins memiliki steep learning curve, tetapi payoff sangat besar. Automated pipeline menghemat waktu, menangkap bug lebih awal, dan memberikan Anda confidence dalam deployment Anda. Mulai kecil, iterate, dan secara bertahap tambahkan kompleksitas saat Anda berkembang.
Perjalanan dari manual deployment ke fully automated CI/CD layak dilakukan. Jenkins adalah kendaraan Anda.