GitLab, 2011 yılında Dmitriy Zaporozhets ve Sid Sijbrandij tarafından San Francisco, Kaliforniya'da kurulmuştur. Yazılım geliştirme süreçlerini hızlandırmayı, hataları erken aşamalarda tespit etmeyi ve süreci otomatikleştirmeyi amaçlayan bir platformdur. GitLab, yazılım geliştirme yaşam döngüsünün tüm aşamalarını kapsayan açık kaynaklı ve entegre bir DevOps platformudur. Sürekli Entegrasyon (CI) ve Sürekli Dağıtım (CD) gibi temel DevOps metodolojilerini uygulamak, güvenlik testlerini otomatikleştirmek, konteyner yönetimini sağlamak gibi işlemleri tek bir sistem altında birleştirir.
GitLab'ın yapısı, DevOps metodolojilerinin yanı sıra yazılım güvenliğini de entegre eden DevSecOps yaklaşımını destekleyecek şekilde tasarlanmıştır. Bu platform, yazılım geliştirme ekiplerinin daha verimli çalışmasına olanak tanırken, yazılım süreçlerinin hızlandırılmasını, güvenliğini ve kalitesini artırmayı hedefler.
GitLab’ın Temel Özellikleri
Kod Yönetimi (Version Control System)
GitLab, Git sürüm kontrol sistemini temel alır. Kullanıcılar; dallanma, birleştirme (merge request), commit geçmişi ve kod gözden geçirme gibi işlevleri doğrudan GitLab arayüzünden gerçekleştirebilir. Bu, ekiplerin asenkron ve güvenli kod geliştirme süreçlerini kolaylaştırır.
CI/CD (Continuous Integration & Continuous Deployment)
GitLab CI/CD, her commit sonrasında otomatik test, derleme ve dağıtım akışlarını destekler. YAML tabanlı gitlab-ci.yml dosyasıyla pipeline tanımları kolayca oluşturulabilir. GitLab Runner’lar, bu süreçleri çalıştıran ajanlardır ve hem lokal hem de Kubernetes ortamlarında çalıştırılabilir.
Proje ve Sürüm Yönetimi
- Issue takip sistemi
- Kanban panoları
- Milestone bazlı sürüm planlaması
- Otomatik sürüm numaralandırma ve etiketleme
GitLab, sadece geliştiriciler için değil, ürün yöneticileri ve proje yöneticileri için de kapsamlı araçlar sunar.
DevSecOps Uyumlu Güvenlik Özellikleri
GitLab, yazılım güvenliğini yaşam döngüsünün her aşamasına entegre eder:
- Static Application Security Testing (SAST)
- Dynamic Application Security Testing (DAST)
- Container Scanning
- License Compliance
Bu güvenlik testleri, pipeline'lar aracılığıyla otomatik biçimde tetiklenebilir.
GitLab Mimarisi
GitLab’ın esnek ve ölçeklenebilir mimarisi, özellikle büyük kurumların yüksek trafikli yazılım süreçlerini yönetebilmesini sağlar. Aşağıdaki bileşenler, bu mimarinin temelini oluşturur:
GitLab Rails: GitLab’ın temel servisidir. Web arayüzü, REST API ve birçok arka uç hizmetini yöneten ana bileşendir. Kullanıcı etkileşimlerinin büyük çoğunluğu bu katmanda gerçekleşir.
PostgreSQL: GitLab tarafından kullanılan ilişkisel veritabanı yönetim sistemidir. Tüm kullanıcı verileri, projelere ait metaveriler, sürüm geçmişi ve yapılandırma bilgileri burada saklanır.
Redis: Oturum yönetimi, önbellekleme ve iş kuyruklarının yönetimi için kullanılan yüksek hızlı, bellek içi veri deposudur. GitLab’ın performansını artırmak için kritik öneme sahiptir.
Sidekiq: Arka planda çalışan işleri yönetmek üzere yapılandırılmış işleyici sistemidir. E-posta bildirimleri, pipeline tetikleyicileri gibi zamanlama gerektiren görevler bu yapı aracılığıyla yürütülür.
Nginx: Kullanıcıdan gelen HTTP ve HTTPS isteklerini GitLab bileşenlerine yönlendiren bir ters proxy (reverse proxy) sunucusudur. Aynı zamanda TLS şifreleme trafiğini sonlandırma görevini de üstlenir.
Gitaly: Git deposu işlemlerinin merkezi olarak yürütülmesini sağlayan özel arka plan servisidir. Git işlemleri (örneğin, klonlama, çekme, birleştirme) Gitaly tarafından yüksek verimlilikle gerçekleştirilir.
GitLab Workhorse: HTTP katmanında çalışan bir proxy sunucusudur. Büyük dosya yükleme, API isteği yönlendirme ve içerik dönüştürme gibi operasyonları optimize eder ve ana Rails uygulamasına yük bindirmeden destek sağlar.
Prometheus + Grafana: GitLab’ın sistem kaynaklarını ve performans metriklerini izlemek için kullanılan gözlemleme araçlarıdır. Prometheus veri toplarken, Grafana bu verileri görsel olarak analiz edilebilir hale getirir.
GitLab, bu bileşenlerin yatay olarak dağıtılabildiği reference architecture’lar da sunar. Yüksek erişilebilirlik (HA) ve yük dengeleme gereksinimlerine göre PostgreSQL cluster'ları, Gitaly sunucuları ve CI Runner node'ları ayrı ayrı konuşlandırılabilir.
GitLab Uygulama Mimarisi: Bileşen Tabanlı Bir İnceleme
Aşağıda sunulan mimari şema, GitLab'ın monolitik ancak modüler yapısını yansıtarak, sistem bileşenlerinin birbirleriyle nasıl etkileşime girdiğini detaylı biçimde ortaya koymaktadır. GitLab’ın mimarisi, kullanıcıdan gelen HTTP/SSH isteklerinin iç sistem bileşenleri (Rails, Redis, PostgreSQL, Gitaly vb.) tarafından nasıl işlendiğini gösterir. Bu yapı, hem yazılım geliştirme ekiplerinin verimliliğini artırmakta hem de yüksek erişilebilirlik ve performans hedeflerine ulaşılmasını mümkün kılmaktadır. (https://panlw.github.io/15365441001781.html)
Gitlab Uygulama Mimarisi- Gitlab
Giriş Noktaları ve Yönlendirme Katmanı
NGINX
- GitLab sistemine gelen tüm HTTP (80) ve HTTPS (443) istekleri, ilk olarak NGINX tarafından karşılanır.
- NGINX, ters proxy (reverse proxy) görevini üstlenerek gelen trafiği GitLab Workhorse bileşenine yönlendirir.
- Aynı zamanda TLS sonlandırma işlemi de bu katmanda gerçekleştirilir.
GitLab Shell
- Kullanıcıların SSH (TCP 22) üzerinden gerçekleştirdiği Git işlemleri, doğrudan GitLab Shell üzerinden yönetilir.
- GitLab Shell, istemci isteklerini Rails uygulamasına yönlendiren ve kimlik doğrulamasını sağlayan bir arayüz görevi görür.
Uygulama Katmanı
GitLab Workhorse
- NGINX’ten gelen isteklerin işlenmesini optimize eden bir ara katmandır.
- Büyük dosya yüklemeleri, API çağrılarının ön işlemesi ve içerik önbellekleme gibi görevleri üstlenir.
- Gerektiğinde istekleri doğrudan Unicorn (veya modern kurulumlarda Puma) sunucusuna iletir.
Unicorn (GitLab Rails)
- GitLab’ın asıl uygulama mantığını yürüten sunucudur. REST API uç noktalarını ve web arayüzünü barındırır.
- Kullanıcı arabirimi, proje yönetimi, issue takibi ve pipeline tetikleyicileri gibi işlevler bu katmanda gerçekleşir.
- Redis ve PostgreSQL ile sürekli etkileşim halindedir.
Destek ve Arka Plan Katmanları
Redis
- Hem önbellekleme (cache) hem de iş kuyruğu yönetimi için kullanılmaktadır.
- GitLab Workhorse, Unicorn, Sidekiq ve Gitaly gibi bileşenler Redis ile veri alışverişi yapar.
- Redis, kullanıcı oturumlarının yönetimi ve iş yüklerinin sıraya alınması açısından kritiktir.
PostgreSQL
- GitLab’ın tüm yapısal ve kullanıcı verileri PostgreSQL ilişkisel veritabanında saklanır.
- Projeler, commit geçmişi, kullanıcı bilgileri ve metadata verileri burada tutulur.
- Rails sunucusu bu veritabanı ile doğrudan bağlantı kurar.
Sidekiq
- Arka planda çalışan görevleri (arka plan işleri) işleyen bileşendir.
- E-posta bildirimleri, webhook tetikleyicileri, zamanlanmış işler ve CI süreçleri burada yürütülür.
- Redis üzerinden sıraya alınan görevleri çeker ve işler.
Depo Katmanı
Gitaly
- GitLab’ın kaynak kod yönetimini sağlayan özel bileşenidir.
- Tüm Git işlemleri (klonlama, push/pull, diff, blame vs.) Gitaly sunucusu üzerinden yönetilir.
- Verimlilik açısından ayrı bir katmanda çalıştırılır ve GitLab Rails ile entegre çalışır.
Yardımcı Hizmetler
GitLab Pages (TCP 8090)
- GitLab, projelerin statik içeriklerini yayınlamayı destekleyen GitLab Pages bileşenini içerir.
- Örneğin, Jekyll veya Hugo ile oluşturulmuş belgeler bu sunucuda yayınlanabilir.
- İstekler, NGINX üzerinden Pages sunucusuna yönlendirilir.
Kapsayıcı (Container) ve Kayıt Sistemleri
GitLab, Docker tabanlı geliştirme ve dağıtım süreçlerine tam destek sağlar. Kullanıcılar kendi container registry’lerini GitLab üzerinden oluşturabilir, yönetebilir ve pipeline’larla entegre edebilirler. Bu sayede dış bağımlılıklar azalır, süreçler kapalı devre güvenli bir ortamda sürdürülür.
Eğitim ve Dokümantasyon Olanakları
GitLab, açık kaynak doğası gereği zengin bir eğitim ve dokümantasyon altyapısına sahiptir. GitLab University, CI temellerinden gelişmiş pipeline yapısına kadar birçok konuda interaktif öğrenme yolları sunar.
Akademik ve Endüstriyel Kullanım Örnekleri
- Zürih Üniversitesi (Vassallo, 2020): GitLab’ın, öğrenci projelerinde sürekli entegrasyon ve geri bildirim sistemi olarak kullanıldığı belgelenmiştir.
- OSTI & DOE (ABD Enerji Bakanlığı): GitLab, enerji sistemleri yazılımının sürüm kontrolü ve kod bütünlüğünü korumak için aktif kullanılmaktadır.
- Springer (2020): GitLab, bilimsel araştırmalarda veri analitiği pipeline'larının kontrolü için önerilen sistemler arasında gösterilmektedir.
GitLab, çağdaş yazılım geliştirme ihtiyaçlarına cevap verebilecek tam entegre bir DevOps platformudur. Sürüm kontrolü, CI/CD, güvenlik, izleme ve iş birliği gibi tüm ihtiyaçlar tek bir yapı altında sağlanırken; açık kaynak yapısı, özelleştirilebilirliği ve kurumsal uyumu sayesinde her ölçekte organizasyona hitap etmektedir.
GitLab’ın sunduğu modüler mimari ve yüksek ölçeklenebilirlik kapasitesi, geleceğin otomatize yazılım üretim süreçleri için ideal bir temel sunmaktadır.