DevOps and Infrastructure

Dayanıklı GitHub Actions Boru Hatları

Modern yazılım geliştirme yaşam döngüsünde, Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD) boru hatları teslimat hızının omurgasıdır. Ancak mimariler daha da karmaşıklaştıkça, bunları oluşturmak ve yayınlamak için gereken boru hatları da karmaşıklaşır. Bozuk bir boru hattı sadece bir rahatsızlık değil; üretkenliği engelleyen ve otomasyona olan güveni zayıflatan bir engeldir. Orta ve ileri düzey geliştiriciler için basit YAML iş akışlarının ötesine geçmek esastır. Bu kılavuz, gelişmiş hata yönetimi, kendi kendine barındırılan çalışanların güvenlik etkileri ve sağlam güvenlik taramasının entegrasyonu üzerine odaklanarak GitHub Actions kullanarak gerçekten dayanıklı boru hatları nasıl oluşturulacağını keşfeder.

Gelişmiş Hata Yönetimi ve Yeniden Deneme Mantığı

Temel CI/CD kurulumları genellikle tek bir başarısız işi toplam bir başarısızlık olarak değerlendirir. Üretim seviyesindeki ortamlarda, geçici hatalar—ağ zaman aşımı, paket kayıt defterlerinden gelen hız sınırlama veya geçici bulut sağlayıcı sorunları gibi—kaçınılmazdır. Buna karşı koymak için sağlam yeniden deneme mekanizmaları ve granüler hata yönetimi uygulamalısınız.

GitHub Actions, `continue-on-error` bağlamını ve özel betikleri kullanarak yeniden deneme mantığı tanımlamanıza olanak tanır; ancak daha zarif bir yaklaşım, dayanıklılık için tasarlanmış pazar eylemlerini kullanmak veya belirli iş düzeyinde stratejiler tanımlamaktır. Aşağıdaki örnekte, kararsız bir dağıtım adımını bir yeniden deneme döngüsüne sarmalıyoruz:

name: Yeniden Deneme ile Dağıtım
on: [push]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Kontrol Et
        uses: actions/checkout@v4

      - name: Yeniden Deneme ile Dağıtım
        run: |
          max_retries=3
          count=1
          while [ $count -le $max_retries ]; do
            if curl -f https://api.example.com/health; then
              echo "Başarılı!"
              exit 0
            fi
            count=$((count + 1))
            echo "Deneme $count başarısız. Yeniden deneniyor..."
            sleep 5
          done
          echo "Dağıtım $max_retries denemeden sonra başarısız oldu."
          exit 1

Betikler işe yasa da, daha karmaşık koşullu mantık için `actions/github-script` leveraj etmek veya `retry-action` gibi özel araçları kullanmak kod karmaşasını azaltabilir. Ayrıca, boru hattınızın kritik hatalarda hızlı başarısız olmasını ancak geçici hatalardan zarif bir şekilde kurtulmasını sağladığınızdan emin olun.

Kendi Kendine Barındırılan Çalışanlarla Derleme Ortamını Güvenlik altına Alma

GitHub tarafından barındırılan çalışanlar kolaylık ve izolasyon sunsa da, özel yazılım kurulumu, ağ çıkış kuralları ve donanım gereksinimleri konusunda sınırlamalara sahiptir. Kendi kendine barındırılan çalışanlar, büyük Docker görüntüleri oluşturma veya özel kaynaklar gerektiren performans testleri çalıştırma gibi özel iş yükleri için gereken esnekliği sağlar.

Bununla birlikte, kendi kendine barındırılan çalışanlar önemli güvenlik sorumlulukları getirir. Bu çalışanlar işler arasında durumu koruduğu için, ele geçirilen bir çalışan gizli bilgileri sızdırabilir veya saldırılar için bir dönüm noktası olarak kullanılabilir. Bunu azaltmak için, kaydeden, tek bir işi yürüten ve ardından kaydını silen geçici çalışanlar kullanmalısınız. Bu, `tintoy/github-actions-runner` gibi araçlar kullanılarak veya iş bittikten sonra çalışanı kayıttan çıkarmak için GitHub Actions API'sini çağıran özel yaşam döngüsü betikleri uygulanarak gerçekleştirilebilir. Ayrıca, çalışan belirteçlerini her zaman gizli yönetim sistemlerinde saklayın ve çalışan erişimini VPC eşleştirme veya özel alt ağlar aracılığıyla özel ağlarla sınırlayın.

Otomatik Güvenlik Taramasının Entegrasyonu

Güvenlik bir sonradan düşünce olmamalıdır. Statik analiz ve güvenlik açıkları taramasını CI/CD boru hattınıza doğrudan entegre etmek, dağıtımdan önce kod kalitesi ve güvenlik standartlarının uygulandığını sağlar. GitHub Advanced Security, kod tabanınızda güvenlik açıklarını tanımlamak için statik analiz gerçekleştiren CodeQL için yerleşik destek sağlar.

CodeQL'nin ötesinde, bağımlılıklarınızdaki bilinen güvenlik açıklarını taramak için Snyk, Trivy veya OWASP Dependency-Check gibi araçları entegre etmelisiniz. Aşağıda, her çekme isteğinde güvenlik taramalarını tetikleyen bir iş akışını nasıl yapılandırabileceğinize dair bir örnek bulunmaktadır:

name: Güvenlik Taraması
on: [pull_request]

jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - name: Kodu Kontrol Et
        uses: actions/checkout@v4

      - name: Trivy güvenlik açığı tarayıcısını çalıştır
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          severity: 'CRITICAL,HIGH'
          exit-code: '1'

Bu yapılandırma, kritik veya yüksek şiddette bir güvenlik açığı bulunduğunda boru hattının başarısız olmasını sağlayarak riskli kodun birleştirilmesini engeller. Bu güvenlik katmanlarını birleştirmek, derinlemesine savunma stratejisi oluşturur.

Sonuç

GitHub Actions ile dayanıklı CI/CD boru hatları oluşturmak, basit otomasyndan sofistike mühendisliğe bir zihin değişikliği gerektirir. Gelişmiş hata yönetimi uygulamak, geçici kendi kendine barındırılan çalışanlarla derleme ortamınızı güvence altına almak ve kapsamlı güvenlik taraması entegre etmek, yalnızca verimli değil aynı zamanda güvenilir bir boru hattı oluşturur. Bu uygulamalar, kesinti süresini azaltır, güvenlik durumunu artırır ve nihayetinde geliştirme ekiplerinin yazılımı güvenle yayınlamasına olanak tanır.

Share: