Merhaba! Önceki derslerimizde, baştan sona bir CI/CD boru hattının tüm bileşenlerini titizlikle inşa ettik. Test, lint, Docker imajı oluşturma ve bunu bir kayıt defterine gönderme işlemlerini otomatikleştiren bir CI iş akışı kurduk. Ardından, Rancher Fleet kullanarak Kubernetes'e dağıtım yapacak CD mekanizmasını hazırladık. Son olarak, CI ve CD arasındaki en kritik köprüyü kurduk: CI iş akışımızın, oluşturduğu yeni imaj etiketini GitOps depomuzdaki manifestoya otomatik olarak yazmasını sağladık.
Artık tüm parçalar yerli yerinde. Bu derste, bu özenle kurduğumuz sistemin meyvelerini toplayacağız.
Bugünkü öğrenme hedefimiz: Bir geliştirme ortamı için CI/CD boru hattının tamamını, kodun gönderilmesinden (code push) Fleet ile otomatik dağıtıma kadar çalıştırmak ve izlemek.
Bu dersin sonunda, tek bir git push komutuyla tüm otomasyon zincirini nasıl tetikleyeceğinizi, sürecin her aşamasını nasıl izleyeceğinizi ve bir kod değişikliğinin canlı bir Kubernetes kümesinde çalışan bir işe nasıl dönüştüğünü ilk elden deneyimlemiş olacaksınız.
Uçtan Uca Akış: Teoriden Pratiğe
Şimdiye kadar adım adım inşa ettiğimiz akışı bir bütün olarak tekrar gözden geçirelim. Her şey, uygulama kodunuzda yapacağınız bir değişiklikle başlayacak.

Bugünkü görevimiz bu akışı canlı olarak tetiklemek, izlemek ve doğrulamaktır.
Adım 1: Boru Hattını Ateşlemek
Her şey küçük bir değişiklikle başlar. PySpark ETL uygulamanızın kod tabanında basit ama gözlemlenebilir bir değişiklik yapın. Örneğin, bir print() ifadesi veya bir log mesajı ekleyebilir ya da değiştirebilirsiniz.
Örnek Değişiklik:
# pyspark_etl/main.py dosyanızda
def main():
# ...
# Mevcut bir log satırını bulun veya yeni bir tane ekleyin
print("ETL Job v1.1 starting...")
# ...
Bu değişikliği yaptıktan sonra, uygulama deponuzun ana geliştirme dalına (main veya dev) commit'leyin ve push'layın.
git add .
git commit -m "feat: Add version identifier to start log"
git push origin main
Bu git push komutu, az önce tüm otomasyon zincirini başlattı. Şimdi süreci izleyelim.
Adım 2: CI ve CD Aşamalarını İzlemek
Sürecin nasıl işlediğini görmek, onu anlamanın en iyi yoludur. GitHub Actions'ın CI görevlerini yerine getirmesini ve ardından Rancher Fleet'in CD görevini devralmasını izleyeceğiz.
Aşağıdaki video, bizim kurduğumuz akışa çok benzer bir senaryoyu canlı olarak gösteriyor. Bir kod değişikliği yapılıyor, GitHub Actions çalışıyor, Helm deposu güncelleniyor (bizim kustomization.yaml dosyamız gibi) ve son olarak Rancher, değişikliği algılayıp yeni sürümü dağıtıyor.
Using Rancher Fleet and GitHub Actions for GitOps Releases
Bu videonun ilgili bölümü, bir kod değişikliği yapıldıktan sonra GitHub Actions ve Rancher Fleet arasındaki etkileşimi mükemmel bir şekilde göstermektedir. Kendi boru hattınızda ne beklemeniz gerektiğini anlamak için bu bölümü dikkatlice izleyin.
Videonun 07:45 - 10:39 arasındaki bölümünü izleyin. Sunucunun kodu nasıl değiştirdiğini, GitHub Actions'ın nasıl tetiklendiğini, Git deposundaki YAML dosyasının nasıl güncellendiğini ve son olarak Rancher UI'da dağıtımın nasıl 'in progress' (sürüyor) durumuna geçtiğini ve tamamlandığını gözlemleyin.
Videonun gösterdiği gibi, süreci izlemek iki ana platformda gerçekleşir:
1. GitHub Actions'ı İzleme
- Uygulama deponuzun GitHub sayfasında Actions sekmesine gidin.
- Az önce yaptığınız commit ile başlayan yeni iş akışı çalışmasını (
workflow run) göreceksiniz. Üzerine tıklayın. - İş akışındaki adımların (jobs) birer birer tamamlandığını izleyin:
- Test ve Lint:
pytestveruffadımlarının başarıyla tamamlandığından emin olun. - Build and Push Docker Image: Konteyner imajının oluşturulup kayıt defterine gönderildiğini doğrulayın.
- Update Manifest:
kustomize edit set imagekomutunun çalıştırıldığı veEndBug/add-and-commiteyleminin GitOps deponuza yeni bir commit gönderdiği adımı bulun.
- Test ve Lint:
- Bu adım tamamlandıktan sonra, GitOps deponuza gidin. CI botu tarafından oluşturulmuş yeni bir commit görmelisiniz. Bu commit'in
overlays/dev/kustomization.yamldosyasındakinewTagdeğerini yeni commit SHA'nız ile güncellediğini doğrulayın.
2. Rancher Fleet'i İzleme
GitHub Actions görevini tamamladığında, top artık Rancher Fleet'tedir.
- Rancher UI'nıza giriş yapın.
- Sol menüden Continuous Delivery'ye gidin.
- GitOps deponuzu temsil eden
GitRepokaynağını bulun.- Fleet, varsayılan olarak her 15 saniyede bir Git deposunu kontrol eder. Kısa bir süre içinde,
GitRepo'nun durumunun güncellendiğini ve COMMIT alanının CI botunun gönderdiği yeni commit SHA'sını yansıttığını göreceksiniz. GitRepokaynağına tıklayarak, ilgiliBundle'ın durumunu görebilirsiniz. Değişiklik uygulanırken durumuModifyinggibi geçici bir duruma, ardından tekrarActivedurumuna dönecektir.
- Fleet, varsayılan olarak her 15 saniyede bir Git deposunu kontrol eder. Kısa bir süre içinde,
Adım 3: Dağıtımı Doğrulamak ve Sorun Gidermek
Fleet, dağıtımın başarılı olduğunu bildirdiğinde, son adım yeni PySpark işinin kümede gerçekten çalışıp çalışmadığını doğrulamaktır.
- Rancher UI'da, kümenizin ana kontrol panelinde Workload > Jobs bölümüne gidin.
- Fleet tarafından yeni oluşturulmuş bir
Jobkaynağı görmelisiniz. Bu işin adı, temel manifestonuzdaki addan türetilmiş olacaktır. - Yeni oluşturulan işe tıklayın ve YAML'sini inceleyin.
spec.template.spec.containers[0].imagealanının, CI tarafından oluşturulan yeni imaj etiketini içerdiğinden emin olun. - İş tarafından oluşturulan Pod'u bulun. Bu Pod'un loglarını (
Logs) kontrol edin. Kodda yaptığınız değişikliği (örneğin, "ETL Job v1.1 starting..." log mesajı) loglarda görmelisiniz. Bu, uçtan uca boru hattının başarıyla çalıştığının nihai kanıtıdır.
İzleme ve Sorun Giderme için İleri Düzey Araçlar
Boru hattı karmaşıklaştıkça, olası sorunları teşhis etmek için doğru komutları bilmek önemlidir. Aşağıdaki kaynak, Fleet dağıtımlarını kubectl kullanarak nasıl izleyeceğinizi ve yaygın sorunları nasıl gidereceğinizi açıklayan harika komutlar ve ipuçları içerir.
How to Use Rancher Continuous Delivery
Bu makale, Rancher Fleet'in nasıl çalıştığına dair derinlemesine bilgi sunmaktadır. Özellikle, dağıtımları komut satırından izlemek ve olası sorunları teşhis etmek için gereken pratik bilgileri içerir.
Makaledeki "Monitoring Fleet Deployments" ve "Troubleshooting Common Issues" başlıklarını okuyun. Özellikle kubectl get gitrepos, kubectl logs -n cattle-fleet-system ..., ve kubectl describe bundledeployment ... gibi komutlara dikkat edin. Bu komutlar, bir şeyler ters gittiğinde sorunun kaynağını (CI mı, Fleet mi, yoksa kümedeki bir yapılandırma mı) bulmanız için size yol gösterecektir.
Sonuç
Tebrikler! Az önce bir veri mühendisinin en güçlü otomasyon araçlarından birini baştan sona çalıştırdınız. Tek bir git push ile kodunuzu test ettiniz, paketlediniz ve güvenli bir şekilde geliştirme ortamınıza dağıttınız.
Temel Çıkarımlar:
- CI/CD boru hattı, uygulama geliştirme yaşam döngüsündeki adımları (test, build, deploy) otomatikleştiren bir olaylar zinciridir.
- GitHub Actions, CI (Sürekli Entegrasyon) görevlerini yönetmek için güçlü bir platformdur.
- Rancher Fleet, GitOps prensiplerini uygulayarak CD (Sürekli Dağıtım) görevini üstlenir ve Git deposunu kümenin durumuyla senkronize eder.
- Tüm süreci izlemek, her bileşenin beklendiği gibi çalıştığını doğrulamak ve sorunları hızlıca teşhis etmek için kritik öneme sahiptir.
Gelecek Dersin Önizlemesi:
Geliştirme ortamına otomatik dağıtım harika bir başlangıç, ancak gerçek dünya uygulamalarının bir de üretim (production) ortamı vardır. Bir sonraki ve son proje dersimizde, belirli bir uygulama sürümünü geliştirme ortamından üretim ortamına "terfi ettirmek" (promote) için bir Git tabanlı strateji tasarlayıp uygulayacağız. Bu, manuel bir onay adımı ekleyerek üretim dağıtımları üzerinde tam kontrol sahibi olmamızı sağlayacaktır.