Tutorial Jenkins Dasar
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:
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
| Istilah | Penjelasan |
|---|---|
| Job / Project | Task automation di Jenkins |
| Build | Proses menjalankan job |
| Pipeline | Alur kerja CI/CD yang terdiri dari beberapa stage |
| Jenkinsfile | File konfigurasi pipeline yang disimpan di repository |
| Agent / Node | Mesin yang menjalankan build |
| Workspace | Folder kerja sementara Jenkins untuk build |
| Plugin | Ekstensi Jenkins untuk menambah fitur |
| Credential | Penyimpanan username, password, token, SSH key secara aman |
| Artifact | File hasil build, misalnya .jar, .war, .zip, atau image Docker |
| Trigger | Pemicu 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:
java -version
Jika belum ada Java, install dulu.
---
4. Instalasi Jenkins di Ubuntu / Debian
4.1 Update Server
sudo apt update
sudo apt upgrade -y
4.2 Install Java
sudo apt install fontconfig openjdk-17-jre -y
Cek versi Java:
java -version
Contoh output:
openjdk version "17.x.x"
4.3 Tambahkan Repository Jenkins
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:
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:
sudo apt update
4.4 Install Jenkins
sudo apt install jenkins -y
4.5 Jalankan Jenkins
sudo systemctl enable jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins
Jika aktif, statusnya akan terlihat seperti:
active (running)
4.6 Buka Firewall
Jika memakai UFW:
sudo ufw allow 8080
sudo ufw reload
Akses Jenkins:
http://IP_SERVER:8080
---
5. Instalasi Jenkins dengan Docker
Cara ini cocok untuk development lokal atau lab testing.
5.1 Jalankan Jenkins Container
docker volume create jenkins_home
docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-v jenkinshome:/var/jenkinshome \
jenkins/jenkins:lts
5.2 Cek Log Jenkins
docker logs -f jenkins
Ambil initial password dari log, atau jalankan:
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Akses:
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:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Jika install Docker:
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Masukkan password tersebut ke halaman Jenkins.
6.2 Install Plugin
Pilih:
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:
Username: admin
Password: password-kuat
Full name: Administrator
Email: email@domain.com
6.4 Jenkins URL
Contoh:
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:
Pipeline
atau:
Multibranch Pipeline
---
8. Membuat Job Freestyle Sederhana
Freestyle cocok untuk belajar dasar Jenkins.
8.1 Buat Job Baru
Klik:
New Item
Isi nama:
hello-jenkins
Pilih:
Freestyle project
Klik:
OK
8.2 Tambahkan Build Step
Pilih:
Build Steps > Execute shell
Isi:
echo "Hello Jenkins"
date
whoami
pwd
Klik:
Save
8.3 Jalankan Build
Klik:
Build Now
Lihat hasilnya di:
Build History > Console Output
---
9. Integrasi Jenkins dengan Git
9.1 Install Git di Server Jenkins
sudo apt install git -y
Cek:
git --version
9.2 Buat Job dengan Source Code dari Git
Buat job baru:
New Item > Freestyle project
Pada bagian Source Code Management, pilih:
Git
Isi repository URL:
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:
Manage Jenkins
Lalu:
Credentials
Pilih scope:
System > Global credentials
Klik:
Add Credentials
Jenis credential yang umum:
| Jenis | Kegunaan |
|---|---|
| Username with password | Login Git, Docker registry, server |
| Secret text | Token API |
| SSH Username with private key | SSH ke server atau Git |
| Secret file | File konfigurasi rahasia |
Contoh ID credential:
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:
Jenkinsfile
Letaknya di root project:
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:
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:
| Bagian | Fungsi |
|---|---|
pipeline | Blok utama pipeline |
agent any | Build boleh jalan di agent mana saja |
stages | Kumpulan tahapan |
stage | Satu tahapan proses |
steps | Perintah yang dijalankan |
---
13. Pipeline untuk Project Java Maven
Contoh project Spring Boot dengan Maven.
13.1 Struktur Project
spring-app/
├── src/
├── pom.xml
└── Jenkinsfile
13.2 Jenkinsfile
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:
Manage Jenkins > Tools
Tambahkan:
JDK
Name: JDK-17
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
Tambahkan Maven:
Maven
Name: Maven-3
Install automatically: yes
---
14. Pipeline untuk Project Node.js
Contoh Jenkinsfile:
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:
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.
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:
dockerhub-login
Jenkinsfile:
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:
Manage Jenkins > Credentials
Tambahkan:
Kind: SSH Username with private key
ID: prod-server-ssh
Username: deploy
Private Key: isi private key
18.2 Jenkinsfile Deploy
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:
Build Now
19.2 Poll SCM
Jenkins mengecek repository secara berkala.
Contoh setiap 5 menit:
H/5
Konfigurasi:
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:
0 1 *
19.4 Webhook Git
Webhook adalah cara paling umum untuk development modern.
Flow:
Developer push ke Git
↓
GitHub / GitLab mengirim webhook ke Jenkins
↓
Jenkins menjalankan pipeline
Contoh URL webhook:
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:
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:
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:
| Variable | Fungsi |
|---|---|
BUILDNUMBER | Nomor build |
JOBNAME | Nama job |
WORKSPACE | Lokasi workspace |
BUILDURL | URL build |
GITBRANCH | Branch Git |
GIT_COMMIT | Commit hash |
---
22. Menggunakan Credential di Jenkinsfile
Jangan pernah menulis password langsung di Jenkinsfile.
Contoh yang salah:
environment {
PASSWORD = 'password123'
}
Contoh yang benar:
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:
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:
| Condition | Fungsi |
|---|---|
always | Selalu jalan |
success | Jalan jika sukses |
failure | Jalan jika gagal |
unstable | Jalan jika unstable |
changed | Jalan jika status berubah dari build sebelumnya |
---
24. Parallel Stage
Parallel stage digunakan untuk menjalankan beberapa proses secara bersamaan.
Contoh:
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:
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:
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:
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.
post {
always {
cleanWs()
}
}
Jika plugin Workspace Cleanup belum ada, install dari:
Manage Jenkins > Plugins
---
29. Multibranch Pipeline
Multibranch Pipeline cocok untuk repository yang punya banyak branch.
Contoh:
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:
New Item
Pilih:
Multibranch Pipeline
Isi:
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
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:
| Branch | Fungsi |
|---|---|
main | Production-ready |
develop | Integrasi 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.
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:
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:
docker compose up -d
Cek log:
docker compose logs -f
---
33. Menjalankan Jenkins di Belakang Nginx Reverse Proxy
Contoh konfigurasi 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:
sudo nginx -t
sudo systemctl reload nginx
---
34. Backup Jenkins
Data utama Jenkins ada di:
Native Linux:
/var/lib/jenkins
Docker:
/var/jenkins_home
Backup sederhana:
sudo tar -czvf jenkins-backup.tar.gz /var/lib/jenkins
Untuk Docker volume:
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:
sudo systemctl stop jenkins
Restore:
sudo tar -xzvf jenkins-backup.tar.gz -C /
Perbaiki permission:
sudo chown -R jenkins:jenkins /var/lib/jenkins
Start Jenkins:
sudo systemctl start jenkins
---
36. Security Dasar Jenkins
Hal yang wajib diperhatikan:
36.1 Aktifkan Authentication
Pastikan user harus login sebelum memakai Jenkins.
Menu:
Manage Jenkins > Security
36.2 Gunakan Role / Matrix Authorization
Pisahkan akses:
| Role | Akses |
|---|---|
| Admin | Full access |
| Developer | Build dan lihat log |
| DevOps | Manage job dan credential tertentu |
| Viewer | Read-only |
36.3 Jangan Simpan Password di Jenkinsfile
Gunakan:
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:
Manage Jenkins > Plugins
---
37. Plugin Jenkins yang Sering Dipakai
| Plugin | Fungsi |
|---|---|
| Git Plugin | Integrasi Git |
| Pipeline | Membuat pipeline |
| Credentials Binding | Menggunakan credential di pipeline |
| SSH Agent | SSH ke server |
| Docker Pipeline | Integrasi Docker |
| Workspace Cleanup | Membersihkan workspace |
| JUnit | Membaca test report |
| Maven Integration | Build Maven |
| Gradle Plugin | Build Gradle |
| Blue Ocean | Tampilan pipeline lebih visual |
| Role-based Authorization Strategy | Manajemen role user |
| SonarQube Scanner | Integrasi SonarQube |
| Slack Notification | Notifikasi Slack |
| Email Extension | Email notification |
---
38. Best Practice Jenkins untuk Development
38.1 Simpan Pipeline di Git
Gunakan:
Jenkinsfile
Jangan terlalu banyak konfigurasi manual di UI.
38.2 Gunakan Declarative Pipeline
Lebih mudah dibaca dan dirawat.
38.3 Pisahkan Environment
Contoh:
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:
cleanWs()
38.7 Gunakan Artifact dan Report
Simpan hasil build:
archiveArtifacts
Simpan hasil test:
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:
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:
sudo systemctl status jenkins
Cek port:
sudo ss -tulpn | grep 8080
Cek log:
sudo journalctl -u jenkins -f
39.2 Lupa Password Admin
Stop Jenkins:
sudo systemctl stop jenkins
Edit file config:
sudo nano /var/lib/jenkins/config.xml
Cari:
<useSecurity>true</useSecurity>
Ubah menjadi:
<useSecurity>false</useSecurity>
Start Jenkins:
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:
sudo -u jenkins git ls-remote https://github.com/user/repo.git
39.4 Permission Docker Error
Jika muncul error:
permission denied while trying to connect to the Docker daemon socket
Tambahkan user Jenkins ke group Docker:
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins
Cek:
groups jenkins
39.5 Maven Tidak Ditemukan
Cek konfigurasi:
Manage Jenkins > Tools
Pastikan nama Maven di Jenkinsfile sama dengan konfigurasi Jenkins.
Contoh:
tools {
maven 'Maven-3'
}
39.6 Plugin Error
Coba:
Manage Jenkins > Plugins > Updates
Atau restart Jenkins:
sudo systemctl restart jenkins
---
40. Contoh Pipeline Sederhana untuk Tim Development
Gunakan ini sebagai template awal.
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:
1. Install Jenkins
- Buat Freestyle Job
- Integrasi dengan Git
- Buat Pipeline sederhana
- Simpan Jenkinsfile di repository
- Tambahkan build project nyata
- Tambahkan test
- Tambahkan artifact
- Tambahkan credential
- Tambahkan deploy ke server
- Tambahkan webhook
- Gunakan Multibranch Pipeline
- Tambahkan Docker build
- Tambahkan approval production
- 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:
Git + Jenkinsfile + Pipeline + Credential + Webhook + Docker + Deploy otomatis
Dengan pola tersebut, proses development menjadi lebih rapi, konsisten, dan mudah diaudit.