Introduction
Yazılım geliştirme süreçlerinde sürekli entegrasyon (CI) ve sürekli teslimat/dağıtım (CD) kavramları, modern DevOps kültürünün temel taşlarıdır.
GitLab, CI/CD özelliklerini doğrudan entegre ederek geliştiricilere güçlü, esnek ve ölçeklenebilir bir çözüm sunar.
Bu makalede:
- GitLab CI/CD’nin temel kavramlarını,
.gitlab-ci.ymldosyasının yapısını,- GitLab Runner kurulumunu,
- Gerçekçi pipeline örneklerini,
- Kubernetes ve Docker entegrasyonlarını,
- En iyi uygulamaları (best practices) öğreneceğiz.
Prerequisites
Başlamadan önce:
- Bir GitLab hesabınız (self-hosted veya gitlab.com) olmalı,
- Temel Git bilgisine sahip olmalısınız,
- Docker yüklü bir ortamınız olmalı,
- Basit bir uygulama projesi (örn. Python Flask, Node.js Express) hazır bulunmalı.
Step 1 – GitLab CI/CD Temelleri
1.1 CI/CD Nedir?
- CI (Continuous Integration): Geliştiricilerin kodlarını sık sık ana branch’e entegre etmesi, testlerin otomatik çalıştırılması.
- CD (Continuous Delivery/Deployment): Kodun otomatik olarak staging/production ortamına dağıtılması.
1.2 GitLab CI/CD’nin Gücü
- GitLab, pipeline mantığını stages (aşamalar) ve jobs (işler) üzerine kurar.
- Tüm süreç
.gitlab-ci.ymldosyasında tanımlanır. - Örnek bir pipeline: build → test → deploy.
stages:
- build
- test
- deploy
1.3 GitLab Runner Kavramı
- Runner, job’ları çalıştıran ajandır.
- Kendi makinenize veya Kubernetes cluster’ınıza kurabilirsiniz.
Step 2 – İlk Pipeline Yazımı
2.1 Basit .gitlab-ci.yml
stages:
- build
- test
- deploy
build-job:
stage: build
script:
- echo "Building the app..."
test-job:
stage: test
script:
- echo "Running tests..."
deploy-job:
stage: deploy
script:
- echo "Deploying..."
2.2 Job ve Stage Mantığı
- Stage: Pipeline’ın adımları (örn. build, test, deploy).
- Job: Her stage’de yapılacak işler.
- Script: Çalıştırılacak komutlar.
2.3 Artifacts ve Cache Kullanımı
build-job:
stage: build
script:
- mkdir dist
- echo "Build output" > dist/output.txt
artifacts:
paths:
- dist/
Step 3 – GitLab Runner Kurulumu
3.1 Linux’te Runner Kurulumu
sudo apt-get install -y curl
curl -L --output gitlab-runner.deb https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.deb
sudo dpkg -i gitlab-runner.deb
3.2 Runner Kaydı
sudo gitlab-runner register
Sorulacak bilgiler:
- GitLab URL:
https://gitlab.com/ - Token: Proje ayarlarından alınır
- Executor:
dockerönerilir
3.3 Docker Executor Kullanımı
[[runners]]
name = "docker-runner"
executor = "docker"
[runners.docker]
image = "python:3.10"
privileged = true
Step 4 – Docker ile Pipeline Kullanımı
4.1 Docker-in-Docker
image: docker:latest
services:
- docker:dind
stages:
- build
build-job:
stage: build
script:
- docker build -t myapp .
4.2 Node.js Örneği
image: node:18
stages:
- install
- test
install-job:
stage: install
script:
- npm install
test-job:
stage: test
script:
- npm test
4.3 Python Flask Örneği
image: python:3.10
stages:
- test
test-job:
stage: test
script:
- pip install -r requirements.txt
- pytest
Step 5 – Ortamlar ve Deploy Stratejileri
5.1 Ortam Tanımları
deploy-staging:
stage: deploy
script:
- echo "Deploying to staging..."
environment:
name: staging
url: https://staging.example.com
5.2 Manual Approval
deploy-production:
stage: deploy
script:
- echo "Deploying to production..."
when: manual
environment:
name: production
url: https://example.com
5.3 Blue-Green ve Canary Deployments
- Blue-Green: İki ayrı ortam, biri aktif diğeri pasif.
- Canary: Yeni versiyon küçük bir kullanıcı grubuna açılır.
Step 6 – Best Practices
- Caching: Bağımlılıkları cache’leyin.
- Artifacts: Build çıktısını sonraki job’larda kullanın.
- Secrets Management: GitLab CI/CD Variables kullanın.
- Parallel Jobs: Testleri paralel çalıştırın.
- Monitoring: Prometheus/Grafana ile pipeline metriklerini izleyin.
Step 7 – Kubernetes Entegrasyonu
7.1 Kubernetes’e Deploy
deploy-k8s:
stage: deploy
image: bitnami/kubectl
script:
- kubectl apply -f k8s/deployment.yaml
environment:
name: production
url: https://k8s.example.com
7.2 Helm ile Deploy
deploy-helm:
stage: deploy
script:
- helm upgrade --install myapp ./chart
Conclusion
Bu makalede GitLab CI/CD’nin temellerini öğrendiniz:
.gitlab-ci.ymldosyasının yapısı,- Runner kurulumu,
- Docker ve Kubernetes entegrasyonları,
- Ortam yönetimi ve deploy stratejileri,
- Best practices.