GitHub Actions Dasar — DevOps

Apa itu GitHub Actions? GitHub Actions adalah platform CI/CD bawaan GitHub. Workflow didefinisikan dalam file YAML di .github/workflows/. Konsep Utama…

GitHub Actions adalah layanan CI/CD bawaan GitHub. Kamu menulis workflow dalam file YAML di repo, dan setiap kali sebuah event terjadi (misalnya push), GitHub menyalakan mesin baru dan menjalankan langkah-langkahnya. Ingat dapur katering di pelajaran Apa itu CI/CD? Workflow adalah lembar SOP yang ditempel di dinding dapurnya: kapan dikerjakan (setiap ada pesanan baru), di dapur mana (koki baru dengan dapur kosong), dan langkahnya satu per satu.

🧪 Tebakan cepat: step pertama workflow-mu langsung run: npm ci, tanpa actions/checkout. Lulus atau gagal? Tebak dulu, jawabannya ada di bagian "Runner mulai dari mesin kosong".

File workflow ada di .github/workflows

GitHub cuma membaca workflow dari folder .github/workflows/ di root repo. Setiap file .yml atau .yaml di situ adalah satu workflow. Ini ci.yml milik catatan-api, sama dengan yang ada di Lab:

# .github/workflows/ci.yml
name: CI

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

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm test

Sedikit YAML dulu: kunci: nilai per baris, isi yang menjorok (pakai spasi, bukan tab) adalah milik kunci di atasnya, baris diawali - adalah satu item daftar, dan [main] adalah daftar yang ditulis dalam satu baris.

on: kapan workflow jalan

Di latihannya kamu membaca format sederhana buatan latihan, on: push, pull_request, yang dipisah koma. Di file workflow asli, daftar seperti itu ditulis dengan kurung siku: on: [push, pull_request].

steps: uses atau run

Setiap step memakai salah satu dari dua kunci ini:

Kalau tertukar, hasilnya beda. run: actions/checkout@v4 dijalankan bash sebagai perintah, dan gagal dengan actions/checkout@v4: No such file or directory (exit code 127). uses: npm test bahkan gak sempat jalan, karena GitHub menolak file-nya: Expected format {org}/{repo}[/path]@ref. Actual 'npm test'.

Runner mulai dari mesin kosong

Setiap job dapat mesin baru yang bersih. Belum ada kode repo-mu di sana. Itulah tugas actions/checkout: menyalin repo ke folder kerja runner, /home/runner/work/catatan-api/catatan-api. Tanpa checkout, npm ci gak menemukan package.json:

Run npm ci
npm error code ENOENT
npm error syscall open
npm error path /home/runner/work/catatan-api/catatan-api/package.json
npm error errno -2
npm error enoent Could not read package.json: Error: ENOENT: no such file or directory, open '/home/runner/work/catatan-api/catatan-api/package.json'
Error: Process completed with exit code 254.

Jadi jawabannya gagal. Itu jawaban tebakannya. Step yang gagal menghentikan job: step sesudahnya dilewati.

Membaca log Actions

Buka tab Actions, pilih run-nya, lalu job test. Untuk workflow di atas, setelah push ke main, daftar step-nya begini:

✓ Set up job
✓ Run actions/checkout@v4
✓ Run actions/setup-node@v4
✓ Run npm ci
✓ Run npm test
✓ Post Run actions/setup-node@v4
✓ Post Run actions/checkout@v4
✓ Complete job

Urutan job dengan needs, test di beberapa versi Node dengan matrix, dan branch protection dibahas di pelajaran Testing di CI/CD Pipeline. Pelajaran berikutnya, GitHub Actions Advanced, melanjutkan ke cache, environment, dan secret.

⚠️ Jebakan yang sering ketemu

TL;DR: Workflow GitHub Actions ditulis dalam YAML di .github/workflows/. on menentukan event pemicunya (push dan pull_request, dengan branches: [main] untuk membatasi branch), jobs berisi job yang masing-masing jalan di runner baru (runs-on: ubuntu-latest), dan steps berjalan berurutan. uses: pemilik/repo@versi menjalankan action (misalnya actions/checkout@v4, wajib di awal karena runner mulai kosong), run: menjalankan perintah shell. Step yang gagal menghentikan job, dan alasannya ada tepat di atas Error: Process completed with exit code ....

Yang akan kamu pelajari