1) TLDR
tet tet tetttt … balek lagi sama saya, berrabe … dimana saya suka memecahkan masalah menjadi masalah lagiii, YEAY 😎
okehhh … saya pengen share lagi caranyooo lari dari kenyataan, ehh 😅 …
fokusss … maksudnya cara nge-install gitlab-runner, WUHUUU 😵
⚠️ Note : sebelum masuk ke sini, pastikan sudah paham apa itu kultur DevOps, dan istilah-istilah di dalamnya, seperti CI / CD, Pipeline, Build, Deploy, Automation, dll
lanjottt , gitlab-runner itu cemilan apaan sih? …
bagi yang belum tau / belum pernah dengar, gitlab-runner merupakan cemilan program yang di gunakan untuk menghandle proses automasi kerja yang terjadi pada pipeline di gitlab CI / CD
dyarrrr … mumet to ndase 😩 😩
untuk lebih jelasnya lihat gambar di atas, CI PIPELINE dan CD PIPELINE semua nya butuh gitlab-runner
dimana runner berfungsi sangat penting agar CI / CD pipeline pada gitlab bisa berjalan, jika tidak ada runner yang aktif / terset, maka job di pipeline status nya akan pause dan stuck / tidak bisa jalan
2) Wuuzzzz ….
okeh, tapi bukannya Gitlab sudah menyediakan runner punya mereka sendiri (shared runner)? , trus kenapa harus install runner punya sendiri?
jawabannya “tergantung orangnya”, kalo saya install runner sendiri agar proses pipeline bisa lebih cepat di bandingkan shared runner gitlab (namanya juga berbagi) dan untuk alasan keamanan … yap karna keamanan sangat penting
walaupunnnnn shared-runner akan menghapus container saat job selesai, tapi kan kita tidak bisa menjamin 100%, apalagi jika code di repo sangat private dan ada beberapa informasi sensitif di dalamnya (walau bukan best practice)
hhmmmmm …. OK, setelah mulut berbusa karna terlalu banyak jelasin, langsung lanjot ae ke praktek setup nya dah 😓
2.a) Siomay Docker sebagai executor
sebelum masuk ke gitlab-runner nya, install executor dulu
executor itu merupakan makanan tools / metode yang di gunakan gitlab-runner untuk mengeksekusi job di pipeline CI / CD nya, untuk list executor bisa lihat di sini … saya memilih docker biar isolated dan mudah maintenance
> curl -fsSL https://get.docker.com -o get-docker.sh
> sh get-docker.sh
> systemctl start docker
2.b) Install Gitlab-Runner
kebetulan saya install gitlab-runner di Debian dengan spec server 48 Core CPU 128 GB RAM … kenthirrr 😂 😂
biar gampang maintenance gitlab-runner nantinya, saya install sebagai package repo saja
> curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
# Pengguna Debian buster harus disable skel untuk mencegah error No such file atau directory Job failures
> export GITLAB_RUNNER_DISABLE_SKEL=true;
> sudo -E apt install gitlab-runner
anddd … donee, gimana? gampang to … cuman 3 baris perintah doang 👍 😎
⚠️ Note : spec yang di butuhkan menjalankan gitlab-runner + docker sangat kecil … semakin tinggi semakin bagus
2.c) Register Gitlab-Runner
Tahap selanjutnya, Gitlab-Runner harus di daftarkan ke Gitlab, agar nantinya Gitlab bisa kenalan dan menggunakan gitlab-runner di server ini
sebelum itu, dapetin token untuk runner dan URL
nya di settings --> CI / CD --> runners
langsung masuk ke CLI, buat daftarin runner di server agar bisa nyambung ke gitlab …
jangan lupa kalo copas sambil di lihat scriptnya 😝 , sesuaikan url
dan gitlab-runner token
nya
> gitlab-runner register -n \
--url < URL > \
--registration-token < GITLAB-RUNNER TOKEN > \
--executor docker \
--description "Mantan Jelek" \
--docker-image "docker:stable" \
--tag-list mantan-jelek \
--request-concurrency 30 \
--limit 30 \
--docker-privileged
kalau uda, nanti di gitlab akan muncul beginian, menandakan kalau runner di server sudah tersambung ke gitlab dan sudah siap di gunakan oleh CI / CD job
3) Mencoba Gitlab-Runner
nah tadi kan uda proses install executor, gitlab-runner sama registrasi nya … sekarang cara gunain runner nya begimaneeeee ?
sabarrr … kasih istirahat otak dulu nape 😪
3.a) tagging
buat gunain gitlab-runner yang uda di setting tadi, bisa dengan ngasi atribut tags
pada file .gitlab-ci.yml
di bagian job atribut nya … contoh nya seperti di bawah di mana tadi saya setting tag runner nya dengan nama mantan-jelek
build:
image: docker:latest
stage: publish
tags:
- mantan-jelek
services:
- docker:dind
script:
- docker build -t $TAG_COMMIT -t $TAG_LATEST .
# push to Gitlab container registry instead of docker hub
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker push $TAG_COMMIT
- docker push $TAG_LATEST
only:
# regex for semantic version (vx.x.x)
- /^v([0-9]+)\.([0-9]+)\.([0-9]+)$/
except:
- branches
3.b) Untagged Jobs
cara yang kedua adalah dengan cara aktifkan mode untagged-jobs … berguna untuk jobs yang tidak punya / tidak di set tags
kalau opsi ini tidak di aktifkan, maka status pipeline job akan pause stuck
(jika shared runner tidak ada / di nonaktifkan)
untuk mengaktifkan, tinggal masuk ke settingan runner yang tadi dan centang seperti di gambar
⚠️ Note : tags
di gitlab CI / CD berbeda dengan git tag
… tags
di CI / CD di gunakan untuk memilih runner yang di gunakan untuk mengeksekusi job
4) TroubleShoot "Cannot Connect to Docker Daemon"
?
akhirnyaaa semua sudah berhasil, tetapi saat proses packaging dari source code menjadi docker image, ada error yang terjadi, dimana executor tidak bisa mengkontak socket dari docker-machine API 😱 😱 …
cobaan apa lagi ini gustiiiii 😩 😩 ….
setelah bertapaa selama 5 menit, dapat wangsit petunjuk jugaaa 😂
ternyata cara solve nya sangat mudah, tinggal binding docker.sock volume
di runner yang telah di set tadi … edit file /etc/gitlab-runner/config.toml
[runners.docker]
xxx
xxx
volumes = ["/cache"]
xxx
tambahkan docker socket di bagian volumes, menjadi
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
dan PIPELINE pun berjalan lancarrrr, YEAY 😌
⚠️ Note : saat menjalankan command gitlab-runner register
, konfigurasi akan otomatis di buat pada dir /etc/gitlab-runner/config.toml