Belajar Membuat Pipeline CI/CD untuk Proyek Java Anda di Localhost

Rekomendasi musik untuk membaca artikel ini: Positive vibes 🍉Best tiktok songs for a positive day

Pernahkah kamu penasaran bagaimana aplikasi yang kita gunakan sehari-hari bisa terus diperbarui dengan fitur-fitur baru tanpa adanya gangguan? Atau Ingin menjadi developer yang lebih produktif dan efisien? Investasikan waktu kamu untuk mempelajari CI/CD. Dengan mengotomatiskan proses build, test, dan deploy, kamu bisa fokus pada hal yang lebih penting: mengembangkan fitur-fitur baru yang inovatif. Artikel ini akan menunjukkan bagaimana CI/CD juga bisa menjadi game-changer dalam karir kamu sebagai developer.

Kita akan mempelajari GitLab dan Jenkins untuk CI/CD di localhost menggunakan Docker, terutama untuk pengembangan Java. Docker dapat membantu Anda mengatur lingkungan yang terisolasi dan mudah dikonfigurasi tanpa perlu menginstal banyak perangkat lunak secara manual di sistem utama Anda.

Dengan Docker, Kita bisa:

  1. Menjalankan GitLab sebagai server repository Git dan CI/CD pipeline.
  2. Menjalankan Jenkins sebagai server CI/CD yang dapat diintegrasikan dengan GitLab atau digunakan secara mandiri.
  3. Menyusun pipeline CI/CD untuk Java development dengan build, test, dan deploy menggunakan alat seperti Maven.

Berikut adalah langkah-langkah dan daftar persiapan yang perlu Anda lakukan:

Persiapan Software Pendukung di Laptop

Persiapan-1: Docker dan Docker Compose

Unduh dan instal Docker Desktop dan pastikan Docker Compose juga sudah termasuk (biasanya terintegrasi dalam Docker Desktop).

Docker Compose juga sangat berguna untuk mengatur beberapa kontainer sekaligus agar Kita dapat mengatur dan menjalankan GitLab, Jenkins, dan database (jika diperlukan) dalam satu konfigurasi. Hal ini memudahkan pengelolaan dan pengaturan jaringan antar layanan.

Pada artikel ini kita tidak akan membahas docker lebih jauh karena saya berasumsi bahwa anda tertarik membaca artikel ini karena tertarik dengan CI/CD dan sudah mahir dengan tools Docker, Docker Compose, Docker CLI, Docker Desktop. 


Persiapan-2: Docker Desktop Untuk Docker GUI

Docker Desktop menyediakan GUI (Graphical User Interface) yang mudah digunakan yang memungkinkan Anda mengelola kontainer, aplikasi, dan gambar langsung dari komputer Anda.

Docker Desktop mengurangi waktu yang dihabiskan untuk pengaturan yang rumit sehingga Anda dapat fokus pada penulisan kode. Docker Desktop menangani pemetaan port, masalah sistem file, dan pengaturan default lainnya, dan diperbarui secara berkala dengan perbaikan bug dan pembaruan keamanan.

Persiapan-3: IntelliJ IDEA

Gunakan IntelliJ IDEA yang sudah terkonfigurasi untuk pengembangan Java.

Langkah-langkah dalam Mulai Belajar 

Langkat-1:  Buat file Dockerfile-build-server untuk build server.
# Dockerfile-build-server
# Image dasar yang mendukung apt-get
FROM openjdk:17-jdk-slim

# Install Git
RUN apt-get update && apt-get install -y git

# Install Maven
RUN apt-get install -y maven

# Verify installations
RUN git --version && mvn --version
Jalankan Docker Desktop dan pastikan sudah berjalan tanpa masalah lalu buat file docker-compose.yml asumsi project berada di D:\analisa\YBoilerplate dan merupakan Spring Boot web app tanpa dukungan database (belum pakai db hanya rest endpoints sederhana), Kita bisa menyesuaikan docker-compose.yml dan konfigurasi build server untuk memanfaatkan folder tersebut.

Langkat-2:  Buat file docker-compose.yml docker-compose.yml  untuk build server.

Berikut docker-compose.yml untuk mounting project:

version: '3.7'
networks:
cicd-network:
driver: bridge

services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: "gitlab.local"
restart: always
hostname: gitlab
networks:
- cicd-network
ports:
- "8581:80"
- "4433:443"
- "2222:22"
volumes:
- gitlab-config:/etc/gitlab
- gitlab-logs:/var/log/gitlab
- gitlab-data:/var/opt/gitlab
- /host_mnt/d/analisa/YBoilerplate:/home/gitlab/YBoilerplate
# deploy:
# resources:
# limits:
# cpus: '1.0'
# memory: 1024M
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost/ || exit 1"]
interval: 1m30s
timeout: 10s
retries: 3

jenkins:
image: jenkins/jenkins:lts
container_name: "jenkins.local"
restart: always
hostname: jenkins
networks:
- cicd-network
ports:
- "8582:8080"
- "50000:50000"
volumes:
- jenkins-home:/var/jenkins_home
- /host_mnt/d/analisa/YBoilerplate:/var/jenkins_home/workspace/YBoilerplate
environment:
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
# deploy:
# resources:
# limits:
# cpus: '1.0'
# memory: 3000M
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/login || exit 1"]
interval: 1m30s
timeout: 10s
retries: 3

build-server:
image: build-server:latest
container_name: "build-server.local"
hostname: build-server
networks:
- cicd-network
volumes:
- /host_mnt/d/analisa/YBoilerplate:/home/build/YBoilerplate
working_dir: /home/build/YBoilerplate
command: /bin/bash -c "sleep infinity"
ports:
- "8580:8080"
build:
context: .
dockerfile: Dockerfile-build-server
# deploy:
# resources:
# limits:
# cpus: '1.0'
# memory: 1024M
healthcheck:
test: ["CMD-SHELL", "ls /home/build/YBoilerplate || exit 1"]
interval: 1m30s
timeout: 10s
retries: 3

volumes:
gitlab-config:
gitlab-logs:
gitlab-data:
jenkins-home:

Penjelasan

  • Mount Path: Mounting dilakukan dengan prefix /host_mnt/ karena Windows menggunakan jalur seperti itu dalam WSL2/Docker Desktop untuk mengakses drive host.
  • Project: Direktori D:\analisa\YBoilerplate di laptop host di-mount ke masing-masing container agar dapat diakses oleh GitLab, Jenkins, dan build server.

Dengan konfigurasi ini, Jenkins dan build server di container Docker dapat mengakses project Spring Boot Anda untuk melakukan build dan menjalankan pipeline CI/CD.

Langkat-3:  Cek file docker-compose.yml

Cek file dengan perintah docker-compose config, untuk memastikan bahwa file compose yang kita miliki tidak ada masalah. 
docker-compose config

Langkat-4:  Jalankan Docker Compose Up

Pada CLI bisa gunakan docker-compose up atau dijalankan via IntelliJ IDEA. 
Mulai Jalankan semua containers (Bisa dari CLI, IDE atau Docker Desktop)

Docker containers yang diperlukan berjalan dilihat dari IntelliJ IDEA.

Docker containers yang diperlukan berjalan dilihat dari Docker Desktop.


Anda bisa memilih mau menggunakan Docker Desktop, CLI atau langsung di IntelliJ IDEA untuk menjalankan dan mematikan containers.

Hebat! Semua container Anda sekarang berjalan dengan baik. Ini berarti build-server, gitlab, dan jenkins telah berhasil dijalankan menggunakan docker-compose.

Sekarang kita sudah memiliki 3 containers yang bisa ing berkomunikasi.

  1. gitlab.local
  2. jenkins.local
  3. build-server.local

Langkah Selanjutnya


Langkah-5: Verifikasi Koneksi Antar-Container

Pastikan Jenkins dan GitLab dapat berkomunikasi satu sama lain di dalam network cicd-network. Anda bisa memeriksa ini dengan menjalankan perintah docker network inspect cicd-network untuk melihat apakah semua container terhubung ke network tersebut. 

docker network ls lalu docker network inspect ci_di_cicd-network

Langkah-5.1: Install PING  
apt-get update -y && apt-get upgrade -y && apt-get install iputils-ping -y && apt-get install net-tools -y 

Catatan: karena kita menggugakan image minimalis untuk build server maka install duli ping untuk menggunakannya dengan: apt-get update -y && apt-get upgrade -y && apt-get install iputils-ping -y && apt-get install net-tools -y 

Langkah-5.2: Ping Container Jenkins dan Gitlab dari Container Build Server
Dari dalam build server ping ke alamat jenkins dan gitlab.

 

Langkah-6: Konfigurasi Awal Jenkins
Buka unruk pertama kali Jenkins di browser Anda (http://localhost:8582).
Jenkins yang berjalan di http://localhost:8582 

Setup Security



Signup Jenkins user di http://localhost:8582/signup

Pada http://localhost:8582/configureSecurity/ jadikan user dapat registrasi dan login

Register user admin di alamat http://localhost:8582/signup 



Login user Jenkins di http://localhost:8582/login admin/password




Langkah-7: Konfigurasi GitLab

GitLab membutuhkan database relasional untuk beroperasi, tetapi tidak memerlukan database NoSQL. Secara default, GitLab sudah dikemas dengan PostgreSQL sebagai database internalnya. Ini berarti Anda tidak perlu mengkonfigurasi database relasional secara terpisah kecuali jika Anda ingin menggunakan instance database eksternal untuk skala besar atau kebutuhan khusus.

Akses GitLab di browser (di http://localhost:8582) lalu ganti passwordnya dari CLI.
Gitlab masih loading

Ganti Password Root via Docker Desktop

Perintah ganti password via terminal: docker exec -it gitlab gitlab-rails runner "user = User.where(id: 1).first; user.password = 'Kucing@88'; user.password_confirmation = 'Kucing@88'; user.save!"

Pasword baru Kucing@88 siap di pakai login oleh root


Dashboard Gitlab

Git Repository 
Repository tempat script Docker di atas ini bisa anda temukan di https://github.com/yoesoff/CI_DI.git (master).

To be Continue....

  1. Buat repository
  2. Setup Jenkins untuk CI/CD di local dengan pipeline ke local Gitlab.



Comments

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Numpang Kerja Remote dari Bandung Digital Valley

Cara Decompile berkas Dex dan Apk Android