Kembali ke Beranda
DevOps

Tutorial Jenkins Dasar

Tutorial Jenkins dari dasar sampai praktik development, mencakup instalasi, setup awal, job, pipeline, Jenkinsfile, integrasi Git, credential, build-test-deploy, Docker, webhook, multibranch pipeline, security, backup, dan troubleshooting.

Tutorial Jenkins dari Awal untuk Development

1. Apa Itu Jenkins?

Jenkins adalah automation server open-source yang sering digunakan untuk proses:

  • Continuous Integration atau CI
  • Continuous Delivery atau CD
  • Build aplikasi otomatis
  • Menjalankan unit test otomatis
  • Deploy aplikasi otomatis
  • Menjalankan script operasional
  • Integrasi dengan Git, Docker, Kubernetes, Maven, Gradle, Node.js, SonarQube, dan tools development lainnya

Dalam development, Jenkins biasanya dipakai untuk membuat pipeline seperti ini:

TEXT
Developer push code ke Git
        ↓
Jenkins mendeteksi perubahan
        ↓
Jenkins clone source code
        ↓
Jenkins build aplikasi
        ↓
Jenkins menjalankan test
        ↓
Jenkins membuat artifact
        ↓
Jenkins deploy ke server

---

2. Istilah Penting di Jenkins

IstilahPenjelasan
Job / ProjectTask automation di Jenkins
BuildProses menjalankan job
PipelineAlur kerja CI/CD yang terdiri dari beberapa stage
JenkinsfileFile konfigurasi pipeline yang disimpan di repository
Agent / NodeMesin yang menjalankan build
WorkspaceFolder kerja sementara Jenkins untuk build
PluginEkstensi Jenkins untuk menambah fitur
CredentialPenyimpanan username, password, token, SSH key secara aman
ArtifactFile hasil build, misalnya .jar, .war, .zip, atau image Docker
TriggerPemicu build, misalnya push Git, jadwal cron, atau manual

---

3. Kebutuhan Sebelum Instalasi

Untuk instalasi dasar Jenkins, siapkan:

  • Server Linux, misalnya Ubuntu, Debian, AlmaLinux, Rocky Linux, atau CentOS Stream
  • Java 17 atau Java 21
  • RAM minimal 2 GB
  • Disk minimal 10 GB
  • Akses internet untuk download plugin
  • Akses sudo/root
  • Port default Jenkins: 8080

Cek versi Java:

BASH
java -version

Jika belum ada Java, install dulu.

---

4. Instalasi Jenkins di Ubuntu / Debian

4.1 Update Server

BASH
sudo apt update
sudo apt upgrade -y

4.2 Install Java

BASH
sudo apt install fontconfig openjdk-17-jre -y

Cek versi Java:

BASH
java -version

Contoh output:

TEXT
openjdk version "17.x.x"

4.3 Tambahkan Repository Jenkins

BASH
sudo mkdir -p /etc/apt/keyrings

sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \ https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

Tambahkan repository:

BASH
echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | \
sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null

Update package:

BASH
sudo apt update

4.4 Install Jenkins

BASH
sudo apt install jenkins -y

4.5 Jalankan Jenkins

BASH
sudo systemctl enable jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins

Jika aktif, statusnya akan terlihat seperti:

TEXT
active (running)

4.6 Buka Firewall

Jika memakai UFW:

BASH
sudo ufw allow 8080
sudo ufw reload

Akses Jenkins:

TEXT
http://IP_SERVER:8080

---

5. Instalasi Jenkins dengan Docker

Cara ini cocok untuk development lokal atau lab testing.

5.1 Jalankan Jenkins Container

BASH
docker volume create jenkins_home
BASH
docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkinshome:/var/jenkinshome \
  jenkins/jenkins:lts

5.2 Cek Log Jenkins

BASH
docker logs -f jenkins

Ambil initial password dari log, atau jalankan:

BASH
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

Akses:

TEXT
http://localhost:8080

---

6. Setup Awal Jenkins

Saat pertama kali membuka Jenkins, akan muncul halaman unlock.

6.1 Ambil Initial Admin Password

Jika install native Linux:

BASH
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Jika install Docker:

BASH
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

Masukkan password tersebut ke halaman Jenkins.

6.2 Install Plugin

Pilih:

TEXT
Install suggested plugins

Plugin umum yang biasanya otomatis ikut terinstall:

  • Git
  • Pipeline
  • Credentials
  • Workspace Cleanup
  • JUnit
  • Maven Integration
  • Gradle
  • SSH Agent
  • Docker Pipeline

6.3 Buat Admin User

Isi:

TEXT
Username: admin
Password: password-kuat
Full name: Administrator
Email: email@domain.com

6.4 Jenkins URL

Contoh:

TEXT
http://192.168.1.10:8080/

---

7. Struktur Dasar Jenkins

7.1 Dashboard

Dashboard adalah halaman utama Jenkins. Di sini kita bisa melihat:

  • Daftar job
  • Status build terakhir
  • Build yang sedang berjalan
  • History build
  • Queue build

7.2 Manage Jenkins

Menu ini digunakan untuk konfigurasi utama, seperti:

  • Manage Plugins
  • Manage Credentials
  • Manage Nodes
  • System Configuration
  • Security
  • Tools
  • Logs

7.3 New Item

Digunakan untuk membuat job baru.

Jenis job yang sering dipakai:

  • Freestyle project
  • Pipeline
  • Multibranch Pipeline
  • Folder

Untuk development modern, yang paling disarankan adalah:

TEXT
Pipeline

atau:

TEXT
Multibranch Pipeline

---

8. Membuat Job Freestyle Sederhana

Freestyle cocok untuk belajar dasar Jenkins.

8.1 Buat Job Baru

Klik:

TEXT
New Item

Isi nama:

TEXT
hello-jenkins

Pilih:

TEXT
Freestyle project

Klik:

TEXT
OK

8.2 Tambahkan Build Step

Pilih:

TEXT
Build Steps > Execute shell

Isi:

BASH
echo "Hello Jenkins"
date
whoami
pwd

Klik:

TEXT
Save

8.3 Jalankan Build

Klik:

TEXT
Build Now

Lihat hasilnya di:

TEXT
Build History > Console Output

---

9. Integrasi Jenkins dengan Git

9.1 Install Git di Server Jenkins

BASH
sudo apt install git -y

Cek:

BASH
git --version

9.2 Buat Job dengan Source Code dari Git

Buat job baru:

TEXT
New Item > Freestyle project

Pada bagian Source Code Management, pilih:

TEXT
Git

Isi repository URL:

TEXT
https://github.com/user/project.git

Jika repository private, tambahkan credential.

---

10. Jenkins Credential

Credential dipakai untuk menyimpan data sensitif, seperti:

  • Username/password Git
  • Personal access token
  • SSH private key
  • Docker registry password
  • Secret text
  • File rahasia

10.1 Menambahkan Credential

Buka:

TEXT
Manage Jenkins

Lalu:

TEXT
Credentials

Pilih scope:

TEXT
System > Global credentials

Klik:

TEXT
Add Credentials

Jenis credential yang umum:

JenisKegunaan
Username with passwordLogin Git, Docker registry, server
Secret textToken API
SSH Username with private keySSH ke server atau Git
Secret fileFile konfigurasi rahasia

Contoh ID credential:

TEXT
gitlab-token
dockerhub-login
prod-server-ssh

Credential ID ini nanti dipakai di Jenkinsfile.

---

11. Apa Itu Jenkins Pipeline?

Pipeline adalah cara mendefinisikan alur CI/CD sebagai kode.

Pipeline biasanya disimpan dalam file bernama:

TEXT
Jenkinsfile

Letaknya di root project:

TEXT
my-project/
├── src/
├── pom.xml
└── Jenkinsfile

Keuntungan memakai Jenkinsfile:

  • Pipeline tersimpan bersama source code
  • Bisa direview lewat pull request
  • Bisa versioning
  • Mudah dipindahkan antar Jenkins
  • Lebih rapi dibanding konfigurasi manual di UI

---

12. Struktur Dasar Jenkinsfile

Contoh paling sederhana:

GROOVY
pipeline {
    agent any

stages { stage('Checkout') { steps { echo 'Mengambil source code' } }

stage('Build') { steps { echo 'Build aplikasi' } }

stage('Test') { steps { echo 'Menjalankan test' } }

stage('Deploy') { steps { echo 'Deploy aplikasi' } } } }

Penjelasan:

BagianFungsi
pipelineBlok utama pipeline
agent anyBuild boleh jalan di agent mana saja
stagesKumpulan tahapan
stageSatu tahapan proses
stepsPerintah yang dijalankan

---

13. Pipeline untuk Project Java Maven

Contoh project Spring Boot dengan Maven.

13.1 Struktur Project

TEXT
spring-app/
├── src/
├── pom.xml
└── Jenkinsfile

13.2 Jenkinsfile

GROOVY
pipeline {
    agent any

tools { maven 'Maven-3' jdk 'JDK-17' }

stages { stage('Checkout') { steps { checkout scm } }

stage('Build') { steps { sh 'mvn clean package -DskipTests' } }

stage('Test') { steps { sh 'mvn test' } }

stage('Archive Artifact') { steps { archiveArtifacts artifacts: 'target/*.jar', fingerprint: true } } }

post { success { echo 'Build berhasil' }

failure { echo 'Build gagal' }

always { cleanWs() } } }

13.3 Konfigurasi Maven dan JDK di Jenkins

Buka:

TEXT
Manage Jenkins > Tools

Tambahkan:

TEXT
JDK
Name: JDK-17
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64

Tambahkan Maven:

TEXT
Maven
Name: Maven-3
Install automatically: yes

---

14. Pipeline untuk Project Node.js

Contoh Jenkinsfile:

GROOVY
pipeline {
    agent any

stages { stage('Checkout') { steps { checkout scm } }

stage('Install Dependencies') { steps { sh 'npm install' } }

stage('Lint') { steps { sh 'npm run lint' } }

stage('Test') { steps { sh 'npm test' } }

stage('Build') { steps { sh 'npm run build' } } }

post { always { cleanWs() } } }

---

15. Pipeline untuk Project Python

Contoh Jenkinsfile:

GROOVY
pipeline {
    agent any

stages { stage('Checkout') { steps { checkout scm } }

stage('Create Virtualenv') { steps { sh ''' python3 -m venv venv . venv/bin/activate pip install --upgrade pip pip install -r requirements.txt ''' } }

stage('Test') { steps { sh ''' . venv/bin/activate pytest ''' } } }

post { always { cleanWs() } } }

---

16. Pipeline dengan Docker Build

Contoh untuk build Docker image.

GROOVY
pipeline {
    agent any

environment { IMAGE_NAME = 'myapp' IMAGETAG = "${BUILDNUMBER}" }

stages { stage('Checkout') { steps { checkout scm } }

stage('Docker Build') { steps { sh 'docker build -t $IMAGENAME:$IMAGETAG .' } }

stage('Docker Images') { steps { sh 'docker images | grep $IMAGE_NAME' } } } }

Jika Jenkins berjalan di Docker, perlu konfigurasi tambahan agar bisa menjalankan Docker, misalnya:

  • Mount Docker socket
  • Gunakan Docker agent
  • Gunakan remote Docker host
  • Gunakan Kubernetes agent

---

17. Pipeline Push Image ke Docker Registry

Contoh dengan credential Docker Hub.

Credential ID:

TEXT
dockerhub-login

Jenkinsfile:

GROOVY
pipeline {
    agent any

environment { IMAGE_NAME = 'username/myapp' IMAGETAG = "${BUILDNUMBER}" }

stages { stage('Checkout') { steps { checkout scm } }

stage('Docker Build') { steps { sh 'docker build -t $IMAGENAME:$IMAGETAG .' sh 'docker tag $IMAGENAME:$IMAGETAG $IMAGE_NAME:latest' } }

stage('Docker Login and Push') { steps { withCredentials([ usernamePassword( credentialsId: 'dockerhub-login', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS' ) ]) { sh ''' echo "$DOCKERPASS" | docker login -u "$DOCKERUSER" --password-stdin docker push $IMAGENAME:$IMAGETAG docker push $IMAGE_NAME:latest ''' } } } }

post { always { sh 'docker logout || true' cleanWs() } } }

---

18. Deploy ke Server via SSH

18.1 Tambahkan Credential SSH

Buka:

TEXT
Manage Jenkins > Credentials

Tambahkan:

TEXT
Kind: SSH Username with private key
ID: prod-server-ssh
Username: deploy
Private Key: isi private key

18.2 Jenkinsfile Deploy

GROOVY
pipeline {
    agent any

stages { stage('Deploy') { steps { sshagent(credentials: ['prod-server-ssh']) { sh ''' ssh -o StrictHostKeyChecking=no deploy@192.168.1.10 " cd /opt/myapp && git pull && docker compose down && docker compose up -d --build " ''' } } } } }

---

19. Trigger Build Otomatis

19.1 Build Manual

Klik:

TEXT
Build Now

19.2 Poll SCM

Jenkins mengecek repository secara berkala.

Contoh setiap 5 menit:

TEXT
H/5    

Konfigurasi:

TEXT
Configure > Build Triggers > Poll SCM

19.3 Build Periodically

Build berdasarkan jadwal, tidak peduli ada perubahan Git atau tidak.

Contoh setiap hari jam 1 malam:

TEXT
0 1   *

19.4 Webhook Git

Webhook adalah cara paling umum untuk development modern.

Flow:

TEXT
Developer push ke Git
        ↓
GitHub / GitLab mengirim webhook ke Jenkins
        ↓
Jenkins menjalankan pipeline

Contoh URL webhook:

TEXT
http://jenkins.domain.com/github-webhook/

atau untuk GitLab biasanya menggunakan plugin GitLab.

---

20. Parameterized Build

Parameterized build digunakan agar user bisa memilih parameter sebelum menjalankan pipeline.

Contoh:

GROOVY
pipeline {
    agent any

parameters { choice( name: 'ENVIRONMENT', choices: ['dev', 'staging', 'production'], description: 'Pilih environment deployment' )

string( name: 'BRANCH_NAME', defaultValue: 'main', description: 'Branch yang akan dibuild' )

booleanParam( name: 'RUN_TEST', defaultValue: true, description: 'Jalankan test?' ) }

stages { stage('Show Parameters') { steps { echo "Environment: ${params.ENVIRONMENT}" echo "Branch: ${params.BRANCH_NAME}" echo "Run Test: ${params.RUN_TEST}" } } } }

---

21. Environment Variable di Jenkins

Environment variable digunakan untuk menyimpan nilai yang dipakai berulang.

Contoh:

GROOVY
pipeline {
    agent any

environment { APP_NAME = 'myapp' APP_ENV = 'dev' }

stages { stage('Print Env') { steps { sh 'echo APPNAME=$APPNAME' sh 'echo APPENV=$APPENV' } } } }

Environment variable bawaan Jenkins yang sering dipakai:

VariableFungsi
BUILDNUMBERNomor build
JOBNAMENama job
WORKSPACELokasi workspace
BUILDURLURL build
GITBRANCHBranch Git
GIT_COMMITCommit hash

---

22. Menggunakan Credential di Jenkinsfile

Jangan pernah menulis password langsung di Jenkinsfile.

Contoh yang salah:

GROOVY
environment {
    PASSWORD = 'password123'
}

Contoh yang benar:

GROOVY
pipeline {
    agent any

stages { stage('Use Secret') { steps { withCredentials([ string( credentialsId: 'api-token', variable: 'API_TOKEN' ) ]) { sh ''' curl -H "Authorization: Bearer $API_TOKEN" https://api.example.com ''' } } } } }

---

23. Post Action

post digunakan untuk aksi setelah pipeline selesai.

Contoh:

GROOVY
pipeline {
    agent any

stages { stage('Build') { steps { sh 'echo build' } } }

post { success { echo 'Pipeline sukses' }

failure { echo 'Pipeline gagal' }

always { echo 'Selalu dijalankan' cleanWs() } } }

Post condition yang umum:

ConditionFungsi
alwaysSelalu jalan
successJalan jika sukses
failureJalan jika gagal
unstableJalan jika unstable
changedJalan jika status berubah dari build sebelumnya

---

24. Parallel Stage

Parallel stage digunakan untuk menjalankan beberapa proses secara bersamaan.

Contoh:

GROOVY
pipeline {
    agent any

stages { stage('Parallel Test') { parallel { stage('Unit Test') { steps { sh 'echo unit test' } }

stage('Integration Test') { steps { sh 'echo integration test' } }

stage('Security Scan') { steps { sh 'echo security scan' } } } } } }

---

25. Input Manual Approval

Untuk deploy production, biasanya perlu approval manual.

Contoh:

GROOVY
pipeline {
    agent any

stages { stage('Build') { steps { sh 'echo build aplikasi' } }

stage('Approval') { steps { input message: 'Deploy ke production?', ok: 'Deploy' } }

stage('Deploy Production') { steps { sh 'echo deploy production' } } } }

---

26. Archive Artifact

Artifact adalah file hasil build.

Contoh archive file .jar:

GROOVY
pipeline {
    agent any

stages { stage('Build') { steps { sh 'mvn clean package' } }

stage('Archive') { steps { archiveArtifacts artifacts: 'target/*.jar', fingerprint: true } } } }

Hasil artifact bisa didownload dari halaman build Jenkins.

---

27. Test Report JUnit

Untuk membaca hasil test dalam format JUnit XML:

GROOVY
pipeline {
    agent any

stages { stage('Test') { steps { sh 'mvn test' } } }

post { always { junit 'target/surefire-reports/*.xml' } } }

---

28. Clean Workspace

Workspace sebaiknya dibersihkan agar build berikutnya tidak memakai file lama.

GROOVY
post {
    always {
        cleanWs()
    }
}

Jika plugin Workspace Cleanup belum ada, install dari:

TEXT
Manage Jenkins > Plugins

---

29. Multibranch Pipeline

Multibranch Pipeline cocok untuk repository yang punya banyak branch.

Contoh:

TEXT
main
develop
feature/login
feature/payment
release/v1.0

Dengan Multibranch Pipeline, Jenkins bisa otomatis mendeteksi branch yang punya Jenkinsfile.

29.1 Membuat Multibranch Pipeline

Klik:

TEXT
New Item

Pilih:

TEXT
Multibranch Pipeline

Isi:

TEXT
Repository URL
Credential
Branch source
Scan repository

Jenkins akan mencari Jenkinsfile di setiap branch.

---

30. Contoh Workflow Development dengan Jenkins

30.1 Flow Development Umum

TEXT
Developer membuat branch feature
        ↓
Developer push branch ke Git
        ↓
Jenkins build branch tersebut
        ↓
Jenkins menjalankan test
        ↓
Developer membuat pull request / merge request
        ↓
Jenkins validasi pull request
        ↓
Code direview
        ↓
Merge ke develop / main
        ↓
Jenkins build ulang
        ↓
Deploy ke dev / staging
        ↓
Approval manual
        ↓
Deploy production

30.2 Branch Strategy

Contoh sederhana:

BranchFungsi
mainProduction-ready
developIntegrasi development
feature/Pengembangan fitur
bugfix/Perbaikan bug
release/Persiapan rilis
hotfix/Perbaikan cepat production

---

31. Contoh Jenkinsfile Lengkap untuk Development

Contoh untuk aplikasi Spring Boot + Docker + deploy staging.

GROOVY
pipeline {
    agent any

parameters { choice( name: 'DEPLOY_ENV', choices: ['dev', 'staging'], description: 'Pilih environment deployment' ) }

environment { APP_NAME = 'plato-app' IMAGE_NAME = 'registry.example.com/plato-app' IMAGETAG = "${BUILDNUMBER}" }

stages { stage('Checkout') { steps { checkout scm } }

stage('Build App') { steps { sh 'mvn clean package -DskipTests' } }

stage('Unit Test') { steps { sh 'mvn test' }

post { always { junit 'target/surefire-reports/*.xml' } } }

stage('Build Docker Image') { steps { sh ''' docker build -t $IMAGENAME:$IMAGETAG . docker tag $IMAGENAME:$IMAGETAG $IMAGE_NAME:latest ''' } }

stage('Push Docker Image') { steps { withCredentials([ usernamePassword( credentialsId: 'registry-login', usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS' ) ]) { sh ''' echo "$REGISTRYPASS" | docker login registry.example.com -u "$REGISTRYUSER" --password-stdin docker push $IMAGENAME:$IMAGETAG docker push $IMAGE_NAME:latest ''' } } }

stage('Deploy') { steps { sshagent(credentials: ['staging-server-ssh']) { sh ''' ssh -o StrictHostKeyChecking=no deploy@192.168.1.20 " cd /opt/plato-app && export IMAGETAG=$IMAGETAG && docker compose pull && docker compose up -d " ''' } } } }

post { success { echo "Pipeline sukses: $BUILD_URL" }

failure { echo "Pipeline gagal: $BUILD_URL" }

always { cleanWs() } } }

---

32. Jenkins dengan Docker Compose

Contoh docker-compose.yml untuk Jenkins:

YAML
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    restart: unless-stopped
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkinshome:/var/jenkinshome

volumes: jenkins_home:

Jalankan:

BASH
docker compose up -d

Cek log:

BASH
docker compose logs -f

---

33. Menjalankan Jenkins di Belakang Nginx Reverse Proxy

Contoh konfigurasi Nginx:

NGINX
server {
    listen 80;
    server_name jenkins.example.com;

location / { proxy_pass http://127.0.0.1:8080;

proxysetheader Host $host; proxysetheader X-Real-IP $remote_addr; proxysetheader X-Forwarded-For $proxyaddxforwardedfor; proxysetheader X-Forwarded-Proto $scheme;

proxyhttpversion 1.1; proxyrequestbuffering off; } }

Aktifkan:

BASH
sudo nginx -t
sudo systemctl reload nginx

---

34. Backup Jenkins

Data utama Jenkins ada di:

Native Linux:

TEXT
/var/lib/jenkins

Docker:

TEXT
/var/jenkins_home

Backup sederhana:

BASH
sudo tar -czvf jenkins-backup.tar.gz /var/lib/jenkins

Untuk Docker volume:

BASH
docker run --rm \
  -v jenkins_home:/data \
  -v $(pwd):/backup \
  alpine \
  tar -czvf /backup/jenkins-backup.tar.gz /data

Yang penting dibackup:

  • Job
  • Jenkinsfile jika tidak disimpan di Git
  • Credential
  • Plugin list
  • User config
  • Global config
  • Build history jika diperlukan

---

35. Restore Jenkins

Stop Jenkins:

BASH
sudo systemctl stop jenkins

Restore:

BASH
sudo tar -xzvf jenkins-backup.tar.gz -C /

Perbaiki permission:

BASH
sudo chown -R jenkins:jenkins /var/lib/jenkins

Start Jenkins:

BASH
sudo systemctl start jenkins

---

36. Security Dasar Jenkins

Hal yang wajib diperhatikan:

36.1 Aktifkan Authentication

Pastikan user harus login sebelum memakai Jenkins.

Menu:

TEXT
Manage Jenkins > Security

36.2 Gunakan Role / Matrix Authorization

Pisahkan akses:

RoleAkses
AdminFull access
DeveloperBuild dan lihat log
DevOpsManage job dan credential tertentu
ViewerRead-only

36.3 Jangan Simpan Password di Jenkinsfile

Gunakan:

TEXT
Credentials

36.4 Batasi Akses Jenkins

Jenkins sebaiknya tidak dibuka bebas ke internet.

Gunakan:

  • VPN
  • IP whitelist
  • Reverse proxy
  • HTTPS
  • SSO jika ada
  • Firewall

36.5 Update Jenkins dan Plugin Berkala

Cek:

TEXT
Manage Jenkins > Plugins

---

37. Plugin Jenkins yang Sering Dipakai

PluginFungsi
Git PluginIntegrasi Git
PipelineMembuat pipeline
Credentials BindingMenggunakan credential di pipeline
SSH AgentSSH ke server
Docker PipelineIntegrasi Docker
Workspace CleanupMembersihkan workspace
JUnitMembaca test report
Maven IntegrationBuild Maven
Gradle PluginBuild Gradle
Blue OceanTampilan pipeline lebih visual
Role-based Authorization StrategyManajemen role user
SonarQube ScannerIntegrasi SonarQube
Slack NotificationNotifikasi Slack
Email ExtensionEmail notification

---

38. Best Practice Jenkins untuk Development

38.1 Simpan Pipeline di Git

Gunakan:

TEXT
Jenkinsfile

Jangan terlalu banyak konfigurasi manual di UI.

38.2 Gunakan Declarative Pipeline

Lebih mudah dibaca dan dirawat.

38.3 Pisahkan Environment

Contoh:

TEXT
dev
staging
production

38.4 Jangan Build Berat di Controller

Idealnya Jenkins controller hanya mengatur pipeline.

Build berat sebaiknya dijalankan di agent.

38.5 Gunakan Credential Jenkins

Jangan hardcode secret.

38.6 Bersihkan Workspace

Gunakan:

GROOVY
cleanWs()

38.7 Gunakan Artifact dan Report

Simpan hasil build:

GROOVY
archiveArtifacts

Simpan hasil test:

GROOVY
junit

38.8 Gunakan Manual Approval untuk Production

Production sebaiknya tidak otomatis deploy tanpa approval.

38.9 Gunakan Webhook

Webhook lebih efisien daripada polling Git terlalu sering.

38.10 Buat Naming Job yang Rapi

Contoh:

TEXT
plato-api-dev
plato-api-staging
plato-api-production
plato-web-dev
plato-web-staging

---

39. Troubleshooting Jenkins

39.1 Jenkins Tidak Bisa Dibuka

Cek service:

BASH
sudo systemctl status jenkins

Cek port:

BASH
sudo ss -tulpn | grep 8080

Cek log:

BASH
sudo journalctl -u jenkins -f

39.2 Lupa Password Admin

Stop Jenkins:

BASH
sudo systemctl stop jenkins

Edit file config:

BASH
sudo nano /var/lib/jenkins/config.xml

Cari:

XML
<useSecurity>true</useSecurity>

Ubah menjadi:

XML
<useSecurity>false</useSecurity>

Start Jenkins:

BASH
sudo systemctl start jenkins

Login tanpa security, lalu reset user/password.

Setelah selesai, aktifkan lagi security.

39.3 Git Clone Gagal

Cek:

  • Repository URL benar
  • Credential benar
  • Jenkins server bisa akses Git
  • SSH key sudah didaftarkan
  • Branch benar

Test dari server Jenkins:

BASH
sudo -u jenkins git ls-remote https://github.com/user/repo.git

39.4 Permission Docker Error

Jika muncul error:

TEXT
permission denied while trying to connect to the Docker daemon socket

Tambahkan user Jenkins ke group Docker:

BASH
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins

Cek:

BASH
groups jenkins

39.5 Maven Tidak Ditemukan

Cek konfigurasi:

TEXT
Manage Jenkins > Tools

Pastikan nama Maven di Jenkinsfile sama dengan konfigurasi Jenkins.

Contoh:

GROOVY
tools {
    maven 'Maven-3'
}

39.6 Plugin Error

Coba:

TEXT
Manage Jenkins > Plugins > Updates

Atau restart Jenkins:

BASH
sudo systemctl restart jenkins

---

40. Contoh Pipeline Sederhana untuk Tim Development

Gunakan ini sebagai template awal.

GROOVY
pipeline {
    agent any

environment { APP_NAME = 'my-app' }

stages { stage('Checkout') { steps { checkout scm } }

stage('Install / Build') { steps { sh ''' echo "Build $APP_NAME" ./mvnw clean package -DskipTests ''' } }

stage('Test') { steps { sh './mvnw test' }

post { always { junit 'target/surefire-reports/*.xml' } } }

stage('Package') { steps { archiveArtifacts artifacts: 'target/*.jar', fingerprint: true } } }

post { success { echo 'Build sukses' }

failure { echo 'Build gagal' }

always { cleanWs() } } }

---

41. Alur Belajar Jenkins yang Disarankan

Urutan belajar:

TEXT
1. Install Jenkins
  1. Buat Freestyle Job
  2. Integrasi dengan Git
  3. Buat Pipeline sederhana
  4. Simpan Jenkinsfile di repository
  5. Tambahkan build project nyata
  6. Tambahkan test
  7. Tambahkan artifact
  8. Tambahkan credential
  9. Tambahkan deploy ke server
  10. Tambahkan webhook
  11. Gunakan Multibranch Pipeline
  12. Tambahkan Docker build
  13. Tambahkan approval production
  14. Tambahkan backup dan security

---

42. Ringkasan

Jenkins adalah tools automation yang sangat berguna untuk development karena bisa mengotomatisasi proses build, test, package, dan deploy.

Fitur Jenkins yang paling sering dipakai dalam development:

  • Job
  • Pipeline
  • Jenkinsfile
  • Git integration
  • Credential
  • Environment variable
  • Parameterized build
  • Webhook
  • Artifact archive
  • Test report
  • Docker build
  • SSH deploy
  • Multibranch pipeline
  • Manual approval
  • Plugin
  • Backup
  • Security

Untuk project modern, gunakan Jenkins dengan pola:

TEXT
Git + Jenkinsfile + Pipeline + Credential + Webhook + Docker + Deploy otomatis

Dengan pola tersebut, proses development menjadi lebih rapi, konsisten, dan mudah diaudit.

jenkinsci/cdpipelinejenkinsfiledevopsgitdockerdeploymentautomationbuildtestwebhookmultibranch pipelinecredentialdevelopment