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
,template
veremote
gibi 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: depend
sayesinde 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.