Lewati ke konten utama
nafies

CI/CD

Memahami CI/CD dari Commit sampai Deployment

Apa yang sebenarnya terjadi setelah Anda menekan git push: dari continuous integration, artefak yang immutable, sampai strategi rilis dan rollback.

Penulis
Muhamad Nafis
Dipublikasikan
Waktu baca
4 menit

Konten contoh. Artikel ini disiapkan sebagai contoh dari template. Tinjau keakuratan dan sesuaikan isinya sebelum dipublikasikan.

Daftar isi

CI/CD sering dibicarakan sebagai satu hal, padahal isinya adalah serangkaian kebiasaan yang membuat perubahan kode dapat dirilis dengan aman dan berulang. Artikel ini mengikuti perjalanan satu commit, dari laptop developer sampai melayani pengguna di production.

CI, Continuous Delivery, dan Continuous Deployment

Ketiga istilah ini saling berkaitan, tetapi menjawab pertanyaan yang berbeda.

IstilahPertanyaan yang dijawabHasil akhir
Continuous Integration (CI)Apakah perubahan ini aman digabungkan?Kode di branch utama selalu lulus build dan test
Continuous DeliveryApakah versi ini siap dirilis kapan saja?Artefak siap deploy; rilis ke production butuh persetujuan
Continuous DeploymentBisakah rilis terjadi tanpa campur tangan manusia?Setiap perubahan yang lulus pipeline otomatis masuk production

Banyak tim memulai dari CI, lalu Continuous Delivery. Continuous Deployment baru masuk akal ketika test dan monitoring sudah cukup dipercaya untuk menggantikan pemeriksaan manual.

Perjalanan sebuah commit

Alur umum pipeline
  1. 01
    Commit & PRreview kode
  2. 02
    CIlint · test · build
  3. 03
    Artefakimage bertag
  4. 04
    Staginguji integrasi
  5. 05
    Productionrilis & pantau

1. Commit dan pull request

Perubahan dimulai di branch terpisah dan diajukan melalui pull request. Di tahap ini pipeline CI berjalan untuk pertama kalinya, sehingga reviewer dapat melihat apakah perubahan merusak build atau test sebelum membaca kodenya.

2. Continuous Integration: build dan test

CI menjalankan langkah yang sama di lingkungan bersih setiap kali ada perubahan. Urutannya biasanya dari yang paling cepat gagal:

  1. Instal dependensi dari lockfile agar versinya konsisten.
  2. Lint dan pemeriksaan tipe untuk menangkap kesalahan sederhana.
  3. Unit test, lalu integration test bila tersedia.
  4. Build aplikasi.

3. Artefak yang immutable

Setelah build berhasil, hasilnya dikemas menjadi artefak, misalnya image Docker. Prinsip pentingnya: bangun sekali, deploy berkali-kali. Artefak yang sama dipromosikan dari staging ke production, bukan dibangun ulang, sehingga yang diuji adalah persis yang dirilis.

Beri tag artefak dengan identitas yang unik, seperti SHA commit. Tag latest tidak memberi tahu versi mana yang sedang berjalan dan menyulitkan rollback.

4. Deploy ke staging

Staging adalah environment yang semirip mungkin dengan production. Di sini integrasi dengan database, layanan eksternal, dan konfigurasi nyata diuji. Konfigurasi dan secret diberikan melalui environment, bukan ditanam di dalam artefak.

5. Rilis ke production

Pada Continuous Delivery, rilis dipicu oleh persetujuan, misalnya melalui environment protection rule. Pada Continuous Deployment, langkah ini berjalan otomatis. Keduanya sebaiknya diakhiri dengan health check dan pemantauan metrics setelah rilis.

Contoh workflow GitHub Actions

Workflow berikut menjalankan test pada setiap pull request, lalu membangun dan mempublikasikan image ke GitHub Container Registry ketika ada push ke main.

.github/workflows/ci.yml
yaml
name: CI
 
on:
  pull_request:
  push:
    branches: [main]
 
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm test
 
  publish:
    needs: test
    if: github.event_name == 'push'
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - uses: docker/build-push-action@v6
        with:
          push: true
          tags: ghcr.io/${{ github.repository }}:${{ github.sha }}

Beberapa hal yang perlu diperhatikan:

  • needs: test memastikan image hanya dipublikasikan bila test lulus.
  • permissions dibatasi seperlunya. Token default hanya diberi akses tulis ke packages.
  • Tag memakai github.sha sehingga setiap image dapat ditelusuri ke commit asalnya.

Strategi deployment

Cara mengganti versi lama dengan versi baru memengaruhi risiko dan kebutuhan infrastruktur.

StrategiCara kerjaCocok untuk
RecreateHentikan versi lama, jalankan versi baruAplikasi internal yang boleh mengalami jeda singkat
Rolling updateGanti instance satu per satuAplikasi stateless dengan beberapa replika
Blue-greenSiapkan environment baru penuh, lalu alihkan trafikRilis yang butuh rollback instan
CanaryArahkan sebagian kecil trafik ke versi baru terlebih dahuluSistem dengan trafik besar dan monitoring yang matang

Rollback: rencanakan sejak awal

Rollback yang baik adalah rollback yang sudah pernah dicoba. Dengan artefak immutable, rollback cukup berarti menjalankan kembali tag versi sebelumnya. Hal yang lebih sulit adalah perubahan database: buat migrasi yang kompatibel ke belakang, misalnya menambah kolom baru terlebih dahulu dan baru menghapus kolom lama di rilis berikutnya.

Kesalahan umum

  • Membangun ulang artefak per environment. Hasilnya bisa berbeda dari yang diuji.
  • Test yang tidak stabil dibiarkan. Tim akan terbiasa mengabaikan pipeline merah.
  • Tidak ada health check. Container yang berjalan belum tentu aplikasinya sehat.
  • Pipeline hanya dipahami satu orang. Simpan konfigurasi di repository dan dokumentasikan alurnya.

Penutup

CI/CD bukan soal tools tertentu, melainkan tentang membuat setiap langkah rilis dapat diulang, diamati, dan dibatalkan. Mulailah dari CI yang andal, lanjutkan dengan artefak yang immutable, lalu otomatisasi deployment sedikit demi sedikit seiring meningkatnya kepercayaan terhadap test dan monitoring Anda.

Infrastructure as Code

Infrastructure as Code dan Manfaatnya

Mengapa infrastruktur sebaiknya ditulis sebagai kode, bagaimana alur kerja Terraform, dan hal yang perlu diwaspadai seperti state dan drift.

3 menit baca

Butuh bantuan menerapkannya?

Bila tim Anda ingin merapikan alur rilis, infrastruktur, atau monitoring, ceritakan kondisinya melalui form brief.