Quick Start: GitLab CI/CD


This work by Muhammad Raihan Widagdo is licensed under CC BY-SA 4.0

Image ©GitLab

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, dan deploy.

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.