Mengenal tiga klasifikasi GitLab Runner — shared, group, dan specific — beserta tipe executor shell, docker, dan kubernetes. Lalu mendaftarkan runner sendiri dengan gitlab-runner register dan mengarahkan job ke runner tertentu menggunakan tags.

Di episode 2 kalian berhasil membuat .gitlab-ci.yml pertama dan pipeline berjalan. Tapi pernahkah kalian bertanya: siapa yang sebenarnya menjalankan job itu? Jawabannya adalah GitLab Runner — pahlawan di balik layar yang mengambil job dari antrean dan mengeksekusinya. Episode ini membedah klasifikasi tipe runner, jenis executor, cara registrasi, dan bagaimana tags mengarahkan job ke runner yang tepat.
Pemahaman ini krusial: di perusahaan besar, arsitektur runner menentukan kecepatan, biaya, dan keamanan seluruh pipeline. Keputusan seperti "jalankan di shared runner atau dedicated runner?" dan "pakai Docker executor atau Kubernetes executor?" adalah keputusan arsitektur, bukan sekadar konfigurasi.
Runner bisa dibedakan berdasarkan cakupan (scope) pelayanannya:
| Tipe | Scope | Kapan Dipakai |
|---|---|---|
| Shared | Seluruh instance | Belajar, pipeline ringan, memulai cepat |
| Group | Satu group/org | Standarisasi seluruh project tim |
| Specific | Satu project | Kebutuhan khusus atau keamanan |
Analogi sederhananya: shared runner seperti layanan antar-jemput umum, group runner seperti bus antar-jemput kantor untuk semua divisi, dan specific runner seperti mobil pribadi yang hanya melayani satu kantor — dengan spesifikasi yang bisa disesuaikan.
Executor menentukan cara runner mengeksekusi job. Tiga yang paling populer:
image). Ini standar untuk pipeline produksi.| Executor | Isolasi | Cocok untuk |
|---|---|---|
| Shell | Tidak ada | Mesin sederhana, akses host |
| Docker | Container | Standar produksi |
| Kubernetes | Pod dinamis | Scaling elastis di cluster K8s |
Analoginya: shell executor seperti memasak langsung di dapur umum, docker executor seperti memasak di panci sendiri yang bersih dan bisa dibawa, sedangkan kubernetes executor seperti memesan koki baru untuk setiap pesanan.
Runner dijalankan di mesin yang kalian kontrol — laptop, VM, atau server CI. Instalasi di Ubuntu/Debian menggunakan repository resmi GitLab:
curl -sS https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt-get update
sudo apt-get install -y gitlab-runner
gitlab-runner --versionRunner terdaftar sebagai service sistem (gitlab-runner), dan seluruh konfigurasi disimpan di /etc/gitlab-runner/config.toml.
Setiap runner harus didaftarkan ke GitLab dengan token unik. Token diambil dari Settings → CI/CD → Runners di project, group, atau instance — tergantung tipe runner yang ingin dibuat. Contoh registrasi non-interaktif:
gitlab-runner register \
--url https://gitlab.com/ \
--token glrt-XXXXXXXXXXXX \
--executor docker \
--description "docker-runner-01" \
--docker-image alpine:3.20Parameter yang paling penting:
--url — alamat instance GitLab (https://gitlab.com/ untuk SaaS).--token — token registrasi dari halaman Runners.--executor — tipe executor yang dipakai (docker, shell, kubernetes, dll).--docker-image — image default untuk job yang tidak menulis keyword image sendiri.Hasil registrasi tersimpan di /etc/gitlab-runner/config.toml — versi ringkasnya:
concurrent = 4
[[runners]]
name = "docker-runner-01"
url = "https://gitlab.com/"
executor = "docker"
[runners.docker]
image = "alpine:3.20"
privileged = falseWarning
Jangan pernah mengaktifkan privileged = true tanpa alasan kuat. Mode ini memberi akses root penuh ke host dari dalam container — bila job berjalan dari kode yang tidak tepercaya, ini bisa berbahaya. Perbedaan Docker-in-Docker (yang butuh privileged) vs Kaniko (yang tidak) akan kita bahas di episode 6.
Setelah runner terdaftar, kalian bisa memberinya tags — label yang dipakai job untuk memilih runner mana yang mengerjakan pekerjaannya. Daftarkan dengan --tag-list:
gitlab-runner register \
--url https://gitlab.com/ \
--executor docker \
--tag-list "docker,high-cpu"Di dalam .gitlab-ci.yml, job memakai keyword tags untuk meminta runner dengan label tersebut:
deploy_prod:
stage: deploy
script:
- ./deploy.sh
tags:
- docker
- high-cpuJob deploy_prod hanya akan diambil oleh runner yang memiliki semua tag tersebut. Jika tidak ada runner yang cocok, job akan menganggur (stuck) selamanya. Aturan praktis: gunakan tags untuk routing yang benar-benar spesifik — misal arsitektur (amd64), hardware (gpu), atau tipe job (build, deploy) — bukan untuk menggantikan konfigurasi executor.
Untuk memastikan runner sehat dan terdaftar, gunakan perintah berikut:
gitlab-runner status
gitlab-runner list
glab runner list--run-untagged=true.Pada episode 3 ini kalian telah menguasai sisi infrastruktur GitLab CI/CD:
gitlab-runner register beserta --url, --token, --executor, dan --docker-image.tags, plus verifikasi dengan gitlab-runner status, gitlab-runner list, dan glab runner list.Sekarang pipeline kalian punya tenaga kerja yang jelas. Di episode 4 kita akan mengendalikan kapan pekerjaan itu dijalankan — dynamic control flow dengan rules dan workflow: perbedaan only/except yang legacy vs rules modern, kondisi if, changes, exists, parameter when, dan mencegah duplicate pipeline dengan workflow: rules. Sampai jumpa di episode 4!