Skip to main content

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:

  1. Login ke Jenkins Dashboard (https://src-jen.tsgitdev.com)

  2. Masuk ke menu:

    Manage Jenkins → Nodes → New Node
  3. Pilih Permanent Agent, isi:

    • Node name: node-project-01
    • Remote root directory: /var/jenkins
    • Labels: docker build
  4. 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)
  5. Klik Save → pastikan status node berubah menjadi Connected.


Membuat Folder Project

Untuk organisasi yang lebih baik, sebaiknya buat folder khusus untuk setiap project:

  1. Dari Jenkins Dashboard → klik:

    New Item → Folder
  2. Masukkan nama folder sesuai nama project, misalnya:

    myapp-service
  3. Klik OK untuk membuat folder.


Membuat Pipeline

Langkah Awal

  1. Masuk ke folder project (myapp-service)

  2. Klik:

    New Item → Pipeline
  3. Masukkan nama pipeline: build-and-deploy

  4. 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.

  1. Buka repository di GitLab Internal

  2. Masuk ke:

    Settings → Webhooks
  3. Tambahkan URL:

    https://src-jen.tsgitdev.com/project/myapp-service/build-and-deploy
  4. Pilih trigger:

    • ✅ Push events
    • ✅ Merge request events (opsional)
  5. Klik Add Webhook

  6. 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:

  1. Lakukan commit/push ke branch utama (main)

  2. Jenkins otomatis men-trigger pipeline

  3. Periksa di Console Output:

    • Code checkout sukses
    • Docker image berhasil dibuat
    • Container berjalan
  4. 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:

MasalahPenyebab UmumSolusi
Node offlineKoneksi SSH gagalPastikan port 22 terbuka dan credential benar
Build gagal di DockerDocker belum terinstal di agentInstal docker dan beri akses user jenkins
Webhook tidak jalanURL atau token salahRecheck webhook URL di GitLab dan plugin GitLab di Jenkins
Container conflictContainer lama belum stopTambahkan docker stop && rm di step environment setup

Tips Tambahan

  • Pastikan user jenkins di agent memiliki akses ke Docker (biasanya dengan menambahkan user ke group docker)
  • Gunakan docker system prune secara 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