Jenkins adalah sebuah perangkat lunak otomatisasi open source yang digunakan dalam proses continuous integration dan continuous delivery/deployment (CI/CD). Alat ini termasuk bagian dari ekosistem DevOps dan ditulis menggunakan bahasa pemrograman Java. Jenkins berfungsi untuk mengimplementasikan alur kerja CI/CD yang dikenal dengan istilah pipeline.

Pipeline CI/CD ini berfungsi untuk mengotomatisasi proses pengujian dan pelaporan terhadap perubahan-perubahan kecil dalam codebase secara real-time. Pipeline ini juga membantu menggabungkan berbagai cabang kode (branch) menjadi satu cabang utama. Dengan Jenkins, bug bisa cepat terdeteksi, software bisa langsung dibangun (build), diuji secara otomatis, dipersiapkan untuk deployment, dan pada akhirnya bisa langsung dikirim ke container, VM (virtual machine), atau server fisik dan cloud.

Walau ada versi komersial dari Jenkins, pembahasan ini fokus ke versi open source dari proyek Jenkins itu sendiri.

Sejarah Jenkins

Jenkins awalnya merupakan fork dari proyek bernama Hudson, yang sempat dimiliki dan didaftarkan hak mereknya oleh Oracle. Hudson akhirnya disumbangkan ke Eclipse Foundation dan kini sudah tidak dikembangkan lagi. Sekarang, Jenkins dikelola sebagai proyek open source di bawah naungan CD Foundation, bagian dari Linux Foundation.
CI sendiri sudah berkembang jauh sejak awal kemunculannya. Dulu, build harian sudah dianggap cukup. Tapi sekarang, tiap developer diharapkan untuk rutin melakukan commit, bahkan bisa beberapa kali dalam sehari, dan setiap perubahan besar langsung dibuild. Dengan pendekatan ini, proses integrasi kode berjalan lebih mulus dan error bisa ditemukan lebih awal, sehingga masalah yang muncul biasanya lebih kecil dan gampang diselesaikan.

Jenkins dan CI/CD

Jenkins memanfaatkan metode pipeline CI/CD untuk menyederhanakan kerja tim DevOps. Pipeline ini bisa dibagi dua bagian utama:

  • Continuous Integration. Dalam tahap awal ini, para developer rutin menambahkan kode baru ke dalam proyek. Jenkins akan langsung mendeteksi adanya bug atau error sebelum kode baru di-merge ke codebase utama.
  • Continuous Delivery dan Deployment. Setelah proses CI selesai, Jenkins akan membangun dan mengemas (package) kode secara otomatis untuk kemudian dikirim ke environment testing, staging, hingga production. Continuous deployment akan mengotomatisasi proses pengiriman kode ke tujuan akhir tanpa campur tangan manual.

Dengan adanya Jenkins, proses otomatisasi ini bisa menurunkan jumlah error karena semua langkah terbaik sudah tertulis di dalam sistem. Jenkins akan memastikan bahwa semua proses berjalan seperti yang sudah ditentukan.

Kelebihan lain dari Jenkins adalah kecepatan dalam proses rilis. Karena proses deployment tidak tergantung pada ketersediaan operator atau tim tertentu, ini mengurangi tekanan kerja tim pengembang dan tim operasional—nggak perlu lagi lembur untuk rilis malam atau akhir pekan.

Selama bertahun-tahun, fitur-fitur CD dan deployment terus ditambahkan ke berbagai versi Jenkins, salah satunya lewat proyek Jenkins X yang muncul pada tahun 2018. Proyek ini bertujuan membuat versi Jenkins yang lebih modern dan cloud-native. Jenkins X dibangun khusus untuk Kubernetes, dan menggunakan teknologi seperti Helm dan Tekton. Jenkins X juga dikembangkan di bawah pengawasan CD Foundation.

Jenkins juga punya integrasi yang kuat dengan berbagai teknologi lain, misalnya integrasi dengan Docker untuk pembuatan container dan Kubernetes untuk orkestrasinya. Jadi, Jenkins membantu developer bekerja lebih cepat dan efisien lewat proses build, test, dan deploy yang terus menerus.

Cara Kerja Jenkins

Jenkins dijalankan sebagai server di berbagai platform seperti Windows, macOS, Unix, dan tentu saja Linux. Jenkins butuh Java 8 atau yang lebih baru, baik dari Oracle maupun OpenJDK. Biasanya Jenkins dijalankan sebagai Java servlet di Jetty, tapi bisa juga lewat Apache Tomcat.
Setelah Jenkins terinstal, workflow-nya bertujuan untuk membantu developer dalam membangun dan menguji kode, lalu melakukan deployment dan rilis ke production. Proses ini ditulis dalam bentuk pipeline yang dikustomisasi sesuai kebutuhan proyek.

Pipeline Jenkins ini akan mengotomatisasi tahapan seperti pengujian kode, deployment bertahap untuk melihat performa fitur di environment production, hingga deployment akhir.

Kebutuhan terhadap Jenkins makin terasa saat mengembangkan sistem berbasis microservices. Karena microservices punya siklus update yang cepat dan beragam, Jenkins membantu otomatisasi deployment agar update bisa dilakukan lebih sering tanpa terganggu keterbatasan kapasitas rilis.

Jenkins Pipeline

Setelah Jenkins dipasang, tim DevOps akan membuat pipeline sebagai rangkaian tahapan tugas yang dijalankan server Jenkins untuk proses CI/CD. Ada dua jenis pipeline: scripted dan declarative.

Pipeline scripted memberikan kontrol lebih besar kepada developer untuk menambahkan logika secara dinamis. Sedangkan pipeline declarative lebih sederhana dan terstruktur, cocok untuk penggunaan umum tapi tidak terlalu fleksibel.

Semua jenis pipeline ditulis dalam file teks yang disebut Jenkinsfile. File ini berisi kode pipeline yang menggunakan sintaks Groovy dan menjelaskan langkah-langkah dalam proses CI/CD untuk proyek tertentu.

Plugin Jenkins

Plugin adalah komponen tambahan yang memperluas fungsi Jenkins. Plugin ini bisa diunduh dari repositori plugin Jenkins dan dimuat lewat UI Jenkins atau lewat CLI.
Plugin bisa menambahkan fitur UI baru, integrasi dengan tool lain, sampai membantu manajemen Jenkins. Ada lebih dari 1.900 plugin tersedia, dari manajemen source code seperti Git dan Bitbucket, container seperti Docker, hingga cloud seperti AWS dan GCP.

Plugin ditulis dalam Java, menggunakan anotasi khusus dan pola desain agar bisa dikenali oleh Jenkins. Pengembangannya biasanya menggunakan Maven untuk deployment.

Keamanan di Jenkins

Keamanan di Jenkins mencakup keamanan server dan pengguna. Server dijaga seperti server lainnya, misalnya dengan membatasi proses yang bisa mengaksesnya. Akses lewat UI Jenkins juga dibatasi, misalnya dengan multifactor authentication.

Jenkins punya dua sistem keamanan internal: Security Realm dan Authorization Realm. Security Realm menentukan siapa yang boleh mengakses Jenkins, sedangkan Authorization Realm mengatur hak akses pengguna tersebut.

Kelebihan dan Kekurangan Jenkins

Kelebihan

– Jenkins bisa diperluas dengan plugin, membuatnya fleksibel dan adaptif. – Pipeline yang customizable dengan scripting atau declarative language. – Sudah matang dan memiliki dokumentasi serta komunitas yang luas. – Dibangun di atas Java, bahasa enterprise yang kuat dan stabil.

Kekurangan

– Walau instalasinya mudah, implementasi Jenkins untuk production bisa kompleks. – Pipeline yang rumit cukup sulit untuk ditulis dan dimaintain. – Jenkins masih menggunakan arsitektur single-server, yang bisa membatasi skalabilitas. – Masih mengandalkan teknologi Java lama seperti servlet dan Maven. – Belum didesain untuk Java modern seperti Spring Boot atau GraalVM.

Tim DevOps punya banyak sumber belajar untuk memahami Jenkins. Coba cek tutorial Jenkins yang cocok banget untuk pemula!

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *