Paket 2 · Praktik LanjutanModul A — Git, GitHub & GitLab

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

KonsepArti
PipelineRangkaian stage dan job untuk satu commit
StageTahap berurutan (build, test, deploy)
JobPekerjaan yang dijalankan runner
RunnerAgen yang mengeksekusi job
VariableNilai konfigurasi dan rahasia
ArtifactFile hasil job
CacheData yang dipakai ulang
EnvironmentTarget 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: production

Stage 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"
BagianFungsi
before_scriptPersiapan sebelum script utama
scriptPerintah utama
after_scriptSelalu 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

AspekCacheArtifact
TujuanMempercepat job berikutnyaMeneruskan hasil ke job/stage lain
LokasiRunner/cache serverStorage GitLab
Contohnode_modules, .npmdist/, laporan test
cache:
  key: "$CI_COMMIT_REF_SLUG"
  paths:
    - .npm/

artifacts:
  paths:
    - dist/
  reports:
    junit: junit.xml

Rules 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
KondisiArti
CI_COMMIT_BRANCHBranch saat ini
CI_COMMIT_TAGTag rilis
CI_PIPELINE_SOURCESumber pipeline
when: manualTombol manual

Include dan template

Pecah pipeline besar:

include:
  - local: '.gitlab/ci/test.yml'
  - local: '.gitlab/ci/deploy.yml'
  - template: Security/SAST.gitlab-ci.yml

Ini 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.com

GitLab mencatat deployment, memungkinkan rollback, dan menampilkan status environment.

Praktik: pipeline Node.js

  1. Buat .gitlab-ci.yml dengan stage build, test, deploy.
  2. Gunakan npm ci dan cache berdasarkan lockfile.
  3. Simpan dist/ sebagai artifact.
  4. Jalankan lint dan test paralel.
  5. Deploy hanya dari main atau tag.
  6. Simpan variable rahasia di pengaturan CI/CD.
  7. Gunakan needs untuk mempercepat pipeline.

Ringkasan

  • .gitlab-ci.yml mendefinisikan 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.

On this page