Docs

Dokümantasyon / Özellikler

Preview'lar

GitHub, GitLab ve Azure DevOps'taki her pull request için Kubernetes'te izole bir namespace ve public bir URL ile preview açın; PR kapanınca otomatik kaldırılsın.

Preview nedir?#

Preview (Review App), bir pull request'in (GitLab'da merge request) çalışan bir kopyasıdır. EJO her PR için paylaşılan cluster'ınızda ayrı bir namespace oluşturur, uygulamayı oraya deploy eder ve https://<preview-adı>.preview.example.com biçiminde bir URL'i PR yorumuna yazar. PR kapandığında namespace silinir.

Preview'lar GitHub, GitLab ve Azure DevOps'ta çalışır. Bu sayfada "PR", GitLab'daki merge request'i de kapsar.

  • Preview adı (namespace adı da odur) ejo- ile başlar, repo adını içerir ve -pr-<numara> ile biter.
  • Aynı PR'a gelen yeni push'lar aynı namespace'i günceller.
  • Her PR için tek bir yorum açılır ve her push'ta güncellenir.

SCM'lere göre#

GitHub GitLab Azure DevOps
Preview açan olay PR açıldı, güncellendi, yeniden açıldı ya da label eklendi Merge request açıldı, güncellendi, yeniden açıldı ya da label eklendi Pull request oluşturuldu ya da güncellendi
Preview kaldıran olay PR kapandı ya da label kaldırıldı Merge request merge edildi, kapandı ya da label kaldırıldı Pull request tamamlandı ya da bırakıldı
Preview label'ı Var Var Yok, her PR preview alır
URL'in yazıldığı yer PR comment'i Merge request note'u Pull request thread'i
Preview status'ü Commit status ejo/preview Commit status ejo/preview Genre ejo, name preview

GitLab ve Azure DevOps'ta yorum ve status yazmak için EJO'da GitLab token'ı ya da Azure DevOps PAT'i tanımlı olmalıdır; tanımlı değilse yorum ve status yazılmaz, preview'ı Delivery > Preview'lar sayfasında görürsünüz. Bkz. Kaynak kod bağlantısı (SCM).

Ön koşullar#

  • Kubernetes tipinde bir environment.
  • Preview namespace'leri (Review App'ler) seçeneğiyle kurulmuş bir agent. Bu seçenek agent'a preview namespace'leri oluşturup silme yetkisi verir. Bkz. Agent kurulumu.
  • Cluster'da bir ingress controller ve preview domain'i için bir wildcard DNS kaydı, örneğin *.preview.example.com.
  • NetworkPolicy uygulayan bir CNI (örneğin Calico veya Cilium; k3s'in kendi controller'ı da uygular). Düz flannel uygulamaz.

Kurulum#

  1. Environment sayfasında Önizlemeleri kur'a basın. Preview kurulum sihirbazı açılır.
  2. Preview base domain'i alanına wildcard DNS'in gösterdiği domain'i girin, örneğin preview.example.com. Sihirbaz örnek bir URL gösterir.
  3. Gerekirse ingress class, TLS secret'ı, TTL, kota ve egress ayarlarını yapın (aşağıdaki tablo).
  4. Cluster'ımın CNI'ı NetworkPolicy uyguluyor kutusunu onaylayın.
  5. Repo binding'inde PR'da preview (izole isim, PR kapanınca kaldırılır) seçeneğini açın. Bu, PR trigger'ını da açar. Bkz. Trigger'lar ve binding'ler.

Aynı ayarları .ejo dosyasındaki preview: bloğuyla da yapabilirsiniz. Bkz. .ejo dosyası.

Environment ayarları#

Ayar Açıklama
Preview base domain'i Her preview bu domain altında bir hostname alır.
Ingress class (opsiyonel) Cluster'ınız preview Ingress'leri için varsayılan olmayan bir ingress class kullanıyorsa.
TLS secret adı (opsiyonel) HTTPS'i ingress'te sonlandırıyorsanız, agent'ın namespace'indeki TLS secret'ının adı. Her preview namespace'ine kopyalanır.
Preview TTL saat (0 = kapalı) Açık ama boşta kalan preview'lar bu süre sonunda kaldırılır. PR'a yeni bir push gelirse preview yeniden oluşturulur.
Maks. canlı preview namespace (0 = sınırsız) Aynı anda en fazla kaç preview olabileceği.
Quota CPU, memory, pod Her preview namespace'ine uygulanan ResourceQuota. Boş bırakılan alan limitsizdir.
Auth secret'ı Agent'ın namespace'indeki bir Secret (örneğin basic-auth); her preview namespace'ine kopyalanır.
Ingress annotation'ları Preview Ingress'lerine eklenen annotation'lar (JSON object).
Egress allowlist Preview'ların dışarıya hangi hedeflere çıkabileceği (aşağıya bakın).

Binding ayarları#

Ayar Açıklama
Preview label (opsiyonel) Yalnızca bu label'ı taşıyan PR'lar preview alır; label kaldırılırsa preview kaldırılır. Boş = her PR. GitHub ve GitLab'da çalışır; Azure DevOps label'ları yok sayar.
Preview health path (opsiyonel) Preview hazır sayılmadan önce Service üzerinde istek atılan path. 500'ün altındaki her status geçer. Boş = /.
Preview environment'ı PR ve teardown job'larının agent'ları ve secret'ları alacağı environment. Boş bırakılırsa bağlı environment kullanılır.

Pipeline'da preview#

Preview run'larında K8S_DEPLOY ve HELM_UPGRADE step'leri otomatik olarak PR namespace'ine deploy eder ve Ingress oluşturur. K8S_DEPLOY rollout'un bitmesini bekler, ardından health path'e wait_seconds (varsayılan 60) boyunca istek atar; hiç cevap gelmezse step fail olur.

Bir PR'da birden fazla servis aynı preview host'unu paylaşabilir. Her step'e preview_service ile bir ad, preview_path ile bir yol verin:

steps:
  - name: web
    kind: K8S_DEPLOY
    config:
      image: "{{.WebImage}}"
      container_port: 3000
      preview_service: web
  - name: api
    kind: K8S_DEPLOY
    config:
      image: "{{.ApiImage}}"
      container_port: 8080
      preview_service: api
      preview_path: /api
      preview_health_path: /api/healthz

Environment'a tanımlı SECRET variable'lar her preview namespace'inde ejo-preview-vars adlı bir Secret'a yazılır ve K8S_DEPLOY container'a bu değerleri verir.

İzolasyon ve egress#

Preview namespace'leri NetworkPolicy ile izole edilir: varsayılan olarak yalnızca kendi namespace'lerine ve DNS'e erişebilirler. Uygulamaların gerçekten ihtiyaç duyduğu hedefleri egress allowlist ile açın:

Alan Açıklama
Internet egress'e izin ver Public adreslere çıkışa izin verir. 10.0.0.0/8, 172.16.0.0/12 ve 192.168.0.0/16 kapalı kalır.
İzinli CIDR'lar Satır başına bir CIDR, en fazla 20. Örneğin paylaşılan bir veritabanının ağı.
İzinli namespace'ler Satır başına bir namespace, en fazla 20.

Egress değişiklikleri mevcut preview'lara bir sonraki push'ta yansır.

Uyarı: CNI'nız NetworkPolicy uygulamıyorsa preview'lar izole olmaz. Production ve preview'ları aynı cluster'da çalıştırıyorsanız bunu mutlaka kontrol edin.

Merge gate ile kullanma#

Binding'de Review App URL'ini de bekle açıkken merge gate, PR run'ının bir preview URL'i olana kadar bekler. Bu bekleme her SCM'de EJO tarafında çalışır; SCM tarafında:

  • GitHub'da merge gate ruleset'i ejo/preview status'ünü de zorunlu kılar.
  • Azure DevOps'ta EJO, name preview için ikinci bir engelleyici status policy ekler.
  • GitLab'da EJO ayrıca bir ayar yapmaz.

Preview'ları yönetme#

Delivery > Preview'lar sayfası tüm Kubernetes environment'larındaki preview'ları listeler. Bir preview'ın detay panelinden:

  • Pin'le: Preview'ı TTL temizliğinden muaf tutar.
  • TTL uzat (+24 saat): Süreyi uzatır. Uzatma 1 ile 168 saat arasında olabilir.
  • Yeniden deploy et: Son pull request deployment'ını tekrar çalıştırır.
  • Yeniden başlat, Uyut, Uyandır: Workload'ları yeniden başlatır, sıfıra ölçekler ya da eski replica sayısına geri getirir.
  • Pod'ları, log'ları, event'leri ve quota kullanımını görüntüler.
  • Kaldır: Preview'ı hemen kaldırır.

Pin'leme, uzatma ve kaldırma developer veya admin rolü ister.

Kaldırma#

Preview şu durumlarda kaldırılır: PR kapanınca (GitLab'da merge edilince veya kapanınca, Azure DevOps'ta tamamlanınca veya bırakılınca), TTL dolunca, label kaldırılınca ya da konsoldan kaldırılınca. Namespace silinir ve PR yorumu ### EJO preview removed başlığı ve sebebiyle güncellenir.

Sonraki adımlar#

Son güncelleme: 16 Ekim 2026