GitLab — bir Git deposu, yerleşik CI/CD, konteyner kaydı ve güvenlik araçlarını tek bir uygulamada birleştiren açık kaynaklı bir DevOps platformudur. 2011 yılında Sid Sijbrandij ve Dmitriy Zaporozhets tarafından kurulan platform, kurumsal ortamlar için hem bulut hizmeti (GitLab.com) hem de kendi kendine yönetilen sürüm (Self-Managed) sunar. GitLab, 2024'e göre, platform 30 milyondan fazla kayıtlı kullanıcı tarafından kullanılmaktadır.
Önemli Noktalar
GitLab — MIT lisansı altında tam özellikli bir açık kaynak DevOps platformudur. Çeşitli hizmetleri entegrasyonlar aracılığıyla birleştiren GitHub'ın aksine, GitLab, geliştirme yaşam döngüsünün tamamı için tek bir araç sağlar: kod yönetimi ve kod incelemesinden CI/CD, izleme, güvenlik ve dağıtıma kadar. Platform, çoğu DevOps görevi için üçüncü taraf hizmetlere ihtiyaç duymaz.
GitLab'ın hikayesi 2011 yılında Ukraynalı geliştiricilerin bir iç projesi olarak başladı. İlk herkese açık sürüm Eylül 2011'de yayınlandı ve 2015'te GitLab, GitLab.com'daki ilk proje oldu ve bulut barındırmayı başlattı. 2017'de GitLab, acı verici ama öğretici bir geçiş süreci gerçekleştirdi — tüm altyapının Azure'dan Google Cloud'a taşınması, canlı olarak gerçekleştirildi ve bir dizi blog yazısında belgelendi.
GitLab'ın mimarisi üç ana bileşenden oluşur: GitLab Rails (Ruby on Rails üzerinde web uygulaması), GitLab Shell (SSH üzerinden Git işlemlerinin yönetimi) ve Gitaly (Git verilerine erişim için gRPC sunucusu). CI/CD, derleme sunucularına kurulan ve işleri izole ortamlarda (Docker, Kubernetes, VirtualBox) yürüten ayrı bir uygulama olan GitLab Runner aracılığıyla sağlanır.
GitLab CI/CD — platformun önemli bir avantajı olan yerleşik sürekli entegrasyon ve teslimat sistemidir. GitHub Actions'ın aksine, GitLab CI/CD en başından itibaren mimariye dahil edilmiştir ve ayrı bir yapılandırma gerektirmez: depo köküne .gitlab-ci.yml dosyası eklendikten sonra her proje otomatik olarak CI/CD alır.
Bir pipeline, sıralı veya paralel olarak çalışan aşamalardan oluşur: build → test → deploy. Her aşama, runner'lar üzerinde çalıştırılan bir veya daha fazla iş içerir. Bir aşamadaki bir iş başarısız olursa, tüm aşama başarısız olarak işaretlenir ve sonraki aşamalar varsayılan olarak çalıştırılmaz. Aşağıda bir mobil proje için örnek bir pipeline verilmiştir:
# .gitlab-ci.yml
stages:
- build
- test
- deploy
build-android:
stage: build
image: openjdk:17-jdk
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/
unit-tests:
stage: test
script:
- ./gradlew testDebugUnitTest
deploy-firebase:
stage: deploy
script:
- firebase appdistribution:distribute app.apk
GitLab Runner, birden çok yürütücüyü destekler: Docker (önerilen), Kubernetes, SSH, VirtualBox ve Parallels. En popüler seçenek, her işi ayrı bir kapsayıcıda çalıştıran Docker yürütücüsüdür. Bir runner, tek bir projeye özel veya tüm bir grup için paylaşımlı (shared) olarak kaydedilebilir. GitLab.com, ayda 2000 dakika sınırıyla ücretsiz paylaşımlı runner'lar sağlar.
GitLab CI/CD, manuel tetikleme (when: manual), gecikmeli tetikleme (when: delayed), paralel yürütme (parallel: 5), matris, dinamik pipeline'lar (child pipelines) ve çok seviyeli pipeline'ları (parent-child) destekler. Bu, karmaşık senaryolar oluşturmayı sağlar: örneğin, bir monorepoda her modül için dinamik olarak bir pipeline oluşturmak veya farklı Android mimarileri (arm64, x86_64) için paralel derlemeler çalıştırmak.
GitLab ve GitHub — Git platformu pazarındaki iki ana rakiptir, ancak felsefeleri ve mimarileri temelde farklıdır. GitHub, açık topluluk, entegrasyon ekosistemi ve sosyal özelliklere (fork'lar, yıldızlar) odaklanır. GitLab, kapsamlı bir DevOps döngüsüne odaklanır ve tüm araçları kutudan çıkar çıkmaz sunar: planlamadan izlemeye kadar.
Temel mimari fark: GitLab — geliştiricinin bütün olarak kurduğu tek bir monolitik uygulamadır. Tüm özellikler (CI/CD, Container Registry, Security Scanning, Pages) yerleşiktir ve kurulumdan hemen sonra çalışır. GitHub, çoğu özelliğin üçüncü taraf hizmetlerle (Travis CI, CircleCI, Jenkins, SonarQube) entegrasyon yoluyla uygulandığı API'ye sahip bir platformdur. Aşağıdaki tablo temel özellikleri karşılaştırmaktadır:
| Kriter | GitLab | GitHub |
|---|---|---|
| CI/CD | Yerleşik, .gitlab-ci.yml'de YAML | Actions, .github/workflows'da YAML |
| Self-Hosted | Ücretsiz (Community Edition) | Ücretli (Enterprise Server) |
| Lisans | MIT (açık kaynak) | Tescilli |
| Kayıt | Container + Dependency Proxy | Packages (konteynerler + paketler) |
| Güvenlik | SAST, DAST, Fuzzing, Container Scanning | Dependabot + CodeQL (sınırlı) |
GitLab ve GitHub arasındaki seçim, ekibin ihtiyaçlarına bağlıdır. Öncelik sıfır yapılandırmayla hızlı dağıtım ve açık bir topluluksa — GitHub'ı seçin. Altyapı üzerinde tam kontrole, kendi kendine barındırılan dağıtıma ve yerleşik güvenliğe ihtiyacınız varsa — GitLab tercih edilir. Stack Overflow anketine (2024) göre, geliştiricilerin %90'ı GitHub, %33'ü GitLab kullanmaktadır (genellikle her iki platformu aynı anda).
Self-Managed GitLab (önceden On-Premises), platformu kendi sunucunuza kurmanıza ve veriler, altyapı ve çalışma süresi üzerinde tam kontrol sahibi olmanıza olanak tanır. Bu, özellikle uyumluluk gereksinimleri olan kuruluşlar için önemlidir: finans sektörü, devlet kurumları, verilerin üçüncü taraf sunucularda depolanamadığı tıbbi kuruluşlar.
GitLab kurulumu Ubuntu, Debian, CentOS ve Docker üzerinden desteklenir. Resmi Omnibus paketi tüm bileşenleri içerir: web sunucusu (NGINX), veritabanı (PostgreSQL), önbellek (Redis), Git işleyicisi (Gitaly) ve arka plan işlemleri. Minimum gereksinimler: 100 kişiye kadar ekipler için 4 GB RAM ve 2 CPU. Yüksek yüke sahip büyük kurulumlar için, bileşenlerin ayrı sunuculara bölünmesi önerilir.
# GitLab CE'yi Omnibus ile Ubuntu'ya yükleme
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
sudo bash script.deb.sh
# Paketi yükleme
sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce
# Durumu görüntüleme
sudo gitlab-ctl status
sudo gitlab-ctl tail
Self-Managed GitLab'ın CI/CD dakika sınırı yoktur — tüm runner'lar kuruluşa aittir ve güçleri yalnızca kendi donanımınızla sınırlıdır. Ayrıca bölgeler için Coğrafi çoğaltma, denetim günlükleri, IP engelleme ve kurumsal LDAP/SAML sağlayıcılarıyla entegrasyon da mevcuttur. GitLab, her ay (22'sinde) yeni özellikler ve güvenlik düzeltmeleriyle güncellemeler yayınlar.
GitLab'da güvenlik platform düzeyinde yerleşiktir ve pipeline'ın her aşamasında çalışan birden çok tarayıcı içerir. SAST (Static Application Security Testing), uygulamayı çalıştırmadan kaynak kodundaki güvenlik açıklarını analiz eder ve Java, Kotlin, Swift, Python ve JavaScript dahil 15'ten fazla dili destekler. DAST (Dynamic Application Security Testing), çalışan web uygulamalarını içeriden güvenlik açıklarına karşı test eder.
Ek araçlar: Container Scanning, temel katmanlardaki güvenlik açıkları için Docker görüntülerini kontrol eder; Dependency Scanning, proje bağımlılıklarını analiz eder ve bilinen CVE'ler hakkında uyarır; Secret Detection, yanlışlıkla işlenmiş API anahtarlarını, parolaları ve token'ları bulur; Fuzz Testing, belirgin olmayan hataları bulmak için hatalı verilerle otomatik testler gerçekleştirir. Tüm tarama sonuçları birleşik bir Güvenlik Panosunda görüntülenir.
GitLab ayrıca Uyumluluk araçları da sağlar — düzenleyici gereksinimleri karşılamak için. Uyumluluk Panosu, tüm projelerin uyumluluk durumunu gösterir, Denetim Olayları, yönetici ve geliştiricinin her eylemini günlüğe kaydeder ve Uyumluluk Çerçeveleri, belirli proje grupları için yapılandırma politikalarını zorunlu olarak uygulamaya olanak tanır. Bu, GitLab'ı katı güvenlik gereksinimleri olan kurumsal ortamlarda popüler bir seçim haline getirir.
GitLab Container Registry — CI/CD ile entegre yerleşik bir Docker kaydıdır. Bir pipeline'da Docker görüntüsü oluşturulduktan sonra, CI_REGISTRY ve CI_REGISTRY_USER ortam değişkenleri kullanılarak hemen Kayda yayınlanabilir. Kayıt, pull-through önbelleğe alma, etiketleme, temizleme politikaları ve doğrudan kayıtta güvenlik açığı taramasını destekler.
Dependency Proxy — harici kayıtlardan (Docker Hub, Quay, GCR) konteynerler ve görüntüler için bir önbelleğe alma mekanizmasıdır. Bir pipeline ubuntu:latest gibi bir görüntü istediğinde, GitLab önce önbelleğini kontrol eder — görüntü zaten indirilmişse, yeniden alınmaz. Bu, harici kayıtlar üzerindeki yükü azaltır, pipeline'ları hızlandırır ve Docker Hub hız sınırlamalarına karşı korur.
Mobil geliştiriciler için GitLab, belgeleri ve test raporlarını barındırmak için GitLab Pages sağlar. Testler çalıştırıldıktan sonra, yapıtlar (HTML raporları, ekran görüntüleri, günlükler) Pages olarak yayınlanabilir ve QA ekibiyle bir bağlantı paylaşılabilir. Her şey aynı GitLab projesi içinde bulunduğu için, raporları bulut depolamaya yüklemekten daha kullanışlıdır.
GitLab API (REST ve GraphQL), platformun tüm kaynaklarına erişim sağlar: projeler, kullanıcılar, pipeline'lar, Birleştirme İstekleri, kayıt. API, otomasyon için kullanılır: bir şablondan proje oluşturma, inceleyici atama, pipeline durumu alma. Webhook'lar, olaylarda (push, merge, Issue oluşturma) harici sistemlere HTTP bildirimleri göndermeye olanak tanır. Webhook'lar Mattermost, Slack, Telegram ve dahili izleme sistemleriyle entegre olur.
GitLab Pages, bir depodan statik web sitelerini otomatik olarak yayınlar. Mobil projeler için Pages, API dokümantasyonu, test kapsama raporları ve lint analiz sonuçlarını barındırmak için kullanışlıdır. Yayınlama, başarılı bir pipeline'dan sonra otomatik olarak gerçekleşir — .gitlab-ci.yml dosyasına Pages yayınlama ile bir dağıtım adımı eklemeniz yeterlidir. Sonuç https://namespace.gitlab.io/project-name adresinde mevcuttur.
Sıkça Sorulan Sorular
GitLab — kodu depolamak ve derlemeleri otomatikleştirmek için bir programdır. Geliştiriciler kodu yükler ve GitLab test eder, uygulamayı oluşturur ve sunucuya otomatik olarak gönderir.
GitLab CE (Community Edition), açık kaynakla tamamen ücretsizdir. GitLab EE (Enterprise Edition), ek güvenlik özellikleriyle kullanıcı başına aylık 19 $'dan başlayan ücretli planlara sahiptir.
Runner — işleri (job) yürüten bir ajandır. Pipeline — .gitlab-ci.yml'de tanımlanan bir iş dizisidir. Runner, kodu fiziksel olarak bir sunucuda çalıştırırken, pipeline neyi ve hangi sırayla çalıştıracağını tanımlar.
Evet, GitLab, GitHub, Bitbucket ve diğer platformlardan yerleşik bir içe aktarıcı sağlar. İçe aktarma, maksimum geçmiş korumasıyla kodu, commit'leri, dalları, Issue'ları, Wiki'yi ve Çekme İsteklerini aktarır.
iOS için bir macOS runner (fiziksel Mac veya bulutta Mac) gereklidir. Pipeline, Xcode kurulumu, derleme için xcodebuild çalıştırma, testleri yürütme ve TestFlight için .ipa dosyasını dışa aktarmayı içerir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun