CI/CD Nedir? Sürekli Entegrasyon ve Teslimat Basitçe Açıklandı
CI/CD, her kod değişikliğinin otomatik olarak derlendiği, test edildiği ve — geçerse — yayına hazırlandığı ya da yayınlandığı bir yazılım yayınlama yöntemidir. CI (sürekli entegrasyon), değişikliklerin sık sık birleştirilmesi ve her seferinde otomatik testlerle kontrol edilmesi anlamına gelir. CD (sürekli teslimat ya da dağıtım) ise geçen değişikliklerin, manuel iş çok az olacak şekilde paketlenip kullanıcılara doğru yönlendirilmesi demektir.
Asıl amaç basittir: hataları haftalar sonra bir müşteri bulmadan, yapıldıkları dakikalar içinde yakalamak.
AI ile geliştirirken CI/CD neden önemli?
AI oluşturucular kod değişikliklerini çok hızlı yapar. Tek bir istem on dosyaya dokunabilir. Bu hız harika bir şeydir; ta ki ödeme sayfasındaki bir değişiklik sessizce giriş sayfasını bozana ve bir kullanıcı size e-posta yazana kadar.
CI/CD tam olarak bu durum için bir güvenlik ağıdır. Her değişikliğin iyi olduğuna güvenmek yerine, bir pipeline her seferinde aynı kontrolleri çalıştırır:
- Uygulama hatasız derlenmeye devam ediyor mu?
- Otomatik testler hâlâ geçiyor mu?
- Kod projenin kurallarına uyuyor mu (tipler, biçimlendirme, güvenlik kontrolleri)?
Herhangi bir kontrol başarısız olursa değişiklik kullanıcılara ulaşmadan durdurulur. Kod değişiklikleriniz ne kadar hızlıysa, asla yorulmayan ve hiçbir adımı atlamayan bir kontrol o kadar değerlidir.
Günlük hayattan bir benzetme
Her sabah ekmeği marketlere satan bir fırını düşünün.
- CI/CD olmadan, her fırıncı bir hafta boyunca kendi tarifinde küçük değişiklikler yapar, sonra cuma gecesi herkes bunları birleştirir ve ekmeğin hâlâ kabarıp kabarmayacağını umar. Kabarmadığında kimin değişikliğinin sorunlara yol açtığını kimse bilmez.
- CI ile, her küçük tarif değişikliği hemen bir deneme ekmeğine uygulanır ve kontrol edilir — tat, ağırlık, şekil. Hatalı bir değişiklik aynı gün yakalanır ve tam olarak hangisi olduğunu bilirsiniz.
- CD ile, kontrolden geçen ekmekler doğrudan dağıtım aracına gider; her seferinde aynı şekilde paketlenip etiketlenirler. Sabah 5'te birinin kutuları elle doldurmasına gerek kalmaz.
Kontrol fırıncıları daha iyi yapmaz. Hatalarını ucuz hale getirir.
Bir CI/CD pipeline'ı nasıl çalışır?
Bir pipeline, bir şey olduğunda — genellikle biri kodu GitHub gibi bir depoya gönderdiğinde — bir CI/CD hizmetinin otomatik olarak çalıştırdığı adımlar listesidir. Tipik bir pipeline şöyle görünür:
| Adım | Ne olur | Neyi yakalar |
|---|---|---|
| 1. Tetikleme | Kod gönderilir ya da bir pull request açılır | — |
| 2. Kurulum | Yeni bir makine kodu ve bağımlılıklarını indirir | Eksik ya da bozuk paketler |
| 3. Derleme | Uygulama derlenir ya da paketlenir | Sözdizimi ve tip hataları, bozuk içe aktarmalar |
| 4. Test | Otomatik testler çalışır | Artık çalışmayan özellikler |
| 5. Kontroller | Linting, biçimlendirme, güvenlik taramaları | Stil sorunları, bilinen güvensiz paketler, sızdırılmış anahtarlar |
| 6. Hazırlık ortamına dağıtım | Uygulama üretimin test kopyasına gider | Yalnızca gerçek bir ortamda ortaya çıkan sorunlar |
| 7. Üretime dağıtım | Uygulama canlıya çıkar — otomatik olarak ya da onaydan sonra | — |
Her adım, birinin dizüstü bilgisayarında değil, temiz bir makinede çalışır; böylece "benim bilgisayarımda çalışıyordu" bahanesi ortadan kalkar. Bir adım başarısız olursa pipeline durur ve değişikliği yapan kişiye bildirir.
Adımlar, kodla birlikte duran bir yapılandırma dosyasında tanımlanır. Örneğin GitHub Actions'ta bu, deponun .github/workflows klasöründeki bir YAML dosyasıdır.
Sürekli teslimat ile sürekli dağıtım
"CD" kısaltması belirsizdir ve insanlar onu iki şekilde de kullanır:
| Sürekli teslimat | Sürekli dağıtım | |
|---|---|---|
| Testler otomatik çalışır | Evet | Evet |
| Yayın otomatik paketlenir | Evet | Evet |
| Otomatik olarak canlıya çıkar | Hayır — bir kişi "yayınla" tıklar | Evet — geçen her değişiklik yayınlanır |
| Uygun olduğu durum | Çoğu küçük ekip, ödeyen kullanıcıları olan uygulamalar | Güçlü test kapsamı ve izlemesi olan ekipler |
Sürekli dağıtım yalnızca testler iyiyse iyi çalışır. Testleriniz ödeme sürecini kapsamıyorsa, sürekli dağıtım bozuk bir ödeme sürecini de keyifle yayına alır.
Çalışan bir örnek: pipeline'lı bir rezervasyon uygulaması
Diyelim ki bir kuaför rezervasyon uygulamanız var ve kodu bir GitHub deposunda. Bir AI oluşturucuya "ilk kez gelen müşterilere %10 indirim ekle" diyorsunuz.
- Değişiklik yeni bir dala gönderilir ve bir pull request açılır.
- Pipeline başlar. Paketleri kurar ve uygulamayı derler — bu geçer.
- Testleri çalıştırır. "geri dönen bir müşteri tam fiyat öder" testi başarısız olur: indirim herkese uygulanıyor.
- Pull request'te kırmızı bir çarpı görünür. Değişiklik birleştirilemez.
- AI'dan düzeltmesini istersiniz. Düzeltmeyi gönderir; pipeline yeniden çalışır ve her şey geçer.
- Değişiklik birleştirilir. Pipeline bunu bir hazırlık ortamına dağıtır; orada bir deneme rezervasyonu yaparsınız.
- Onaylarsınız ve üretime dağıtılır.
Pipeline olmasaydı, 3. adımdaki sorun müşterilerinizin cüzdanında ortaya çıkardı.
Temel terimler
| Terim | Anlamı |
|---|---|
| Pipeline | Her değişiklikte çalışan otomatik adım dizisi. |
| Derleme (build) | Kaynak kodu çalışabilir bir şeye dönüştürmek. |
| Otomatik test | Başka bir kodun beklendiği gibi çalıştığını kontrol eden kod. |
| Pull request (PR) | Birleştirilmeden önce başkalarının (ve pipeline'ın) inceleyeceği önerilen bir değişiklik. Bkz. GitHub nedir. |
| Dal (branch) | Devam eden işin ana koda etki etmemesi için ayrı bir değişiklik hattı. |
| Hazırlık (staging) | Kullanıcılar görmeden değişiklikleri kontrol etmek için üretimi taklit eden özel bir kopya. |
| Üretim (production) | Kullanıcılarınızın kullandığı canlı uygulama. |
| Geri alma (rollback) | Bir yayın ters gittiğinde önceki çalışan sürüme dönmek. |
| Yeşil / kırmızı derleme | Bir pipeline çalışmasının geçtiği / başarısız olduğu durum. |
Yaygın yanlış anlamalar
- "CI/CD uygulamamın test edildiği anlamına gelir." Bir pipeline yalnızca sahip olduğunuz testleri çalıştırır. Hiç test yoksa CI yalnızca uygulamanın derlendiğini kanıtlar — daha fazlasını değil. AI'dan en önemli akışlar için testler yazmasını isteyin.
- "CI/CD yalnızca büyük şirketler içindir." GitHub Actions gibi barındırılan araçların kurulumu kısa bir yapılandırma dosyası gerektirir ve küçük ekipler bunları sık kullanır. Çaba gerektiren şey araç değil, testlerdir.
- "Otomatik dağıtım, kimsenin hiçbir şeyi kontrol etmediği anlamına gelir." İyi pipeline'lar kontrol ekler, kaldırmaz. Birçok ekip üretimden önce bir insan onay adımını korur.
- "Pipeline yeşilse uygulama çalışıyordur." Bu, otomatik kontrollerin geçtiği anlamına gelir. Yine de değişikliği kendiniz deneyin, ideal olarak bir önizlemede ya da hazırlık ortamında.
- "CI/CD yedeklerin yerini alır." Almaz. Testleri geçen kötü bir veritabanı migrasyonu gerçek verilere yine zarar verebilir. Yedekleri ve geri alma yolunu saklayın.
AI oluşturucunuza ne sormalısınız?
- "Kayıt olma, giriş yapma ve ödeme süreçleri için otomatik testler yaz ve bunların nasıl çalıştırılacağını göster."
- "Her pull request'te bağımlılıkları kuran, uygulamayı derleyen ve testleri çalıştıran bir GitHub Actions iş akışı kur."
- "Pipeline'a bir tip kontrolü ve bir linter ekle; hatalarda başarısız olsun."
- "Pipeline'ın her adımının ne yaptığını sade bir dille açıkla."
- "Bir dağıtım yarıda kalırsa ne olur? Nasıl geri alırım?"
- "Hiçbir gizli anahtarın depoya gömülmediğinden ya da pipeline günlüklerinde yazdırılmadığından emin ol."
Uygulamanız API anahtarları kullanıyorsa, pipeline'ın da onlara ihtiyacı vardır — CI aracında şifreli sırlar olarak saklanmalı, yapılandırma dosyasında asla yer almamalıdır. Bkz. ortam değişkenleri ve sırlar.
Mythex'te CI/CD
Mythex sizin için bir CI pipeline'ı çalıştırmaz, ama aynı ihtiyaçların birçoğunu kendi yöntemiyle karşılar:
- Kontrol noktaları (checkpoints). Her başarılı agent turundan sonra Mythex bir git kontrol noktası kaydeder ve bir değişiklik ters giderse Bu noktaya geri dön ile projeyi geri alabilirsiniz. Bkz. Sohbet.
- Uygulama testi (App Testing).
/testyazın; agent canlı önizlemenizde bir kullanıcı gibi gezinir ve bozuk akışları bildirir — her yayından önce yararlıdır. Bkz. App Testing. - Yayınlamak bilinçli bir adımdır. Değişiklikler önce özel önizlemede görünür; herkese açık uygulamanız yalnızca tekrar yayınladığınızda güncellenir — sürekli dağıtımdan çok sürekli teslimata yakındır.
- GitHub senkronizasyonu (Pro). Projeyi bir GitHub deposuna senkronize ederseniz, her gönderimde testleri çalıştırmak için kendi GitHub Actions iş akışlarınızı ekleyebilirsiniz. Bkz. GitHub ve dışa aktarma.
Canlıya çıkmadan elle test edilecekler için kontrol listesi için uygulamanızı canlıya almadan önce nasıl test edersiniz yazısına, sürüm kontrolüyle çalışmak için ise AI ile geliştirilen uygulamada Git nasıl kullanılır yazısına bakın.
Sorular
CI/CD neyin kısaltmasıdır?
CI, sürekli entegrasyon anlamına gelir: her kod değişikliği sık sık birleştirilir ve otomatik olarak derlenip test edilir. CD ise sürekli teslimat ya da sürekli dağıtım anlamına gelir: testleri geçen değişiklikler yayına hazırlanır (teslimat) ya da manuel bir adım olmadan kullanıcılara yayınlanır (dağıtım).
Sürekli teslimat ile sürekli dağıtım arasındaki fark nedir?
Sürekli teslimatta pipeline'dan geçen her değişiklik yayına hazırdır, ama ne zaman canlıya alınacağına hâlâ bir kişi karar verir. Sürekli dağıtımda ise geçen her değişiklik, insan onayı adımı olmadan otomatik olarak canlıya çıkar.
AI ile yapılmış küçük bir uygulama için CI/CD'ye ihtiyacım var mı?
İlk günden değil. Birkaç kullanıcısı olan küçük bir uygulama, bir önizlemede test edip elle yayınlayarak idare edebilir. CI/CD, kodu birden fazla kişi değiştirdiğinde, uygulamaya gerçek müşteriler bağımlı olduğunda ya da eskiden çalışan şeyleri sürekli bozduğunuzda değerini kanıtlar.
CI/CD için hangi araçlar kullanılır?
Yaygın olanlar arasında GitHub Actions, GitLab CI/CD, CircleCI ve Jenkins ile barındırma platformlarının yerleşik dağıtım pipeline'ları bulunur. Hepsi aynı temel işi yapar: kod değiştiğinde bir adım listesini otomatik olarak çalıştırmak.