Laravel ile Otomatik Test Altyapısı (CI/CD) ve GitHub Actions Kullanımı

L

Modern yazılım geliştirme süreçlerinde, Continuous Integration (CI) ve Continuous Deployment (CD) sistemleri, yazılım kalitesini artırmak ve kod teslim süreçlerini hızlandırmak için kritik öneme sahiptir. Laravel projelerinde bu altyapıyı kurmak, projeyi daha güvenilir hale getirirken otomatik testler ve sürekli entegrasyon süreçleriyle hataları minimuma indirir.

Bu yazıda, Laravel için CI/CD süreçlerinin nasıl oluşturulacağını ve GitHub Actions kullanarak testlerin otomatik çalıştırılması ile dağıtım süreçlerinin nasıl yönetileceğini adım adım inceleyeceğiz.

CI/CD Nedir?

  • Continuous Integration (CI): Geliştiricilerin yazdığı kodların sürekli olarak birleştirilmesi ve test edilmesidir.
  • Continuous Deployment (CD): Başarılı testlerden sonra kodun otomatik olarak hedef sunucuya dağıtılması sürecidir.

Laravel projelerinde bu süreçleri kurarak, kodunuzu daha hızlı ve güvenilir bir şekilde teslim edebilirsiniz.

GitHub Actions Nedir?

GitHub Actions, GitHub projelerinde CI/CD süreçlerini otomatikleştirmek için kullanılan bir araçtır. Git deposundaki olaylara (örneğin, yeni bir commit, PR açılması, ya da merge işlemi) göre çalışır ve testler, kod analizi, derleme veya dağıtım gibi görevleri yerine getirir.

Laravel Projesi İçin CI/CD Süreci Kurulumu

1. Laravel Projesinde Test Ortamının Hazırlanması

Öncelikle, projenizde test altyapısının düzgün çalıştığından emin olun. Laravel'de testler için PHPUnit ve Laravel Dusk gibi araçlar kullanılabilir.

Örnek Test Dosyası:

php artisan make:test ExampleTest

tests/Feature/ExampleTest.php:

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_homepage_loads_correctly()
    {
        $response = $this->get('/');
        $response->assertStatus(200);
    }
}

Testleri yerel ortamınızda çalıştırarak kontrol edin:

php artisan test

2. GitHub Actions Workflow Dosyası Oluşturma

GitHub Actions'ı kullanmak için, proje kök dizininde .github/workflows/ klasörünü oluşturun ve içine bir laravel-ci.yml dosyası ekleyin:

name: Laravel CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  laravel-tests:
    runs-on: ubuntu-latest

    steps:
      # 1. Git deposunu klonla
      - name: Checkout repository
        uses: actions/checkout@v3

      # 2. PHP kurulumu
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'
          extensions: mbstring, exif, pcntl, bcmath
          ini-values: post_max_size=256M, upload_max_filesize=256M
          coverage: xdebug

      # 3. Composer bağımlılıklarını yükle
      - name: Install dependencies
        run: composer install --prefer-dist --no-progress --no-suggest

      # 4. Laravel projesini yapılandır
      - name: Setup Laravel
        run: |
          cp .env.example .env
          php artisan key:generate

      # 5. Testleri çalıştır
      - name: Run Tests
        run: php artisan test

Bu workflow dosyası, şu işlemleri yapar:

  1. Proje kodlarını klonlar.
  2. Gerekli PHP ortamını hazırlar.
  3. Laravel bağımlılıklarını Composer ile yükler.
  4. Test ortamını hazırlar.
  5. PHPUnit testlerini çalıştırır.

Workflow dosyasını oluşturduktan sonra, yeni bir commit ile GitHub'a gönderin.

3. CI/CD Pipeline'ını Test Etme

Kod deposuna bir pull request açtığınızda veya main dalına bir push yaptığınızda, GitHub Actions otomatik olarak çalışmaya başlayacaktır. Workflow çalışmasını GitHub Actions sekmesinde görebilirsiniz.

Başarılı bir CI sürecinde, testlerin tamamlanmasıyla sonuçlanır:

Run Tests
   PASS  Tests\Feature\ExampleTest

Continuous Deployment (CD) ile Laravel Dağıtımı

Testler başarılı olduğunda kodun otomatik olarak sunucuya dağıtılmasını sağlayabilirsiniz. Bunun için Laravel projenizde dağıtımı yapılandırmak üzere SSH erişimi kullanabilirsiniz.

1. Sunucu Ayarlarının Yapılandırılması

GitHub deposundan kod çekmek için hedef sunucuda SSH anahtarı oluşturun:

ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

Oluşturulan ~/.ssh/id_rsa.pub dosyasını GitHub'daki projenizin Deploy Keys bölümüne ekleyin.

2. GitHub Actions İçin Dağıtım İşlemleri

laravel-ci.yml dosyasına dağıtım adımını ekleyin:

deploy:
    name: Deploy to Production
    runs-on: ubuntu-latest
    needs: laravel-tests

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Deploy code to server
        run: |
          ssh user@your-server 'cd /path/to/your-project && git pull origin main && composer install --no-dev && php artisan migrate --force'
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}

Bu adımlar:

  1. Sunucudaki mevcut kodu günceller.
  2. Composer bağımlılıklarını yükler.
  3. Laravel migration işlemini çalıştırır.

Örnek CI/CD Süreci

  • Adım 1: Geliştirici, yeni bir özelliği içeren kodu main dalına gönderir.
  • Adım 2: GitHub Actions, Laravel testlerini çalıştırır. Eğer testler geçerse, otomatik olarak dağıtım başlar.
  • Adım 3: Kod başarıyla sunucuya dağıtılır ve canlıya alınır.

Sonuç

Laravel projelerinde CI/CD süreçlerini GitHub Actions ile kurmak, hem kod kalitesini artırır hem de dağıtım sürecini otomatize ederek geliştiricilere zaman kazandırır. Yukarıdaki adımları takip ederek, projeniz için güçlü bir CI/CD altyapısı oluşturabilirsiniz.

Bu sistemle, testler ve dağıtım süreçleri tamamen otomatik hale gelir, böylece manuel hatalar minimize edilir ve ekip daha verimli çalışır. Projeniz büyüdükçe, bu altyapıyı genişleterek daha karmaşık dağıtım süreçlerini de destekleyebilirsiniz.

By Aydın Yağız

Aydın Yağız

Teknolojiye olan tutkumla inovasyonu destekler, kullanıcı deneyimini önceliklerim arasına alırım. Kendi yeteneklerimi ve bilgilerimi paylaşarak, daha geniş bir topluluğun faydalanmasını sağlarım. İş birliği içinde hareket ederek, geleceğin teknoloji dünyasına katkıda bulunmayı hedeflerim. Sizi de bu heyecan verici yolculuğa davet ediyor, fikirlerinizi paylaşmaya ve teknolojiye dair sınırları zorlamaya teşvik ediyorum. Birlikte büyüyelim ve yeni ufuklara açılalım!

İletişime Geçin

Kodlama dünyasına adım atın ve deneyimlerinizi paylaşın. Siz de bu aktif topluluğa katılarak yeni bağlantılar kurun, fikir alışverişinde bulunun ve bilgi birikiminizi artırın.

Özelleştir

Farklı yazı tipleri ve renk seçenekleriyle stilinizi kişiselleştirin. Aşağıdaki örneklerden birini deneyerek sizin için en uygun olanı seçin.

Yazı Tipi Örnekleri

Renk Örnekleri