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:

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:

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 jenkins_home:/var/jenkins_home \
  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:

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:

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:

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

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'
        IMAGE_TAG = "${BUILD_NUMBER}"
    }

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

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

        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'
        IMAGE_TAG = "${BUILD_NUMBER}"
    }

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

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

        stage('Docker Login and Push') {
            steps {
                withCredentials([
                    usernamePassword(
                        credentialsId: 'dockerhub-login',
                        usernameVariable: 'DOCKER_USER',
                        passwordVariable: 'DOCKER_PASS'
                    )
                ]) {
                    sh '''
                        echo "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin
                        docker push $IMAGE_NAME:$IMAGE_TAG
                        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 APP_NAME=$APP_NAME'
                sh 'echo APP_ENV=$APP_ENV'
            }
        }
    }
}

Environment variable bawaan Jenkins yang sering dipakai:

VariableFungsi
BUILD_NUMBERNomor build
JOB_NAMENama job
WORKSPACELokasi workspace
BUILD_URLURL build
GIT_BRANCHBranch Git
GIT_COMMITCommit 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:

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:

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:

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.

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'
        IMAGE_TAG = "${BUILD_NUMBER}"
    }

    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 $IMAGE_NAME:$IMAGE_TAG .
                    docker tag $IMAGE_NAME:$IMAGE_TAG $IMAGE_NAME:latest
                '''
            }
        }

        stage('Push Docker Image') {
            steps {
                withCredentials([
                    usernamePassword(
                        credentialsId: 'registry-login',
                        usernameVariable: 'REGISTRY_USER',
                        passwordVariable: 'REGISTRY_PASS'
                    )
                ]) {
                    sh '''
                        echo "$REGISTRY_PASS" | docker login registry.example.com -u "$REGISTRY_USER" --password-stdin
                        docker push $IMAGE_NAME:$IMAGE_TAG
                        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 IMAGE_TAG=$IMAGE_TAG &&
                            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:
      - jenkins_home:/var/jenkins_home

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;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_request_buffering 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:

RoleAkses
AdminFull access
DeveloperBuild dan lihat log
DevOpsManage job dan credential tertentu
ViewerRead-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

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:

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
2. Buat Freestyle Job
3. Integrasi dengan Git
4. Buat Pipeline sederhana
5. Simpan Jenkinsfile di repository
6. Tambahkan build project nyata
7. Tambahkan test
8. Tambahkan artifact
9. Tambahkan credential
10. Tambahkan deploy ke server
11. Tambahkan webhook
12. Gunakan Multibranch Pipeline
13. Tambahkan Docker build
14. Tambahkan approval production
15. 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.

jenkinsci/cdpipelinejenkinsfiledevopsgitdockerdeploymentautomationbuildtestwebhookmultibranch pipelinecredentialdevelopment
Nirantara Logo

Published by Nirantara

Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by jsturana.

Learn more about Nirantara