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 😩 😩

 

Gitlab Runner

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

Get Token

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

runner success

 

 

 

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

Untagged Jobs

⚠️ Note : tags di gitlab CI / CD berbeda dengan git tagtags 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"]

gitlab pipeline

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