Jenkins
Deskripsi Umum
Dokumen ini membahas cara setup dan konfigurasi Jenkins Pipeline untuk otomasi build dan deployment menggunakan Docker. Jenkins akan terintegrasi dengan GitLab repository melalui webhook, sehingga setiap kali ada commit atau push, pipeline akan otomatis berjalan.
Arsitektur
Setup Jenkins Node
Menambahkan Node Baru
Pertama-tama, kita perlu setup Jenkins node (agent) yang akan menjalankan build job. Berikut langkah-langkahnya:
-
Login ke Jenkins Dashboard (
https://src-jen.tsgitdev.com) -
Masuk ke menu:
Manage Jenkins → Nodes → New Node -
Pilih Permanent Agent, isi:
- Node name:
node-project-01 - Remote root directory:
/var/jenkins - Labels:
docker build
- Node name:
-
Klik OK dan isi konfigurasi:
- Usage: "Use this node as much as possible"
- Launch method: "Launch agent via SSH"
- Host:
<IP_SERVER_CLIENT> - Credentials: tambahkan SSH key Jenkins master
- Host key verification strategy: Non-verifying (atau sesuai kebijakan keamanan)
-
Klik Save → pastikan status node berubah menjadi
Connected.
Membuat Folder Project
Untuk organisasi yang lebih baik, sebaiknya buat folder khusus untuk setiap project:
-
Dari Jenkins Dashboard → klik:
New Item → Folder -
Masukkan nama folder sesuai nama project, misalnya:
myapp-service -
Klik OK untuk membuat folder.
Membuat Pipeline
Langkah Awal
-
Masuk ke folder project (
myapp-service) -
Klik:
New Item → Pipeline -
Masukkan nama pipeline:
build-and-deploy -
Klik OK
Konfigurasi Pipeline
Setelah pipeline dibuat, kita perlu mengkonfigurasinya. Ada beberapa bagian yang perlu diatur:
Bagian General
- Centang "This project is parameterized" (optional jika ingin build manual dengan variabel)
- Centang "GitLab trigger" jika plugin tersedia
Build Triggers
Ini adalah bagian penting untuk integrasi dengan GitLab:
- Pilih "Build when a change is pushed to GitLab"
- Simpan Webhook URL yang muncul di bawah (akan digunakan di GitLab)
Pipeline Definition
Pada bagian ini, kita atur agar Jenkins mengambil Jenkinsfile dari repository Git:
Pilih:
Definition: Pipeline script from SCM
SCM: Git
Repository URL: git@gitlab.internal:group/project.git
Credentials: SSH key GitLab internal
Branch: main
Script Path: Jenkinsfile
Contoh Jenkinsfile
Jenkinsfile adalah file yang berisi definisi pipeline. File ini harus diletakkan di root directory repository GitLab. Berikut contoh Jenkinsfile yang bisa digunakan:
pipeline {
agent { label 'docker' }
environment {
IMAGE_NAME = "internal-registry.local/myapp"
CONTAINER_NAME = "myapp-container"
}
stages {
stage('Checkout Code') {
steps {
checkout scm
}
}
stage('Build Docker Image') {
steps {
script {
sh 'docker build -t ${IMAGE_NAME}:latest .'
}
}
}
stage('Setup Environment') {
steps {
script {
sh '''
docker stop ${CONTAINER_NAME} || true
docker rm ${CONTAINER_NAME} || true
'''
}
}
}
stage('Run Container') {
steps {
script {
sh '''
docker run -d \
--name ${CONTAINER_NAME} \
-p 8080:8080 \
${IMAGE_NAME}:latest
'''
}
}
}
}
post {
success {
echo "✅ Build & Deploy berhasil."
}
failure {
echo "❌ Build gagal, cek log di Jenkins console."
}
}
}
Setup Webhook di GitLab
Setelah pipeline dibuat, kita perlu setup webhook di GitLab agar setiap ada push, Jenkins akan otomatis menjalankan build.
-
Buka repository di GitLab Internal
-
Masuk ke:
Settings → Webhooks -
Tambahkan URL:
https://src-jen.tsgitdev.com/project/myapp-service/build-and-deploy -
Pilih trigger:
- ✅ Push events
- ✅ Merge request events (opsional)
-
Klik Add Webhook
-
Test webhook dengan menekan tombol test. Pastikan Jenkins menerima request dan trigger build secara otomatis.
Validasi dan Testing
Setelah semua setup selesai, kita perlu memvalidasi apakah workflow sudah berjalan dengan baik:
-
Lakukan commit/push ke branch utama (
main) -
Jenkins otomatis men-trigger pipeline
-
Periksa di Console Output:
- Code checkout sukses
- Docker image berhasil dibuat
- Container berjalan
-
Verifikasi container di node:
docker ps
Jika semua langkah di atas berjalan lancar, berarti pipeline sudah berfungsi dengan baik.
Troubleshooting
Berikut beberapa masalah umum yang mungkin terjadi dan cara mengatasinya:
| Masalah | Penyebab Umum | Solusi |
|---|---|---|
| Node offline | Koneksi SSH gagal | Pastikan port 22 terbuka dan credential benar |
| Build gagal di Docker | Docker belum terinstal di agent | Instal docker dan beri akses user jenkins |
| Webhook tidak jalan | URL atau token salah | Recheck webhook URL di GitLab dan plugin GitLab di Jenkins |
| Container conflict | Container lama belum stop | Tambahkan docker stop && rm di step environment setup |
Tips Tambahan
- Pastikan user
jenkinsdi agent memiliki akses ke Docker (biasanya dengan menambahkan user ke group docker) - Gunakan
docker system prunesecara berkala untuk membersihkan image dan container yang tidak terpakai - Simpan credential sensitif menggunakan Jenkins Credentials Store, jangan hardcode di Jenkinsfile
- Enable build history agar bisa tracking perubahan dan troubleshooting lebih mudah
Kesimpulan
Dengan setup ini, proses deployment jadi lebih efisien karena setiap perubahan code di GitLab akan otomatis trigger build dan deployment melalui Jenkins. Developer tidak perlu lagi melakukan deployment manual, cukup push code dan biarkan pipeline yang bekerja.
Workflow ini cocok untuk development environment. Untuk production, biasanya ditambahkan approval step dan testing yang lebih comprehensive sebelum deployment.
Terakhir diperbarui: 22 Oktober 2025
Dibuat oleh: Tim DevOps Internal