Masdika Loading..
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

  • Home
  • Portfolio
  • Services
  • Resume
  • Skills
  • Blog
  • Contact
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

Download CV

Recent Posts

  • Dari Laptop Bekas Jadi Server Pribadi: Cara Membangun Home Server Murah Menggunakan ISP MyRepublic dengan Public IP
  • Pembuatan Subnet dan Alokasi IP Address pada Amazon Web Service VPC
  • Instalasi dan Konfigurasi AWS CLI pada EC2 (Lab Guide)
  • Membangun Arsitektur Web + Database Highly Available di AWS (RDS Multi-AZ)
  • Cara Reset Password OpenBSD di Proxmox via VNC

Recent Comments

  1. Alif on Jangan Gunakan latest Tag pada Docker Images! Ini Alasannya
  2. Sahrull on Panduan Lengkap Anti-DDoS: Installasi Iptables, Hardening, dan Cloudflare Proxy
  3. VSTRA on Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern
  4. Rikiy on Cara Mudah Deploy Website Node.js Menggunakan Docker
  5. Masdika.BIZ.ID on Disaster Recovery Cluster (DRC) WordPress dengan MariaDB Galera dan Load Balancer Caddy

Categories

  • Tutorial

Masdika.ID

  • About
  • Terms & Conditions
  • Privacy Policy
BLOG POST

Membangun Jenkins Production Stabil dengan Inbound Agent dan Traefik SSL

February 14, 2026 Tutorial by Masdika.ID
Membangun Jenkins Production Stabil dengan Inbound Agent dan Traefik SSL

Panduan ini menjelaskan instalasi Jenkins production menggunakan Docker + Traefik (SSL otomatis via DNS Challenge Cloudflare), dengan fokus utama pada konfigurasi agent bernama AGENT-1 yang memiliki label masdika.

Artikel ini dibuat berdasarkan implementasi real production sehingga step-by-step dan praktis.

๐Ÿ—๏ธ Arsitektur yang Digunakan

Internet
   โ”‚
Cloudflare (DNS)
   โ”‚
Traefik (SSL + Reverse Proxy)
   โ”‚
Jenkins Controller
   โ”‚
Jenkins Agent (AGENT-1 | label: masdika)

Komponen:

  • Traefik โ†’ Reverse proxy + Auto SSL Let’s Encrypt (DNS Challenge)
  • Jenkins Controller โ†’ Server utama Jenkins
  • Jenkins Agent (AGENT-1) โ†’ Executor untuk menjalankan build

๐Ÿ“ฆ 1. Docker Compose Production

File: /opt/jenkins.masdika.id/docker-compose.yml

services:

  traefik:
    image: traefik:latest
    container_name: traefik
    restart: always
    command:
      - "--api.dashboard=false"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"

      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"

      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"

      - "--certificatesresolvers.letsencrypt.acme.dnschallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare"
      - "--certificatesresolvers.letsencrypt.acme.email=me@masdika.id"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.letsencrypt.acme.dnschallenge.delaybeforecheck=10"

    ports:
      - "80:80"
      - "443:443"

    environment:
      - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}

    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

    networks:
      - proxy

  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins-controller
    restart: always
    user: root

    environment:
      - JAVA_OPTS=-Xms512m -Xmx1024m

    volumes:
      - jenkins_data:/var/jenkins_home

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.jenkins.rule=Host(`jenkins.masdika.id`)"
      - "traefik.http.routers.jenkins.entrypoints=websecure"
      - "traefik.http.routers.jenkins.tls.certresolver=letsencrypt"
      - "traefik.http.services.jenkins.loadbalancer.server.port=8080"

    networks:
      - proxy

  jenkins-agent:
    image: jenkins/inbound-agent
    container_name: jenkins-agent-1
    restart: always
    command: >
      -url http://jenkins-controller:8080
      -secret 255cc8b23312974c7873415ba760997c41074d76d8ae1bc39b69aea4a011b1c2
      -name AGENT-1
      -webSocket
      -workDir /home/jenkins
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - proxy

volumes:
  jenkins_data:

networks:
  proxy:
    driver: bridge

Jalankan:

docker compose up -d

๐Ÿค– 2. Konfigurasi Agent (AGENT-1)

Masuk ke Jenkins UI:

Manage Jenkins โ†’ Nodes โ†’ New Node

Isi seperti ini:

Name:

AGENT-1

Type:

Permanent Agent

Konfigurasi penting:

  • Remote root directory: /home/jenkins
  • Labels: masdika
  • Launch method: Launch agent by connecting it to the controller

Klik Save.

Kemudian Jenkins akan memberikan:

  • Secret key
  • Command connect agent

Secret itulah yang dimasukkan ke docker-compose.

๐Ÿท๏ธ Kenapa Label = masdika?

Label digunakan untuk menentukan build dijalankan di node mana.

Karena agent production kita diberi label:

masdika

Maka pipeline bisa diarahkan khusus ke agent ini.

๐Ÿงช 3. Contoh Pipeline Menggunakan AGENT-1

pipeline {
    agent { label 'masdika' }

    stages {
        stage('Info') {
            steps {
                sh 'hostname'
                sh 'docker --version'
            }
        }

        stage('Build Example') {
            steps {
                sh 'echo Build berjalan di AGENT-1'
            }
        }
    }
}

Artinya:

  • Jenkins TIDAK akan menggunakan built-in node
  • Build hanya berjalan di AGENT-1

๐Ÿง  Built-in Node Dipakai atau Tidak?

Secara default:

  • Built-in node tetap ada
  • Tapi bisa dibuat tidak punya executor (set ke 0)

Manage Jenkins โ†’ Nodes โ†’ Built-in Node โ†’ Configure

Set:

Number of executors = 0

Sehingga semua job production hanya jalan di AGENT-1.

๐Ÿ” Kenapa Pakai WebSocket?

Kita menggunakan:

-webSocket

Karena:

  • Tidak perlu buka port 50000
  • Aman di balik Traefik + HTTPS
  • Cocok untuk production environment

๐Ÿ’พ Production Best Practice

Untuk server 2GB RAM:

Tambahkan swap minimal 2GB.

Controller:

JAVA_OPTS=-Xms512m -Xmx1024m

Agent:

  • Jalankan Docker socket jika butuh build image
  • Gunakan label khusus
  • Jangan gunakan built-in node untuk build production

โœ… Status Akhir Yang Benar

Di Jenkins UI:

Nodes:

  • Built-in Node โ†’ 0 executors
  • AGENT-1 โ†’ Online
  • Label: masdika

Jika AGENT-1 berwarna hijau dan status Connected, artinya production setup berhasil.

๐ŸŽฏ Kesimpulan

Setup ini menghasilkan:

  • SSL otomatis (DNS Challenge Cloudflare)
  • Jenkins aman di HTTPS
  • Agent terpisah dari controller
  • Build hanya berjalan di AGENT-1
  • Arsitektur clean dan production-ready

Dengan label masdika, kita bisa scaling ke depan dengan menambah agent baru tanpa mengubah pipeline. Production CI yang rapi, aman, dan scalable

Share:
Tags: jenkinsssltraefik
Related Posts
Instalasi SSL Let’s Encrypt di Proxmox VE via Web UI

Let’s Encrypt adalah layanan gratis untuk membuat sertifikat SSL agar akses web Proxmox menjadi aman (HTTPS). Mulai dari versi 6.3,…

Deploy Go REST API di Kubernetes (K3s) dengan PostgreSQL, SSL Cloudflare, dan Autoscaling

Artikel ini akan membahas langkah end-to-end untuk membangun aplikasi Go REST API, membuat image Docker, lalu melakukan deployment di Kubernetes…

Post navigation

Prev
Next
ยฉ 2025 www.masdika.id โ€” Semua hak cipta dilindungi