Quick Start: GitLab CI/CD
This work by Muhammad Raihan Widagdo is licensed under CC BY-SA 4.0
Disclaimer: Artikel ini ditujukan untuk pembaca yang telah memiliki pemahaman dasar tentang shell scripting. Pengetahuan dasar ini meliputi pemahaman tentang perintah dasar dalam lingkungan shell, struktur dasar dari script shell, dan konsep dasar seperti variabel, loop, dan pengkondisian. Pembaca yang belum familiar dengan konsep dasar ini mungkin merasa kesulitan untuk memahami secara menyeluruh isi artikel ini.
GitLab CI/CD adalah bagian dari platform GitLab. GitLab CI/CD adalah alat pengembangan perangkat lunak yang memungkinkan organisasi untuk menerapkan metodologi “continuous“, termasuk continuous integration (CI), continuous delivery (CD), dan continuous deployment (juga disingkat sebagai CD)
Sebelum itu, mungkin anda sudah tahu tentang GitHub Actions. Secara garis besar GitLab CI/CD bekerja layaknya GitHub Actions. Sedikit informasi bagi anda, GitLab lebih dulu merilis fitur ini jauh lebih dulu pada akhir tahun 2015 pada versi GitLab 8.0, jauh lebih dulu dari GitHub Actions yang baru dirilis pada tahun 2018.
Konsep Dasar Gitlab CI/CD
File .gitlab-ci.yml
Pada dasarnya file ini menjelaskan apa saja yang harus dilakukan atau dijalankan oleh CI/CD. File ini menggunakan format YAML, namun memiliki sintaks khusus.
Runners
Runners adalah agen yang menjalankan pekerjaan dalam GitLab CI/CD. Dalam file .gitlab-ci.yml
, kita juga dapat menentukan container image apakah yang ingin diguakan. Sehingga, kita dapat fleksibel menggunakan OS yang akan kita gunakan untuk menjalankan pekerjaan CI/CD.
Pipelines
Pipelines terdiri dari pekerjaan dan tahapan:
- Pekerjaan mendefinisikan apa yang ingin dilakukan. Misalnya, menguji perubahan kode, atau melakukan implementasi ke lingkungan staging.
- Pekerjaan dikelompokkan ke dalam tahapan. Setiap tahapan minimal berisi satu pekerjaan. Tahapan umumnya dapat berupa
build
,test
, dandeploy
.
Variabel CI/CD
Seperti variabel pada umumnya. Variabel CI/CD dapat digunakan untuk menyimpan suatu nilai yang dibutuhkan dalam CI/CD. GitLab CI/CD juga akan secara otomatis menambahkan variabel predefined dalam setiap proses seperti variabel $GITLAB_USER_LOGIN
yang berisi string user yang memulai suatu pipeline.
Berikut contoh dari .gitlab-ci.yml
:
# Sedikit catatan, GitLab CI/CD berikut menggunakan Bahasa Inggris mengingat bila diterjemahkan akan sangat aneh bila menggunakan Bahasa Indonesia.
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- echo "This job tests something"
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
environment: production
Dari beberapa penjelasan tadi, GitLab CI/CD akan sangat bermanfaat untuk kita gunakan sebagai otomatisasi beberapa tugas. Misalnya saja, kita membutuhkan adanya suatu proses build dan deploy secara otomatis bila terdapat push kode baru ke branch tertentu.
Sedikit Percobaan
Sebagai contoh, pertama anda dapat melihat repository berikut. Akan kita bahas isi dari .gitlab-ci.yml
Dalam kode tersebut terdiri dari 2 tahapan yaitu test
dan build
.
stages:
- test
- build
Untuk tahapan test
, kita perlu melakukan beberapa script untuk testing. Sebelum melakukan test tentu saja kita perlu melakukan npm install
untuk menyiapkan package yang diperlukan. Perlu dicatat, script ini hanya akan dijalankan bila terdapat perubahan di branch main
.
test:
image: "node:20-alpine"
script:
- npm install || exit 1
- npm test || exit 1
only:
- main
Selanjutnya terdapat tahapan build. Terdapat sedikit problem untuk menjalankan Docker DIND di GitLab Runner. Sebagai gantinya, Podman digunakan untuk melakukan build image. Anda juga bisa menambahkan perintah untuk melakukan push image ke registry.
build:
image: "mgoltzsche/podman"
script:
- podman build -t test-ci-node . || exit 1
# - podman push ...
only:
- main
Kesimpulan
GitLab CI/CD adalah salah satu solusi yang disediakan oleh GitLab untuk melakukan proses CI/CD dan otomatisasi. GitLab CI/CD memiliki keunggulan yaitu memiliki integrasi yang bagus dengan platform GitLab, sehingga dapat menggantikan beberapa solusi otomatisasi lain seperti Jenkins atau GitHub Actions.