Menelusuri sejarah Jenkins dari proyek Hudson pada 2004 hingga fork open source pada 2011, mengapa ia tetap dominan di enterprise dengan lebih dari 1800 plugin, dan membedah arsitektur controller dan agent.

Di episode 0 kita sudah menyalakan Jenkins pertama kali — ia berjalan di port 8080, lengkap dengan plugin dan user admin. Sekarang saatnya berhenti sejenak dari mengetik dan memahami apa sebenarnya yang sedang kalian jalankan. Episode ini membangun konteks: dari mana Jenkins berasal, mengapa sebuah tool berusia dua dekade masih menjadi tulang punggung CI/CD di perusahaan-perusahaan besar, dan bagaimana arsitektur intinya dirancang.
Konteks ini bukan sekadar trivia. Keputusan arsitektur yang kalian buat sebagai engineer — misalnya di mana build dijalankan, atau memilih Freestyle Project vs Pipeline — sangat dipengaruhi oleh pemahaman ini. Mari kita mulai dari asal-usulnya.
Semuanya bermula pada tahun 2004, ketika Kohsuke Kawaguchi, seorang engineer di Sun Microsystems, menciptakan proyek bernama Hudson — sebuah continuous integration server yang pada masa itu menjadi salah satu yang pertama membuat konsep build yang diotomasi dan selalu terpantau menjadi mudah dipakai.
Tonggak sejarahnya:
| Tahun | Peristiwa |
|---|---|
| 2004 | Kohsuke Kawaguchi memulai proyek Hudson di Sun Microsystems |
| 2009 | Oracle mengakuisisi Sun, Hudson ikut berpindah tangan |
| 2010 | Komunitas mulai kehilangan kepercayaan pada arah pengembangan dan governance Oracle |
| 2011 | Mayoritas kontributor memfork Hudson dan mengganti namanya menjadi Jenkins |
| 2013 | Jenkins menerima hibah dari Oracle Foundation dan menjadi proyek yang sepenuhnya dikelola komunitas |
Fork terjadi karena sengketa tata kelola: komunitas ingin pengembangan yang terbuka dan cepat, sementara Oracle menilai Hudson sebagai aset komersial. Analoginya mirip OpenOffice yang difork menjadi LibreOffice — fork tidak selalu berarti perpecahan yang melemahkan; kadang justru lahir proyek yang lebih sehat karena dikelola oleh orang-orang yang memakainya setiap hari. Hudson masih bertahan untuk beberapa waktu, tapi Jenkins dengan cepat merebut hampir seluruh ekosistem plugin dan pengguna.
Dua dekade kemudian, muncul puluhan competitor — GitLab CI, GitHub Actions, CircleCI, Buildkite. Namun Jenkins tetap menjadi pilihan utama di banyak perusahaan. Alasannya bukan nostalgia, melainkan empat hal struktural:
1. Open source dan self-hosted dengan kontrol penuh. Jenkins berjalan di infrastruktur kalian sendiri. Data pipeline, riwayat build, dan artefak tidak pernah meninggalkan jaringan internal — ini wajib bagi industri yang diatur regulasi (finansial, kesehatan, pemerintahan) dan bagi tim yang ingin meminimalkan dependensi pada vendor.
2. Ekosistem 1800+ plugin. Hampir setiap tool yang pernah kalian dengar punya plugin Jenkins: Git, Docker, Kubernetes, Ansible, SonarQube, Slack, dan ribuan lainnya. Perluasannya organik selama dua dekade, jadi kemungkinan besar kebutuhan kalian sudah punya plugin yang matang.
3. Kustomisasi tanpa batas. Jenkins tidak memaksa alur kerja tertentu. Lewat Groovy, Jenkins Pipeline, dan Shared Libraries, kalian bisa membangun alur yang sangat kompleks — dari trigger, quality gate, hingga deployment berjenjang — yang mustahil dilakukan tool SaaS dengan batasan desain.
4. Komunitas dan sumber daya yang masif. Dokumentasi, buku, posting blog, dan engineer yang sudah berpengalaman Jenkins sangat banyak. Menarik talenta yang familiar dengan Jenkins jauh lebih mudah daripada tool yang lebih baru.
Note
Ini bukan berarti Jenkins menang di semua dimensi. Untuk tim kecil yang tidak punya administrator infrastruktur, GitLab CI atau GitHub Actions jauh lebih mudah dikelola. Jenkins adalah pilihan terbaik ketika kontrol, kustomisasi, dan self-hosting menjadi prioritas.
Ini konsep paling penting di seluruh series ini. Jenkins dirancang dengan arsitektur controller-agent:
JENKINS_HOME.Analoginya: controller adalah manajer restoran yang menerima pesanan, menyusun antrean, dan membagi tugas ke dapur; agent adalah para koki yang benar-benar memasak. Manajer tidak boleh ikut memasak jika koki bisa ditambah — kita akan membahas mengapa ini aturan keamanan nomor satu di episode 3.
| Aspek | Controller | Agent |
|---|---|---|
| Peran | Orkestrasi, scheduling, UI, plugin | Eksekusi build dan job |
| Menjalankan build? | Tidak (aturan keamanan) | Ya |
| Kebutuhan sumber daya | Rendah-sedang (web server + JVM) | Menyesuaikan beban build |
| Contoh skala produksi | 1-2 node dengan sedikit executor | Banyak node, bisa dinamis |
Komunikasi antara controller dan agent bisa dua arah: agent outbound memulai koneksi ke controller (melalui port TCP 50000 — ingat kita sudah membuka port ini di episode 0), atau controller inbound yang memulai koneksi SSH ke agent. Dari perspektif pipeline, kalian tidak perlu peduli arah komunikasinya — yang penting pekerjaan bisa ditembakkan ke agent manapun.
Ketika sebuah job dipicu, yang terjadi adalah:
Sekilas alur ini terlihat persis seperti pipeline yang akan kita tulis di episode 2 — karena memang itulah tujuannya: Jenkinsfile mendeskripsikan apa yang harus dikerjakan, dan arsitektur controller-agent yang mengeksekusinya. Contoh minimal sebuah pipeline yang berjalan di agent berlabel tertentu:
pipeline {
agent { label 'linux' }
stages {
stage('Build') {
steps {
echo 'Dijalankan di agent berlabel linux'
}
}
}
}Kalau ingin mengintip isi build queue dari terminal, Jenkins menyediakan REST API — misalnya curl http://localhost:8080/queue/api/json — yang menunjukkan antrean job yang sedang menunggu executor kosong. Ini cara cepat melihat bagian scheduling dari arsitektur yang baru saja kita bahas.
Selain arsitektur fisik (controller/agent), ada juga arsitektur logis dalam mendefinisikan job: Freestyle Project dan Jenkins Pipeline.
Freestyle Project adalah cara klasik. Konfigurasi dilakukan lewat form UI: mengisi URL repository, menambahkan build steps satu per satu lewat dropdown, mengatur trigger lewat checkbox. Cepat untuk job sederhana, tapi tersebar di UI, sulit di-versioning, dan hampir tidak bisa dibuat kompleks.
Jenkins Pipeline mendefinisikan seluruh build sebagai kode di dalam file Jenkinsfile yang tersimpan di repository. Semua perubahan bisa di-review lewat pull request, bisa diuji secara lokal, dan bisa dibagikan antar proyek via Shared Libraries.
| Aspek | Freestyle Project | Jenkins Pipeline |
|---|---|---|
| Definisi | Form UI (ClickOps) | Kode (Jenkinsfile) |
| Versioning | Tidak ada | Ya, di Git repository |
| Struktur kompleks | Terbatas | Sangat fleksibel (stage, parallel, conditional) |
| Reusability | Hampir nol | Shared Libraries |
| Direkomendasikan? | Hanya job sangat sederhana | Standar modern |
Tip
Aturan praktisnya: apapun yang bisa ditulis sebagai Jenkinsfile, tulis sebagai Jenkinsfile. Freestyle hanya menyisakan kasus-kasus kecil seperti job admin sekali jalan. Mulai episode 2, kita akan meninggalkan Freestyle dan fokus penuh pada Jenkins Pipeline.
Pada episode 1 ini kalian telah memahami:
Inti yang harus kalian bawa: controller mengatur, agent yang bekerja, dan kode lebih baik daripada klik. Di episode 2 kita akan mulai menulis kode itu — membuat Jenkins Pipeline pertama dengan Jenkinsfile, memahami perbedaan sintaks Declarative dan Scripted, serta menjalankannya langsung dari Git via SCM checkout. Sampai jumpa di episode 2!