Lewati ke konten utama
menjadi.dev
Chapter 21.4 DevOps Lanjutan

GitHub Actions: CI/CD untuk Tim

Automatisasi testing, building, dan deployment dengan GitHub Actions

Tujuan Pembelajaran

  • Bisa membuat GitHub Actions workflow
  • Mengerti triggers, jobs, dan steps
  • Bisa setup automated testing dan deployment

Analogi

Diagram

      GitHub Actions:
├── Trigger (on: push, PR, schedule)
├── Job (group of steps)
├── Step (individual command/action)
└── Runner (execution environment)
    

GitHub Actions mengotomatisasi workflow development — dari test sampai deploy

Penjelasan Konsep

Setelah menguasai Git dan Pull Request, saatnya mengotomatisasi workflow dengan GitHub Actions. CI/CD (Continuous Integration/Continuous Deployment) adalah praktik otomatisasi build, test, dan deploy setiap kali ada perubahan kode.

Kenapa CI/CD?

  1. Konsistensi: Setiap perubahan melewati proses yang sama
  2. Cepat: Otomatisasi lebih cepat dan tidak terlupakan daripada manual
  3. Safety: Test sebagai gatekeeper sebelum deploy
  4. Visibility: Semua orang bisa lihat status build

Konsep GitHub Actions

Workflow

File YAML di .github/workflows/ yang mendefinisikan automation.

Trigger

Event yang memicu workflow:

  • push: Saat ada push ke branch
  • pull_request: Saat ada PR dibuat/updated
  • schedule: Jadwal periodic (cron)
  • workflow_dispatch: Manual trigger dari UI

Job

Group dari steps yang berjalan pada satu runner. Jobs bisa parallel atau sequential (dengan needs).

Step

Individual command atau action.

Runner

Mesin virtual yang mengeksekusi workflow (Ubuntu, Windows, macOS).

Action

Reusable unit of code. Bisa dari GitHub Marketplace atau buat sendiri.

Contoh Workflow Lengkap

name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: oven-sh/setup-bun@v1
      - run: bun install
      - run: bun run lint
      - run: bun test
      - run: bun run build
  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - run: echo "Deploying..."

Secrets dan Environment Variables

Simpan API key dan credential secara aman:

  1. Buka repository Settings → Secrets and variables → Actions
  2. Tambahkan secret (ter-enkripsi) atau variable
  3. Akses di workflow dengan ${{ secrets.NAMA_SECRET }}

Inti yang Perlu Dipahami

Bagian ini berfokus pada bisa membuat GitHub Actions workflow., mengerti triggers, jobs, dan steps., dan bisa setup automated testing dan deployment. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca GitHub Actions, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

GitHub Actions mengotomatisasi workflow development — dari test sampai deploy. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa yaml. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. needs: lint-and-test membuat job deploy menunggu job test selesai. if: github.ref memastikan deploy hanya dari branch main.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

yaml
# .github/workflows/ci.yml
name: CI/CD Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  lint-and-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Bun
        uses: oven-sh/setup-bun@v1
        with:
          bun-version: latest

      - name: Install dependencies
        run: bun install

      - name: Run linter
        run: bun run lint

      - name: Run tests
        run: bun test

      - name: Upload coverage
        uses: actions/upload-artifact@v4
        with:
          name: coverage-report
          path: coverage/

  build-and-deploy:
    needs: lint-and-test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - uses: oven-sh/setup-bun@v1

      - name: Install and build
        run: |
          bun install
          bun run build

      - name: Deploy to production
        env:
          DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
        run: |
          echo "Deploying with key $DEPLOY_KEY"
          # Deployment commands here

Penjelasan Kode

needs: lint-and-test membuat job deploy menunggu job test selesai. if: github.ref memastikan deploy hanya dari branch main.

Prompt AI

Setup GitHub Actions untuk proyek-mu: lint → test → build. Tambahkan step untuk upload artifact dan notification.

Pertanyaan Reflektif

CI/CD yang cepat = feedback loop yang cepat. Target: pipeline selesai dalam < 5 menit untuk unit + integration test.