GitLab CI/CD Fundamentals
Memahami .gitlab-ci.yml, stage, job, runner, variable, cache, artifact, rules, dan environment di GitLab CI/CD.
GitLab CI/CD terintegrasi langsung dengan repository GitLab. Pipeline didefinisikan dalam
.gitlab-ci.yml dan dijalankan oleh GitLab Runner.
Konsep utama
| Konsep | Arti |
|---|---|
| Pipeline | Rangkaian stage dan job untuk satu commit |
| Stage | Tahap berurutan (build, test, deploy) |
| Job | Pekerjaan yang dijalankan runner |
| Runner | Agen yang mengeksekusi job |
| Variable | Nilai konfigurasi dan rahasia |
| Artifact | File hasil job |
| Cache | Data yang dipakai ulang |
| Environment | Target deployment (staging/production) |
Pipeline pertama
.gitlab-ci.yml:
stages:
- build
- test
- deploy
default:
image: node:22-alpine
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
build:
stage: build
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 week
lint:
stage: test
script:
- npm ci
- npm run lint
test:
stage: test
script:
- npm ci
- npm test
deploy:
stage: deploy
script:
- echo "Deploy ke production"
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: manual
environment:
name: productionStage dan urutan
stages: [build, test, deploy]Stage berjalan berurutan. Job dalam stage yang sama berjalan paralel (sesuai concurrency runner).
test:
stage: test
needs: [build]needs memungkinkan job berjalan lebih awal tanpa menunggu seluruh stage sebelumnya.
Job dan script
unit-test:
stage: test
script:
- npm ci
- npm test
before_script:
- echo "Persiapan"
after_script:
- echo "Selesai"| Bagian | Fungsi |
|---|---|
before_script | Persiapan sebelum script utama |
script | Perintah utama |
after_script | Selalu dijalankan setelah script |
Variable
variables:
NODE_ENV: test
APP_PORT: "3000"Variable rahasia disimpan di Settings → CI/CD → Variables dan ditandai Masked serta Protected bila perlu.
deploy:
script:
- echo "Token tersedia sebagai $DEPLOY_TOKEN"Lindungi variable rahasia
Tandai variable sebagai Protected agar hanya tersedia pada branch/tag terlindungi, dan Masked agar tidak muncul di log. Jangan pernah menulis secret ke artifact.
Cache vs artifact
| Aspek | Cache | Artifact |
|---|---|---|
| Tujuan | Mempercepat job berikutnya | Meneruskan hasil ke job/stage lain |
| Lokasi | Runner/cache server | Storage GitLab |
| Contoh | node_modules, .npm | dist/, laporan test |
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- .npm/
artifacts:
paths:
- dist/
reports:
junit: junit.xmlRules dan kondisi
deploy-staging:
stage: deploy
script: ./deploy.sh staging
rules:
- if: '$CI_COMMIT_BRANCH == "develop"'
deploy-production:
stage: deploy
script: ./deploy.sh production
rules:
- if: '$CI_COMMIT_TAG'
when: manual| Kondisi | Arti |
|---|---|
CI_COMMIT_BRANCH | Branch saat ini |
CI_COMMIT_TAG | Tag rilis |
CI_PIPELINE_SOURCE | Sumber pipeline |
when: manual | Tombol manual |
Include dan template
Pecah pipeline besar:
include:
- local: '.gitlab/ci/test.yml'
- local: '.gitlab/ci/deploy.yml'
- template: Security/SAST.gitlab-ci.ymlIni menjaga file utama tetap ringkas dan dapat dipakai ulang.
Docker di GitLab CI
build-image:
stage: build
image: docker:27
services:
- docker:27-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
- docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" .
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"Runner harus mendukung Docker-in-Docker atau socket binding.
Environment dan deployment
deploy:
stage: deploy
script:
- ./deploy.sh
environment:
name: production
url: https://app.example.comGitLab mencatat deployment, memungkinkan rollback, dan menampilkan status environment.
Praktik: pipeline Node.js
- Buat
.gitlab-ci.ymldengan stage build, test, deploy. - Gunakan
npm cidan cache berdasarkan lockfile. - Simpan
dist/sebagai artifact. - Jalankan lint dan test paralel.
- Deploy hanya dari
mainatau tag. - Simpan variable rahasia di pengaturan CI/CD.
- Gunakan
needsuntuk mempercepat pipeline.
Ringkasan
.gitlab-ci.ymlmendefinisikan stage, job, dan aturan.- Runner mengeksekusi job; cache dan artifact menghemat waktu.
- Variable rahasia harus protected dan masked.
- Environment mencatat deployment dan mendukung rollback.
Selanjutnya
Pilih platform dengan GitHub Actions vs GitLab CI/CD.