GitLab CI/CD Dosyalarında Ustalık: extends, anchor, include ve trigger Yapıları Ne İşe Yarar?
Modern yazılım projelerinde otomasyon artık vazgeçilmez bir standart. GitLab CI/CD sistemi ise bu otomasyonu sağlamanın en güçlü yollarından biri. Ancak .gitlab-ci.yml dosyaları büyüdükçe karmaşıklık da artar. Neyse ki GitLab, bu dosyaları daha okunabilir, modüler ve sürdürülebilir hâle getirmek için bize dört güçlü araç sunuyor:
🔹 extends
🔹 YAML anchor yapıları (& ve *)
🔹 include
🔹 trigger
Bu rehberde bu yapıların her birini detaylıca inceliyor, nasıl çalıştıklarını örneklerle anlatıyoruz.
🔁 1. YAML Anchor (& ve *) — Tekrara Son
YAML, aynı yapıların tekrar tekrar yazılmasını engellemek için “anchor” adında bir özellik sunar. Bu sayede örneğin aynı image, before_script ya da tags gibi ayarları her işte (job) tekrar yazmak yerine, bir yerde tanımlayıp diğer yerlerde kullanabiliriz.
✅ Örnek:
yamlKodu kopyala.defaults: &defaults
image: alpine:3.18
before_script:
- echo "Setup tamamlandı"
job1:
<<: *defaults
script:
- echo "İlk job"
job2:
<<: *defaults
script:
- echo "İkinci job"
🧠 Anchor’lar yalnızca aynı dosya içinde çalışır ve YAML tarafından işlenir, GitLab’a özel değildir.
🧬 2. extends — İşleri Kalıtımla Kolaylaştır
GitLab’a özel bir özellik olan extends, bir job’ın başka bir job’dan kalıtım almasını sağlar. Anchor’dan farkı, işlerin isimlerini temel alarak YAML dışında da derinlemesine birleşim yapabilmesidir.
✅ Örnek:
yamlKodu kopyala.template:
image: node:18
tags: [shared]
before_script:
- npm install
lint:
extends: .template
script:
- npm run lint
🔎
extends, YAML anchor’lara göre daha güçlüdür ve birden fazla yapıdan kalıtım almak da mümkündür.
📂 3. include — Büyük Dosyaları Parçalayarak Yönet
Projeler büyüdükçe .gitlab-ci.yml dosyaları da şişmeye başlar. Bu durumda yapıyı daha okunabilir kılmak için GitLab’ın sunduğu include özelliğini kullanabiliriz. Böylece ana dosyada sadece include tanımları olurken detaylar alt dosyalara taşınabilir.
✅ Örnek:
yamlKodu kopyalainclude:
- local: 'ci/build.yml'
- local: 'ci/test.yml'
- remote: 'https://example.com/deploy.yml'
📦
local,project,templateveremotegibi farklı kaynaklardan dosya çağırabilirsiniz.
🚀 4. trigger — Alt Pipeline’lar ile Süreci Parçala
Bazı durumlarda pipeline içinde başka bir pipeline’ı tetiklemek isteyebilirsiniz. Örneğin her modülün kendi bağımsız pipeline’ı olabilir. Bu gibi durumlarda trigger komutu devreye girer.
✅ Statik Trigger Örneği:
yamlKodu kopyalatrigger-deploy:
trigger:
include: .gitlab/deploy.yml
strategy: depend
✅ Dinamik Trigger Örneği:
yamlKodu kopyalagenerate-pipeline:
script:
- ./generate-ci.sh > child.yml
artifacts:
paths: [child.yml]
run-generated:
trigger:
include:
artifact: child.yml
job: generate-pipeline
⚙️
strategy: dependsayesinde alt pipeline bitmeden ana pipeline tamamlanmaz.
🎛️ BONUS: inputs ile Daha Güvenli ve Parametreli Templateler
GitLab’ın yeni inputs özelliği ile include edilen CI şablonlarına parametreler tanımlayabilirsiniz. Bu, özellikle şablonları daha kontrollü ve kullanıcı dostu hale getirir.
✅ Örnek:
yamlKodu kopyalaspec:
inputs:
deploy_env:
type: string
options: ["dev", "staging", "prod"]
📌 Bu yapı, şablonların yanlış kullanılmasını engeller, belirli seçenekler sunar ve daha güvenli iş akışları sağlar.
📚 Sonuç: Temiz ve Güçlü GitLab CI Dosyaları İçin Altın Kurallar
✅ Anchor ile tekrarları azalt
✅ Extends ile kalıtım yap
✅ Include ile dosyaları böl ve yönetimi kolaylaştır
✅ Trigger ile pipeline’ları parçalara ayır
✅ Inputs ile şablonlara akıllı parametre ekle
Tüm bu yapılar bir araya geldiğinde, hem ekip içinde okunabilirliği yüksek, hem de CI/CD sürecinde esnekliği en üst seviyeye çıkaran bir yapı kurmuş olursunuz.
🔗 İlginizi Çekebilir:
🔍 Benzer içerikler için göz atın:
➡️ Web Geliştirme ve Kodlama kategorisinde daha fazlası sizi bekliyor.



















