Modern DevOps ortamında, sürekli entegrasyon (CI) ve sürekli teslimat (CD) ayrımı artık sadece bir en iyi uygulama değil; ölçeklenebilir uygulamalar için bir zorunluluktur. GitHub Actions, otomatik test ve oluşturma süreçlerini devrim niteliğinde değiştirmiş olsa da, karmaşık çok aşamalı ortamlara gerçek dağıtım genellikle bir GitOps yaklaşımı gerektirir. GitHub Actions'ı ArgoCD ile entegre ederek, kuruluşlar kod değişikliklerinin bir sistemde testleri tetiklemesini ve başka bir sistemde küme durumunu yönetmesini sağlayan güçlü bir sinerji elde edebilirler.
Bu yaklaşım, CI pipeline'ının kalite güvencesi ve artifact oluşturma üzerine odaklanmasını sağlarken, ArgoCD tarafından yönlendirilen CD pipeline'ı, Kubernetes kümelere tutarlı ve beyan tabanlı dağıtımların gerçekleştirilmesini garanti eder. Bu kusursuz akışı nasıl mimarileştireceğimize şimdi göz atalım.
Pipeline Akışını Mimarileştirmek
Bu entegrasyonun temel felsefesi, oluşturma sürecini dağıtım sürecinden ayırmaktır. GitHub Actions, Docker görüntülerini oluşturmak, birim ve entegrasyon testlerini çalıştırmak ve bu artifactleri bir konteyner kayıt defterine itmekten sorumlu olacaktır. Ardından, Kubernetes manifestlerini içeren bir Git deposunu yeni bir görüntü etiketiyle güncelleyecektir.
Hedef Kubernetes kümesi içinde çalışan ArgoCD, bu belirli depoyu izler. Manifest tanımlarında bir değişiklik algıladığında, küme durumunu otomatik olarak Git'te tanımlanan istenen durumla eşleştirmek için senkronize eder. Bu, güvenilir, denetlenebilir ve otomatik bir dağıtım döngüsü yaratır.
GitHub Actions İş Akışının Yapılandırılması
GitHub Actions iş akışı dosyası, oluşturma ve yayınlama süreçleriniz için orkestratör görevi görür. Kod denetimi, test, oluşturma ve dağıtım manifestini güncelleme aşamalarını tanımlamamız gerekir. Kritik adım, yeni görüntü etiketini yansıtacak şekilde Kubernetes manifestini veya bir Helm şablonunu değiştirmek ve bu değişikliği depoya geri commit etmektir.
İşte bir görüntü itme ve manifest güncelleme işlevini gösteren örnek bir iş akışı yapılandırması:
name: CI/CD Pipeline
on:
push:
branches: [ main ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Kodu kontrol et
uses: actions/checkout@v3
- name: Docker Buildx'i hazırla
uses: docker/setup-buildx-action@v2
- name: Konteyner Kayıt Defterine Giriş Yap
uses: docker/login-action@v2
with:
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_PASS }}
- name: Görüntüyü Oluştur ve İt
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ secrets.REGISTRY }}/my-app:${{ github.sha }}
- name: Kubernetes Manifestini Güncelle
run: |
sed -i "s|my-app:.*|my-app:${{ github.sha }}|g" k8s/deployment.yaml
git config --local user.email "actions@github.com"
git config --local user.name "GitHub Actions"
git add k8s/deployment.yaml
git commit -m "Görüntüyü ${{ github.sha }} olarak güncelle"
git push
GitOps için ArgoCD Kurulumu
GitHub Action güncellenmiş manifesti ittikten sonra, ArgoCD devreye girer. Hedef kümenizdeki ArgoCD'yi ilk olarak kurmanız ve ardından manifestlerinizi içeren yolu ve deponun URL'sini işaret eden bir Application kaynağı oluşturmanız gerekir. Bu, ArgoCD'ye tam olarak neyi izlemesi gerektiğini söyler.
Commit itildiğinde, ArgoCD'nin sağlık kontrol mekanizması, canlı durum ile Git durumu arasındaki sapmayı algılar. Varsayılan olarak ArgoCD otomatik senkronizasyon modunda çalışır, ancak kritik üretim aşamaları için nihai bir insan doğrulama adımı sağlamak adına manuel senkronizasyon kullanılması genellikle önerilir.
Çok Aşamalı Dağıtımların Yönetimi
Bu mimarinin önemli avantajlarından biri, karmaşık dallanma stratejileri olmadan birden fazla ortamı (Geliştirme, Staging, Üretim) yönetmektir. Artifacti bir kez oluşturan tek bir GitHub iş akışını koruyabilirsiniz. Ancak, Git deponuzu her ortam için ayrı klasörlere sahip olacak şekilde yapılandırabilir veya Kustomize katmanlarını kullanabilirsiniz.
Bir Kustomize kurulumunda, GitHub Action temel görüntü referansını güncelleyebilirken, ArgoCD Uygulamaları farklı klasörlere (örneğin `k8s/dev`, `k8s/prod`) işaret edebilir. Bu, staging ortamının test için en son artifacti hemen almasını sağlarken, üretim dağıtımları, üretim manifest klasörünü özel olarak güncelleyen ayrı bir GitHub iş akışı ile tetiklenebilir.
Sonuç
GitHub Actions'ı ArgoCD ile birleştirmek, Kubernetes dağıtımlarını yönetmek için sağlam, ölçeklenebilir ve güvenli bir yöntem sunar. CI'nin ağır yükünü GitHub Actions'a ve CD'nin beyan tabanlı yönetimini ArgoCD'ye bırakarak, geliştiriciler altyapı durumunu yönetmek yerine kod yazmaya odaklanabilir. Bu sorumluluk ayrımı, Git'in denetlenebilirliği ile birleştiğinde, karmaşık çok aşamalı yayınlama stratejilerini yönetebilecek üretim seviyesinde bir pipeline oluşturur. Bu deseni uygularken, güvenlik her şeyden önemlidir; gizli anahtarlarınızın şifrelendiğinden ve deponun izinlerinin sıkı bir şekilde kontrol edildiğinden emin olun.