Mungkin kalian sudah tahu bahwa saya sedang mengikuti bootcamp devops. Salah satu tools yang sudah saya gunakan dan tulis beberapa kali di blog ini adalah Nexus Repository Manager. Selain itu saya juga menggunakan tools lain dengan fungsi ataupun tujuan yang berbeda dengan Nexus, dan bisa dibilang tools yang akan saya bahas hari ini adalah salah satu jenis tools utama yang digunakan oleh para Devops untuk melakukan proses Continuous Integration and Continuous Delivery/Continuous Deployment (CI/CD) aplikasi. Tools yang saya maksud adalah Jenkins, yaitu tools otomatisasi untuk mendukung proses development aplikasi atau biasa disebut oleh Devops dengan CI/CD.
Jenkins mendukung proses development aplikasi, mulai dari build artifact/image, testing sampai dengan deployment serta mampu integrasi juga dengan Docker, Kubernetes, Git dan tools lainnya. Workflow Jenkins ini juga mekanismenya otomatis sehingga tidak perlu melakukan proses development secara manual setiap ada perubahan ataupun perbaikan dalam aplikasi. Sebelum ada Jenkins, Devops harus melakukan proses build, testing, dan deployment secara manual setiap ada perubahan source code, walaupun perubahan hanya ada pada 1 baris source code untuk memastikan aplikasi bisa berjalan sebagaimana mestinya dan tidak ada kendala. Namun dengan Jenkins cukup konfigurasi di awal saja proses build, testing & deployment apa saja yang perlu di eksekusi, lalu apabila selanjutnya ada perubahan pada aplikasi maka Devops cukup klik trigger di Jenkins saja untuk melakukan proses build, testing, deployment dan menampilkan hasilnya.
Opsi tools sejenis selain Jenkins sebenarnya banyak, namun Jenkins ini merupakan tools yang paling umum digunakan dan ditambah lagi Jenkins merupakan tools dengan versi open source.
Sebelumnya saya sudah berhasil melakukan instalasi dan menggunakan Jenkins untuk melakukan proses build, testing & deployment pada project bootcamp saya. Berikut adalah langkah-langkah untuk melakukan instalasi Jenkins di Linux Ubuntu 22:
Sebelum melakukan proses instalasi, siapkan server atau VM dengan spesifikasi minimum sebagai berikut:
- vCPU: 1
- Memory: 2 GB
- Disk: 25 GB
Configure server tersebut supaya bisa dilakukan remote via SSH. Spesifikasi diatas sudah cukup jika hanya digunakan untuk uji coba atau hanya digunakan untuk kebutuhan internal dengan cakupan kecil. Namun, jika Jenkins digunakan pada lingkungan production sebaiknya menggunakan server atau VM 2x dari spesifikasi diatas.
Langkah 1: Instalasi Dependencies Java 11
- Jalankan perintah-perintah berikut untuk melakukan instalasi Java versi 11:
# apt update # apt install openjdk-11-jre-headless -y
- Cek versi Java:
# java -version openjdk version "11.0.18" 2023-01-17 OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04) OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
Langkah 2: Instalasi Package Jenkins
- Menambahkan repository Jenkins:
# curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null # echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | tee /etc/apt/sources.list.d/jenkins.list > /dev/null
- Update repo & instalasi package Jenkins:
# apt update # apt install jenkins -y
- Cek service Jenkins:
jenkins.service - Jenkins Continuous Integration Server Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2023-05-05 10:59:47 WIB; 5min ago Main PID: 5529 (java) Tasks: 43 (limit: 4531) Memory: 1.2G CPU: 38.351s CGroup: /system.slice/jenkins.service └─5529 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/
Langkah 3: Aktivasi Log Jenkins
- Edit file konfigurasi Jenkins service:
# systemctl edit --full jenkins.service
- Uncomment baris JENKINS_LOG
Environment="JENKINS_LOG=%L/jenkins/jenkins.log"
- Uncomment baris JENKINS_ENABLE_ACCESS_LOG dan sesuaikan menjadi true
Environment="JENKINS_ENABLE_ACCESS_LOG=true"
- Uncomment baris JENKINS_LOG
- Restart service Jenkins:
# systemctl restart jenkins
- Cek isi file log /var/log/jenkins/jenkins.log untuk memastikan log sudah aktif:
# root@jenkins:~# cat /var/log/jenkins/jenkins.log 2023-05-05 04:15:28.225+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file 2023-05-05 04:15:28.273+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath 2023-05-05 04:15:28.324+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: jetty-10.0.13; built: 2022-12-07T20:13:20.134Z; git: 1c2636ea05c0ca8de1ffd6ca7f3a98ac084c766d; jvm 11.0.18+10-post-Ubuntu-0ubuntu122.04 2023-05-05 04:15:28.585+0000 [id=1] INFO o.e.j.w.StandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet 2023-05-05 04:15:28.638+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: Session workerName=node0 2023-05-05 04:15:28.974+0000 [id=1] INFO hudson.WebAppMain#contextInitialized: Jenkins home directory: /var/lib/jenkins found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
Langkah 4: Post Setup Webui Jenkins
- Akses webui Jenkins melalui web browser menggunakan port 8080
- Masukan password yang ada pada file /var/lib/jenkins/secrets/initialAdminPassword
- Install Suggested Plugin
- Tunggu proses instalasi plugins selesai
- Isi username, password dan informasi lainnya
- Sesuaikan Jenkins URL dengan nama yang digunakan untuk akses webui Jenkins. Secara default Jenkins URL akan menggunakan IP address server Jenkins, tapi sebaiknya kalian daftarkan nama yang akan digunakan untuk akses webui Jenkins ke DNS server lalu masukan nama tersebut ke Jenkins URL. Namun jika dibiarkan default menggunakan IP address dan disesuaikan nanti setelah Jenkins digunakan juga tidak apa-apa, karena kalian bisa sesuaikan secara manual melalui file /var/lib/jenkins/jenkins.model.JenkinsLocationConfiguration.xml
- Start using Jenkins