Skip to main content

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

Semalam kemarin (09 Januari 2019) tidak sengaja kami sekeluarga lewat Bandung Digital Hub saat pulang dari Fish Wow Cheeseee  yang di Jl. Lombok. Bandung Digital Hub ini sendiri berlokasi tidak jauh dari dari tempat kami makan tersebut, yaitu berlokasi di Jl. Laswi No.7, Kacapiring, Batununggal, Kota Bandung, Jawa Barat 40271. Berhubung untuk bulan Januari 2019 ini sedang tidak masuk ke kantor maka saya putuskan untuk besoknya (hari ini 09 Januari 2019) nyoba untuk bekerja remote dari Bandung Digital Hub , apalagi istri yang kebetulan follower pak Ridwan Kamil di Instagram juga Facebook dan tampaknya pernah lihat ulasan mengenai tempat ini sehingga tampak antusias supaya saya datang ketempat ini ini dan mencoba bekerja dari gedung creative hub dan coworking yang keren ini.  Tempat Parkir Masalah utama saat kita datang ke coworking space terutama yang berlokasi di Bandung (atau mungkin kota-kota lainnya) adalah lahan parkir, kadang lahan parkir ...

Numpang Kerja Remote dari Bandung Digital Valley

Satu lagi co-working place  gratisan dan keren yang cukup populer dikota Bandung, co-working place yang juga memberikan fasilitas tempat kerja (co-working place) dan fitur-fitur menarik lainnya,  co-working place keren  ini adalah Bandung Digital Valley atau yang sering disingkat BDV . C o-working place  Bandung Digital Valley ini  merupakan bagian dari Telkom , mulai aktif digunakan dari sekitar tahun 2012 lalu .  Tempat ini biasanya menjadi tempat favorit bagi para pengiat startup, freelancer, dan mahasiswa . Gedung BDV Gedung BDV Gedung BDV Co-working space Bandung Digital Valley ini sendiri berlokasi di Menara Bandung Digital Valley, Jl. Gegerkalong Hilir No.47, Sukarasa, Sukasari, Kota Bandung, Jawa Barat, detailnya bisa dilihat di Google map berikut. Pemandangan jalan setelah pintu satpam. Free Co-working Space Membership Untuk mulai menggunakan fasilitas co-working space ini secara gratis maka yang pe...

Membuat Authentikasi Berbasis Token pada Spring Boot dengan Spring Security dan JWT

Setelah beberapa kali mencari tutorial tentang otentikasi aplikasi web Spring Boot dengan menggunakan JWT yang mudah dipahami akhirnya saya menemukan artikel berbahasa Inggris tapi sangat mudah dipahami  dan diikuti, artikel tersbut berada disini , dengan judul " Spring Boot Token based Authentication with Spring Security & JWT ". Untuk memudahkan orang-orang yang terbiasa membaca artikel dalam bahasa indonesia (termasuk saya sendiri), artikel ini saya buat dan susun ulang (artikel aslinya tidak tertulis dengan runtut dan dapat membuat pemula bingung dengan berbagai error yang muncul) supaya lebih mudah untuk diikuti dan dapat di gunakan bersama. Applikasi yang akan kita buat adalah aplikasi web yang setiap endpoint-nya hanya bisa di akses oleh role tertentu. 1. Tools Yang Diperlukan IntelliJ Idea text editor. Spring Assistant Plugin. Postman. PostgreSQL + DBeaver. Min Java 8 Spring Boot 2.1.8 (dengan Spring Security, Spring Web, Spring Data JPA). jjwt 0.9.1. Maven 3.6.1....