GitLab CI/CD Pipeline Oluşturma Rehberi

📅 3 Şubat 2026Emre Karabulut
⏱️ Yaklaşık 8 dakikalık okuma süresi

Merhaba, sistem yönetimi ve DevOps dünyasının değerli üyeleri! Günümüz yazılım geliştirme süreçlerinde hız, otomasyon ve güvenilirlik olmazsa olmaz unsurlar haline gelmiştir. Bu unsurların merkezinde ise Continuous Integration (CI) ve Continuous Deployment (CD) pipeline’ları yer alır. Bu rehberde, popüler bir Git tabanlı sürüm kontrol sistemi olan GitLab’in entegre CI/CD özelliklerini kullanarak nasıl güçlü bir pipeline oluşturacağınızı adım adım inceleyeceğiz.

GitLab CI/CD Nedir ve Neden Önemlidir?

GitLab CI/CD, yazılım geliştirme süreçlerini otomatik hale getirmek için GitLab’in sunduğu güçlü bir araç setidir. Kodunuz her commit edildiğinde otomatik olarak test edilmesini, derlenmesini ve belirli bir ortama (geliştirme, test, üretim) dağıtılmasını sağlar. Bu otomasyon sayesinde:

  • Geliştiricilerin iş yükü azalır, daha hızlı geri bildirim alırlar.
  • Hatalar erken aşamada tespit edilir, düzeltilmesi kolaylaşır.
  • Uygulamalar daha tutarlı ve güvenilir bir şekilde dağıtılır.
  • Dağıtım süreçleri standartlaşır ve tekrarlanabilir hale gelir.

Kısacası, GitLab CI/CD projenizin kalitesini artırırken, geliştirme döngüsünü hızlandıran bir köprü görevi görür.

Temel GitLab CI/CD Kavramları

Bir pipeline oluşturmadan önce bazı temel kavramları anlamamız önemlidir:

.gitlab-ci.yml Dosyası

Tüm GitLab CI/CD pipeline tanımları projenizin kök dizininde bulunan .gitlab-ci.yml adlı bir YAML dosyasında yapılır. GitLab bu dosyayı okuyarak hangi işlemlerin hangi sırayla yapılacağını anlar.

Stages (Aşamalar)

Stages, pipeline’ınızdaki mantıksal aşamalardır. Her aşama bir veya daha fazla “job” içerir. İşler aynı aşamada paralel çalışırken, aşamalar birbirini sıralı olarak takip eder. Örneğin, bir “build” aşaması, ardından bir “test” aşaması ve son olarak bir “deploy” aşaması olabilir.


stages:
  - build
  - test
  - deploy

Jobs (İşler)

Jobs, pipeline’ınızda gerçekleştirilecek asıl eylemleri tanımlar. Her job, belirli bir aşamada çalışır ve kendi script’leri, bağımlılıkları ve çalıştığı ortamı (runner) vardır. Bir job’un başarısız olması durumunda, pipeline genellikle durur (yapılandırmaya bağlı olarak).


build_application:
  stage: build
  script:
    - echo "Uygulama derleniyor..."
    - mvn package

run_unit_tests:
  stage: test
  script:
    - echo "Birim testleri çalıştırılıyor..."
    - mvn test

Runners (Koşucular)

Runner’lar, GitLab CI/CD pipeline’ınızdaki job’ları gerçekten yürüten ajanlardır. GitLab’in kendi paylaşımlı runner’ları olabileceği gibi, kendi altyapınızda (sunucu, Docker konteyneri vb.) özel runner’lar da kurabilirsiniz. Her job belirli bir runner etiketiyle eşleşecek şekilde yapılandırılabilir.

Artifacts (Ürünler)

Artifacts, bir job tarafından üretilen ve başka job’lar veya dış dünya tarafından kullanılabilen dosyalardır (derlenmiş kod, test raporları, paketler vb.). Bu ürünler belirli bir süre boyunca GitLab üzerinde saklanır.


build_application:
  stage: build
  script:
    - mvn package
  artifacts:
    paths:
      - target/*.jar
    expire_in: 1 week

Variables (Değişkenler)

Değişkenler, pipeline’ınıza dinamik değerler eklemenizi sağlar. GitLab arayüzünden (Settings > CI/CD > Variables) veya .gitlab-ci.yml dosyasında tanımlanabilirler. Hassas bilgiler (API anahtarları, parolalar) için genellikle GitLab arayüzünden korumalı (protected) değişkenler kullanmak daha güvenlidir.


variables:
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

deploy_production:
  stage: deploy
  script:
    - echo "Uygulama $CI_ENVIRONMENT_NAME ortamına dağıtılıyor."
    - ssh $PRODUCTION_SERVER_USER@$PRODUCTION_SERVER_IP "deploy_script.sh $CI_COMMIT_SHA"

Basit Bir GitLab CI/CD Pipeline Oluşturma Rehberi

Şimdi, basit bir Node.js uygulamasını derleyip test eden ve ardından sahte bir dağıtım yapan bir pipeline oluşturalım. Projenizin yapısı aşağıdaki gibi olsun:


my-nodejs-app/
├── .gitlab-ci.yml
├── package.json
├── app.js
└── test.js

Adım 1: GitLab Projesi Oluşturma ve Kodu Yükleme

İlk olarak, GitLab üzerinde yeni bir proje oluşturun ve uygulamanızın kodunu (package.json, app.js, test.js) bu projeye push edin.

Örnek package.json:


{
  "name": "my-nodejs-app",
  "version": "1.0.0",
  "description": "A simple Node.js app for CI/CD demo",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "test": "echo \"Running dummy tests...\" && exit 0"
  },
  "author": "",
  "license": "ISC"
}

Adım 2: .gitlab-ci.yml Dosyasını Oluşturma

Projenizin kök dizinine .gitlab-ci.yml adında bir dosya oluşturun ve içine aşağıdaki içeriği yapıştırın:


# GitLab CI/CD Pipeline Tanımı
# Bu pipeline, bir Node.js uygulamasını derleyecek, test edecek ve dağıtacak.

stages:
  - build
  - test
  - deploy

# Ortak ayarlar veya varsayılanlar
default:
  image: node:16-alpine # Tüm job'lar için varsayılan Docker imajı

cache:
  paths:
    - node_modules/ # node_modules dizinini cache'le, daha hızlı buildler için

# Build Aşaması: Bağımlılıkları Yükle
install_dependencies:
  stage: build
  script:
    - echo "Node.js bağımlılıkları yükleniyor..."
    - npm install
  artifacts:
    paths:
      - node_modules/
    expire_in: 1 day # Yüklenen bağımlılıkları 1 gün sakla

# Test Aşaması: Uygulamayı Test Et
run_tests:
  stage: test
  script:
    - echo "Uygulama testleri çalıştırılıyor..."
    - npm test
  # Bu job'un çalışması için önceki build aşamasından gelen node_modules'a ihtiyacı var.
  # cache mekanizması bunu otomatik sağlar.

# Deploy Aşaması: Uygulamayı Sahte Bir Ortama Dağıt
deploy_staging:
  stage: deploy
  environment:
    name: staging
    url: http://staging.example.com
  script:
    - echo "Uygulama staging ortamına dağıtılıyor..."
    - echo "Dağıtım komutları buraya gelecek (örn: ssh, rsync, docker push)..."
    - echo "Deploy completed for $CI_COMMIT_SHA to staging."
  only:
    - master # Sadece master branch'ine yapılan commit'lerde çalıştır

deploy_production:
  stage: deploy
  environment:
    name: production
    url: http://production.example.com
  script:
    - echo "Uygulama production ortamına dağıtılıyor..."
    - echo "Gerçek dünya dağıtım komutları burada yer alacaktır."
    - echo "kubectl apply -f k8s/production-deployment.yaml"
  when: manual # Bu job'u manuel olarak tetikleme
  only:
    - master

Adım 3: Kodu Commit Etme ve Push Etme

.gitlab-ci.yml dosyasını projenize ekledikten sonra, değişiklikleri commit edin ve GitLab deposuna push edin:


git add .
git commit -m "Add initial GitLab CI/CD pipeline"
git push origin master

Adım 4: Pipeline’ı İzleme

Kodu push ettikten sonra, GitLab projenizin sol menüsünde “CI/CD” -> “Pipelines” bölümüne gidin. Yeni bir pipeline’ın tetiklendiğini ve aşamaların (Build, Test, Deploy) sırayla çalıştığını göreceksiniz. Her bir job’un üzerine tıklayarak log’ları detaylı bir şekilde inceleyebilirsiniz.

Gelişmiş CI/CD Konularına Giriş

Yukarıdaki örnek, temel bir pipeline’ın nasıl oluşturulacağını gösterdi. GitLab CI/CD’nin yetenekleri bununla sınırlı değildir. İşte bazı ek konular:

  • Conditional Jobs (Koşullu İşler): only, except, rules anahtar kelimelerini kullanarak job’ların belirli branch’lerde, etiketlerde veya değişikliklerde çalışmasını sağlayabilirsiniz.
  • Matrix Jobs: Birden fazla değişkenin kombinasyonlarını kullanarak paralel job’lar oluşturmak için parallel: matrix kullanılabilir.
  • Docker in CI/CD: Her job için farklı Docker imajları kullanmak veya Docker konteynerlerini job içinde çalıştırmak (Docker-in-Docker).
  • Environments: Uygulamalarınızı farklı dağıtım ortamlarına (staging, production) bağlamak ve dağıtım geçmişini izlemek.
  • Child Pipelines: Büyük ve karmaşık projelerde ana pipeline’ı daha küçük, bağımsız alt pipeline’lara bölmek.
  • Includes: Ortak CI/CD yapılandırmalarını ayrı dosyalarda tutarak yeniden kullanılabilirliği artırmak.

Sonuç

GitLab CI/CD, modern yazılım geliştirme süreçleri için vazgeçilmez bir araçtır. Bu rehberde, temel bir CI/CD pipeline’ını nasıl oluşturacağınızı ve işleteceğinizi öğrendiniz. Pipeline’ınızı projenizin gereksinimlerine göre özelleştirmek ve otomasyon seviyesini artırmak tamamen sizin elinizde. Unutmayın, iyi yapılandırılmış bir pipeline, geliştirme ekibinizin verimliliğini artırırken, son kullanıcılarınıza daha hızlı ve güvenilir teslimatlar yapmanızı sağlar. Deneyerek ve keşfederek GitLab CI/CD’nin tüm potansiyelini ortaya çıkarın!

SEO_KEYWORD: GitLab CI/CD Pipeline

155f52c7e9c3ea8a325b44ff056acd50611fa5e706241e72fc0165362c08111b?s=64&d=mm&r=g
Emre Karabulut
📊 Bu yazı 7 kez okundu.