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 testuses: 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_targetyalnı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