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:
- Proje kodlarını klonlar.
- Gerekli PHP ortamını hazırlar.
- Laravel bağımlılıklarını Composer ile yükler.
- Test ortamını hazırlar.
- 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:
- Sunucudaki mevcut kodu günceller.
- Composer bağımlılıklarını yükler.
- 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
maindalı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.
