GitHub Actions ile Otomatik Test ve Dağıtım Süreçlerinin Basitleştirilmesi

GitHub Actions ile Otomatik Test ve Dağıtım Süreçlerinin Basitleştirilmesi
audio-thumbnail
GitHub Actions ile Otomatik Test ve Dağıtım Süreçlerinin Basitleştirilmesi
0:00
/0

GitHub Actions ile Otomatik Test ve Dağıtım Süreçlerinin Basitleştirilmesi

Geliştirme süreçlerinde hız ve doğruluk, her yazılım ekibinin hedefidir. Ancak bu hedeflere ulaşmak için sıkıcı ve zaman alan adımlarla karşılaşırsınız. Özellikle test etme, derleme ve dağıtım gibi süreçler, insan eliyle yapıldığında hem hata riski artar hem de geliştirme hızı düşer. İşte bu noktada GitHub Actions devreye girer. GitHub Actions, geliştirme sürecinde bu tür görevleri otomatikleştirmenin güçlü bir yoludur. Peki bu araç nasıl çalışır? Nasıl kullanılır? Ve gerçekten geliştirme hızını artırır mı?

GitHub Actions Nedir?

GitHub Actions, GitHub’ın kendi içinde sunmuş olduğu bir otomasyon sistemidir. Kendisine verilen talimatları, GitHub’ın sunucularında çalıştırarak istenen işlemleri otomatik hale getirir. Bir nevi GitHub üzerinde çalışan bir “robot” gibi düşünebilirsiniz. Bu robot, belirtilen olaylar (örneğin bir kod değişikliği, bir çekme isteği ya da belirli bir zaman) gerçekleştiğinde çalışır ve size beklenen çıktıyı verir.

Örneğin, bir Hugo site geliştiriyorsanız, her yeni yazı eklediğinizde manuel olarak siteyi derleyip dağıtmak yerine GitHub Actions’ın çalıştırmasıyla bu işlem otomatik olarak yapılır. Artık bir yazıyı GitHub’a gönderdiğiniz anda, robot otomatik olarak siteyi derler ve yayınlanır.

Nasıl Çalışır?

GitHub Actions, bir iş akışı dosyası (workflow file) üzerinden çalışır. Bu dosya, .github/workflows/ dizini altında .yml veya .yaml uzantılı bir dosya olarak yer alır. Her repo’da birden fazla iş akışı dosyası olabilir ama temelde her birinin iki ana bölümden oluşması gerekir: on ve jobs.

1. on Bölümü: Ne Zaman Çalıştırılacak?

Bu bölüm, hangi olaylarla birlikte iş akışının tetikleneceğini belirler. Örneğin:

  • Bir push yapıldığında
  • Bir pull_request oluşturulduğunda
  • Belirli bir zaman diliminde (zamanlayıcı ile)

GitHub Actions’ın cron sistemini kullanarak belirli bir saatte otomatik olarak çalıştırılabilir. Örneğin her gün saat 01:26’da çalıştırma istiyorsanız, cron: '26 1 * * *' yazarsınız. Bu, UTC zaman dilimine göre çalışır.

Ayrıca, bir iş akışını manuel olarak çalıştırma imkanı da vardır. Bu, workflow_dispatch trigger’ı sayesinde mümkündür. Bu sayede, test amaçlı bir çalıştırma yaparken boş bir commit atmak zorunda kalmazsınız.

2. jobs Bölümü: Ne Yapılacak?

Bu bölüm, iş akışının yapacağı adımları tanımlar. Her job, bir makinede çalışır ve bu makine, runs-on ile belirlenir (örneğin ubuntu-latest, windows-latest, macos-latest gibi).

İş akışı, sırayla çalışacak adımlar (steps) içerir. Her adım, belirli bir görevi yerine getirir. Örneğin:

  • Hugo CLI’yi kur
  • Dart Sass’ı yükle
  • Kodu indir (checkout)
  • Sitenin derlenmesini sağla
  • public/ klasörünü bir artifact olarak yükle

Böylece bir çalışan, tüm bu adımları sırayla yapar ve sonuçta bir site veya uygulama dağıtımı gerçekleşir.

Gerçek Bir Örnek: Hugo Site Otomasyonu

Bir Hugo site geliştiriyorsanız, geleneksel olarak yerel bilgisayarda siteyi derleyip public/ klasörünü GitHub’a gönderirsiniz. Ancak GitHub Actions ile bu süreç tamamen otomatikleşir. Sadece yeni bir yazı eklediğinizde, GitHub Actions, siteyi otomatik olarak derler ve yayınlar.

Bu süreçte, .github/workflows/hugo.yml dosyası içinde aşağıdaki gibi bir yapı kullanılır:

on:
  push:
    branches:
      - main
  schedule:
    - cron: '26 1 * * *'
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      HUGO_VERSION: 0.166.0
    steps:
      - name: Install Hugo CLI
        run: wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb && sudo dpkg -i ${{ runner.temp }}/hugo.deb
      - name: Install Dart Sass
        run: sudo snap install dart-sass
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: recursive
          fetch-depth: 0
      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v4
      - name: Install Node.js dependencies
        run: " [[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
      - name: Build with Hugo
        env:
          HUGO_CACHEDIR: ${{ runner.temp }}/hugo_cache
          HUGO_ENV: production
        run: hugo --gc --minify
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./public

Bu dosya, GitHub’ın sunucularında çalıştırıldığında, her yeni yazıda veya belirli bir saatte otomatik olarak siteyi derler, derleme sonucunu paketler ve yayınlama işlemi yapar.

İlk GitHub Actions’ınızı Nasıl Yazarsınız?

İlk adım, çok karmaşık bir şey yapmak değil, basit bir deneme yapmaktır. Örneğin, her kod değişikliği yapıldığında “hello” yazan bir çalıştırma yapabilirsiniz:

on:
  push

jobs:
  hello:
    runs-on: ubuntu-latest
    steps:
      - run: echo "hello"

Bu dosyayı .github/workflows/hello.yml olarak kaydedip, projenize eklerseniz, her push yaptığınızda GitHub Actions çalışır ve ekrana “hello” yazdırır. Gerçekten de, bu kadar kolay!

GitHub Actions Ne Kadar Kullanışlıdır?

GitHub Actions, sadece bir otomasyon aracı değil, geliştirme hızınızı artırmak için önemli bir araçtır. Çünkü:

  • Zaman kazandırır: Test, derleme, dağıtım gibi adımları otomatikleştirerek el işi zamanı azaltır.
  • Hata oranını düşürür: İnsan eliyle yapılan işlemlerde hata olasılığı yüksektir. Otomasyon, bu riski önemli ölçüde azaltır.
  • Yakın zamanda geliştirme hızı artar: Geliştiriciler, test ve dağıtım gibi altyapı görevlerinden kurtulduğunda, daha fazla zamanını kod yazmaya ve özellik geliştirmeye ayırabilir.

GitHub Actions, sadece bir proje için değil, tüm yazılım yaşam döngüsünde yer alır. Her projede farklı otomasyonlar oluşturabilirsiniz: testlerin otomatik çalışması, e-posta gönderimi, rapor üretimi, depolama kontrolü…

Sonuç

GitHub Actions, geliştirme süreçlerini basitleştirmek için mükemmel bir araçtır. Gerçek bir örnek olarak Hugo site otomasyonu, bu araçların ne kadar etkili olduğunu gösterir. Basit bir .yml dosyası ile bile büyük bir otomasyon sistemi kurabilirsiniz.

İlk adımınızı attıktan sonra, yavaş yavaş daha karmaşık iş akışları oluşturabilir, farklı türde projelerde kullanabilir ve geliştirme hızınızı kat kat artırabilirsiniz. GitHub Actions, sadece bir otomasyon değil, bir dönüşüm yoludur. Ve bu dönüşüm, her yazılım geliştiricisi için değerlidir.