Birleştirme Çatışması Kâbusu
Geleneksel Git iş akışlarında, B2B SaaS platformu için büyük bir yeni özellik geliştiren yazılımcılar genellikle haftalarca ayrı ve uzun ömürlü bir “feature branch” üzerinde çalışır. Sorun şu ki, özellik hazır olduğunda, ana üretim dalı tamamen değişmiş durumdadır. Haftalarca süren bu dalın birleştirilmesi, yıkıcı bir birleştirme çatışmasına, bozuk testlere ve büyük bir dağıtım kaygısına yol açar. Smart Tech Devs olarak, bunu tamamen önlemek için Trunk-Based Development uyguluyoruz.
Trunk-based development, geliştiricilerin kodlarını her gün ana dala birleştirmesi anlamına gelir, hatta özellik tamamlanmamış olsa bile. Kullanıcılar için uygulamayı bozmeden yarım kalmış kodu prodüksiyona nasıl dağıtıyoruz? Feature Flags kullanıyoruz.
Laravel Pennant’a Giriş
Feature flags, temelde veritabanınızda veya Redis önbelleğinizde saklanan dinamik boolean anahtarlardır. Yeni kodunuzu sarar, bunu normal kullanıcılardan gizlerken yalnızca belirli iç geliştiricilere veya beta test kullanıcılarına açar. Laravel, bu konuda harika bir birinci taraf paketi sunar: Laravel Pennant.
Adım 1: Özelliği Tanımlama
Öncelikle, bir Servis Sağlayıcı içinde feature flag’imizi tanımlıyoruz. Diyelim ki yeni, ağır bir AI Analitik Dashboard’u geliştiriyoruz.
namespace App\Providers;
use App\Models\User;
use Illuminate\Support\ServiceProvider;
use Laravel\Pennant\Feature;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
// Bayrağı tanımlayın: Sadece 'admin' rolüne sahip kullanıcıların
// veya belirli ön erişim beta kiracıların yeni AI dashboard'unu görmesine izin verin.
Feature::define('ai-analytics-v2', function (User $user) {
return $user->role === 'admin' || $user->tenant->in_beta_program;
});
}
}
Adım 2: UI ve Mantığı Kontrol Etme
Artık yarım kalmış AI Dashboard kodumuzu güvenle prodüksiyona dağıtabiliriz. UI bağlantısını Blade şablonlarımızda (veya API yanıtlarında) sarmalıyoruz, böylece kullanıcıların %99’u bunu asla görmez.
// Bir Laravel Kontrolcüsü içinde
public function index(Request $request)
{
// Kod yalnızca bu özel kullanıcı için bayrak aktifse çalışır
if (Feature::active('ai-analytics-v2')) {
return view('dashboard.ai-v2');
}
// Mevcut sağlıklı üretim dashboard'una geri dön
return view('dashboard.v1');
}
Mühendislik ROI’si
Feature flags kullanımı dağıtım ile yayınlama işlemlerini tamamen birbirinden ayırır. Günde 10 kez kod dağıtabilirsiniz, ancak yalnızca bir özellik kamuya açılmadan. Yeni bir özellik kritik bir hataya yol açarsa, stresli bir Git iptali yapmaya veya yeniden dağıtmaya gerek yoktur; veritabanı anahtarını false olarak değiştirerek, özellik bir milisaniye içinde kaybolur. Bu, ölçeklenebilir SaaS ekipleri için nihai güvenlik ağıdır.
Kaynak: Orijinal Makale


