EMZETT.
Giriş yap

GitHub Actions: test ve dağıtım için iş akışları

Kısaca: GitHub Actions, push veya çekme isteği gibi olaylarda iş akışlarını otomatik çalıştırır: testler, lint, derlemeler ve dağıtımlar; depodaki YAML dosyalarında tanımlanır.

Biraz daha ayrıntılı: GitHub Actions ile CI/CD’yi doğrudan kodun yanında kurarsınız. Bir iş akışı (.github/workflows/ altındaki dosya) olaylarla tetiklenir ve runner’lar (sanal makineler, GitHub tarafından barındırılan veya kendi barındırdığınız) üzerinde işler (jobs) çalıştırır. Her iş adımlardan (steps) oluşur.

Ayrıntılı

Bir örnek

name: CI
on:
  push:
    branches: [main]
  pull_request:
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

uses: hazır eylemleri (actions) (pazaryeri) dahil eder, run: komutları çalıştırır. Sonuç çekme isteğinde yeşil bir onay veya kırmızı bir çarpı olarak görünür.

Önemli kavramlar

  • Tetikleyiciler: push, pull_request, schedule (cron), workflow_dispatch (elle), release.
  • Matris: birkaç sürümde/sistemde testler (strategy.matrix).
  • Önbellekleme ve artifact’ler hızlandırır ve sonuçları saklar.
  • Kimlik bilgileri için sırlar (${{ secrets.NAME }}), onaylı değişkenler ve ortamlar (üretim için onay).
  • İşler arası bağımlılıklar (needs:), koşullar (if:).
  • Yeniden kullanılabilir iş akışları ve bileşik eylemler.

Güvenlik

  • Asgari izinler: iş akışında permissions: ayarlayın (contents: read), belirteci gereğinden fazla yetkilendirmeyin.
  • Eylemleri sabitleyin (taşınabilir bir etiket yerine bir commit SHA’sına), güvenilir kaynaklar kullanın: tedarik zinciri saldırıları gerçektir.
  • Sırları asla günlüklere yazdırmayın; fork’lardan gelen çekme istekleri için iş akışları varsayılan olarak sır almaz (haklı olarak).
  • pull_request_target yalnızca büyük dikkatle.
  • Dependabot eylem sürümlerini güncel tutabilir.
  • Girdileri (dal adları, başlıklar) denetlenmeden kabuk komutlarına eklemeyin (enjeksiyon).

Maliyetler ve sınırlar

Herkese açık depolarda dakikalar ücretsizdir, özel olanlarda bir kota vardır ve sonra ücret; bir ödeme sorunu veya tükenmiş sınır işlerin hiç başlamamasına yol açabilir. Hızlı iş akışları planlayın, önbellek kullanın, matrisi ve çalışma süresini sınırlayın ve CI’ın yalnızca sizin yerelde yaptığınızı çalıştırması için yerelde yeniden üretilebilir komutları (npm test) hazır tutun. Alternatifler: GitLab CI, CircleCI, Jenkins, Forgejo/Gitea Actions.

Ayrıca bak: CI/CD ardışık düzeni, GitHub, Git hook’ları, Yazılım tedarik zinciri