Checkout ve Running Release: Aynı Sistem Değil
Ilya Mozerov'un yazısında ortaya konulan fikir basit ama önemli: bir yazılım projesinde iki farklı "sistem" vardır ve bunlar aynı şey değildir.
Birincisi checkout, kaynak kodunun, dokümantasyonun ve testlerin bulunduğu depo. İkincisi running release, servislerin gerçekten çalıştırdığı, sabitlenmiş bytlar. İkisi ilişkili olsa da, birinde yapılan bir değişiklik diğerinde hemen görünmez. Checkout'ta yeni bir commit atabilirsin, ama o kodun production'a geçmesi başka bir süreçtir.
Deleuze ve Guattari'nin "A Thousand Plateaus"'dan alınan abstract machine kavramı burada işe yarar. Abstract machine "ne madde ne de biçim, ne içerik ne de ifade" taşır; somut şeylerin içinde işlev görür. Yazılım bağlamında, checkout soyut bir plan, running release ise o planın somut hali. Aralarındaki fark, bir mimarlık çizimi ile inşa edilen bina arasındaki fark gibi.
Praktik olarak bu, deployment pipeline'ın neden önemli olduğunu gösterir. Checkout'ta test geçebilir, ama production'da farklı konfigürasyon, farklı veri, farklı yük olabilir. İkisini aynı şey olarak görmek hatalara yol açar. Versioning, staging ortamları, canary deployments, bunların hepsi bu farkı yönetmek için vardır.
Projeye yeni katılan birinin ilk öğrenmesi gereken şey budur: kaynak kod ile canlı sistem aynı değildir. Hangisinde çalışıyorsun, hangisinde test ediyorsun, hangisine deploy ediyorsun, bu sorular net olmalı.
0 yorum