QA Mühendisleri için CI/CD: Manuel Testten Sürekli Teste

Jenkins, GitHub Actions, Docker ve CI/CD pipeline’da test otomasyon entegrasyonu için eksiksiz rehber


CI/CD Pipeline

📍 Buradasınız:

[✓] Makale 1: QA Temelleri
[✓] Makale 2: QA Pratiği  
[✓] Makale 3: QA için DSA
[✓] Makale 4: Automation Frameworks
[→] Makale 5: CI/CD ← Şu anda okuyorsunuz
[ ] Makale 6: Performance Testing
[ ] Makale 7: Apple'da Çalışma

İlerleme: %71 ✨

“500 otomatik testimiz var ama haftada bir manuel çalıştırıyoruz” — bunu bir mülaakatta duyunca, şirketin 2015’te kaldığını anladım.

2026’da continuous testing bir seçenek değil, bir zorunluluktur. Apple, Google, Amazon günde onlarca kez değişiklik deploy ediyor. Bunu nasıl yapıyorlar? Entegre testli CI/CD pipeline’lar.

Gerçek bir Apple iş ilanından:

“Experience with CI/CD pipelines and test automation integration”

Bu makalede öğrenecekleriniz:

  • ✅ Test otomasyonu için Jenkins kurulumu
  • ✅ GitHub Actions workflow’ları oluşturma
  • ✅ Docker ile testleri konteynerleştirme
  • ✅ Playwright/Selenium’u pipeline’a entegre etme
  • ✅ Bildirimler kurma (Slack, Teams)
  • ✅ Test dashboard’ları oluşturma

Bu makalenin sonunda portföyünüz için production-ready CI/CD pipeline’ınız olacak.


📋 İçindekiler

  1. CI/CD Nedir ve QA için Neden Önemli
  2. QA için Git & GitHub
  3. GitHub Actions: Sıfırdan Otomasyon
  4. Jenkins: Enterprise-level CI/CD
  5. Test Otomasyonu için Docker
  6. Testleri Pipeline’a Entegre Etme
  7. Test Reporting & Dashboard’lar
  8. Bildirimler & İzleme
  9. Gerçek Proje: Complete CI/CD Setup
  10. Öğrenme Kaynakları

🎯 CI/CD Nedir ve QA için Neden Önemli?

Tanımlar

CI (Continuous Integration):

  • Geliştiriciler sık sık kod commit eder (günde birkaç kez)
  • Her commit otomatik olarak build edilir
  • Her commit’te otomatik testler çalışır
  • Hızlı geri bildirim (< 10 dakika)

CD (Continuous Delivery/Deployment):

  • Staging/production’a otomatik teslimat
  • Tüm testler geçtikten sonra
  • Minimum manuel müdahale

Geleneksel Süreç (CI/CD olmadan)

Gün 1: Geliştirici kod yazar
Gün 2-3: Kod branch'te bekler
Gün 4: Pull Request oluşturulur
Gün 5: Code review
Gün 6: Main'e merge
Gün 7: QA manuel test çalıştırır
Gün 8: Bug'lar bulunur
Gün 9: Düzeltmeler
Gün 10: Release

Sonuç: 10 gün, çok manuel iş, geç bug keşfi

CI/CD ile

Dakika 0: Geliştirici kod push eder
Dakika 1: CI otomatik olarak:
  - Projeyi build eder
  - Unit testleri çalıştırır
  - Integration testleri çalıştırır
  - E2E testleri çalıştırır
Dakika 10: Sonuçlar hazır
  ✅ Tüm testler geçti → staging'e otomatik deploy
  ❌ Testler başarısız → Slack bildirimi
  
Sonuç: 10 dakika, otomasyon, anında geri bildirim

CI/CD’de QA’in Rolü

Geleneksel QA Rolü:

  • ❌ Hazır build’leri bekler
  • ❌ Testleri manuel çalıştırır
  • ❌ Geliştirmeden sonra bug arar

Modern QA Engineer (SDET):

  • ✅ Otomatik testler oluşturur
  • ✅ Testleri CI/CD’ye entegre eder
  • ✅ Test stabilitesini izler
  • ✅ Shift-left testing (erken aşamalarda test)

🌳 QA için Git & GitHub

Temel Git Komutları

Kurulum:

# Kullanıcı yapılandırması
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# Repository başlatma
git init

# Mevcut repository'yi klonlama
git clone https://github.com/username/repo.git

Günlük çalışma:

# Durum kontrolü
git status

# Dosya ekleme
git add .                    # Tüm dosyalar
git add tests/login.spec.js  # Belirli dosya

# Commit
git commit -m "Add login tests"

# GitHub'a push
git push origin main

# Değişiklikleri çekme
git pull origin main

Branch’lerle çalışma:

# Yeni branch oluşturma
git checkout -b feature/add-payment-tests

# Branch'ler arası geçiş
git checkout main
git checkout feature/add-payment-tests

# Branch listesi
git branch

# Branch silme
git branch -d feature/add-payment-tests

# Branch birleştirme
git checkout main
git merge feature/add-payment-tests

QA için Git Workflow

Feature Branch Workflow:

# 1. Yeni testler için branch oluştur
git checkout -b feature/checkout-tests

# 2. Testleri yaz
# tests/checkout.spec.js

# 3. Sık sık commit et
git add tests/checkout.spec.js
git commit -m "Add checkout validation tests"

# 4. GitHub'a push et
git push origin feature/checkout-tests

# 5. GitHub'da Pull Request oluştur

# 6. Review sonrası - main'e merge

Commit Mesajı Best Practice’leri:

# ❌ Kötü
git commit -m "updates"
git commit -m "fix"
git commit -m "test"

# ✅ İyi
git commit -m "Add login tests for valid/invalid credentials"
git commit -m "Fix flaky test in checkout flow"
git commit -m "Update test data for payment methods"
git commit -m "Refactor Page Objects to use fixtures"

QA için Conventional Commits:

# Format: <type>: <description>

git commit -m "test: add E2E tests for user registration"
git commit -m "fix: resolve timeout issue in API tests"
git commit -m "refactor: improve Page Object structure"
git commit -m "docs: update README with test execution guide"
git commit -m "chore: update Playwright to v1.40"

Test Projeleri için .gitignore

.gitignore:

# Node modules
node_modules/
package-lock.json

# Test sonuçları
test-results/
playwright-report/
screenshots/
videos/
logs/
allure-results/
allure-report/

# Environment değişkenleri
.env
.env.local

# IDE
.vscode/
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Test verileri
test-data/local/

⚡ GitHub Actions: Sıfırdan Otomasyon

Neden GitHub Actions?

Avantajlar:

  • ✅ Public repository’ler için ücretsiz
  • ✅ Private için ayda 2000 dakika (free tier)
  • ✅ GitHub ile kutudan çıkan entegrasyon
  • ✅ Devasa workflow marketplace’i
  • ✅ Basit YAML sözdizimi

Temel Yapı

.github/workflows/tests.yml:

name: Automated Tests

# Ne zaman çalıştırılacak
on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]
  schedule:
    # Her gün 9:00 UTC'de çalıştır
    - cron: '0 9 * * *'
  workflow_dispatch: # Manuel tetikleme

# Ne çalıştırılacak
jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v3
    
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Run tests
      run: npm test

GitHub Actions’da Playwright Testleri

.github/workflows/playwright.yml:

name: Playwright Tests

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v3
    
    - uses: actions/setup-node@v3
      with:
        node-version: '18'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Install Playwright Browsers
      run: npx playwright install --with-deps
    
    - name: Run Playwright tests
      run: npx playwright test
    
    - name: Upload test results
      uses: actions/upload-artifact@v3
      if: always()
      with:
        name: playwright-report
        path: playwright-report/
        retention-days: 30
    
    - name: Upload screenshots
      uses: actions/upload-artifact@v3
      if: failure()
      with:
        name: screenshots
        path: screenshots/

Parallel Testing Matrix

Farklı tarayıcılarda paralel test çalıştırma:

name: Cross-Browser Testing

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        browser: [chromium, firefox, webkit]
        node-version: [16, 18, 20]
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Setup Node ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
    
    - name: Install dependencies
      run: npm ci
    
    - name: Install Playwright
      run: npx playwright install --with-deps ${{ matrix.browser }}
    
    - name: Run tests on ${{ matrix.browser }}
      run: npx playwright test --project=${{ matrix.browser }}

Hızlı Çalıştırma için Sharding

Testleri parçalara bölme:

name: Sharded Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        shard: [1, 2, 3, 4]
    
    steps:
    - uses: actions/checkout@v3
    
    - uses: actions/setup-node@v3
      with:
        node-version: '18'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Install Playwright
      run: npx playwright install --with-deps
    
    - name: Run shard ${{ matrix.shard }} of 4
      run: npx playwright test --shard=${{ matrix.shard }}/4

Environment Secrets

Secret’larla çalışma:

name: Tests with Secrets

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Run tests
      env:
        API_KEY: ${{ secrets.API_KEY }}
        DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
        BASE_URL: ${{ secrets.BASE_URL }}
      run: npm test

GitHub’da secret ekleme:

  1. Repo → Settings → Secrets and variables → Actions
  2. New repository secret
  3. Name: API_KEY, Value: your-secret-key

Başarılı Testlerden Sonra Deploy

Complete pipeline:

name: Test and Deploy

on:
  push:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v3
    
    - uses: actions/setup-node@v3
      with:
        node-version: '18'
    
    - name: Install and test
      run: |
        npm ci
        npm test
    
    # Sadece testler geçerse
  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: success()
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Deploy to staging
      run: |
        echo "Deploying to staging..."
        # Deploy script'iniz
    
    - name: Run smoke tests on staging
      run: npm run test:smoke

Bildirimler

Slack bildirimi:

name: Tests with Notifications

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v3
    - run: npm ci && npm test
    
    - name: Slack Notification on Success
      if: success()
      uses: rtCamp/action-slack-notify@v2
      env:
        SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
        SLACK_CHANNEL: qa-notifications
        SLACK_COLOR: good
        SLACK_MESSAGE: '✅ All tests passed!'
        SLACK_TITLE: Test Results
    
    - name: Slack Notification on Failure
      if: failure()
      uses: rtCamp/action-slack-notify@v2
      env:
        SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
        SLACK_CHANNEL: qa-notifications
        SLACK_COLOR: danger
        SLACK_MESSAGE: '❌ Tests failed! Check logs.'
        SLACK_TITLE: Test Results

🔧 Jenkins: Enterprise-level CI/CD

Neden Jenkins?

Jenkins ne zaman kullanılır:

  • ✅ Enterprise ortamlar
  • ✅ On-premise altyapı
  • ✅ Çok aşamalı karmaşık pipeline’lar
  • ✅ Legacy sistemlerle entegrasyon
  • ✅ Büyük takımlar

GitHub Actions ne zaman kullanılır:

  • ✅ Küçük-orta takımlar
  • ✅ Cloud-native yaklaşım
  • ✅ GitHub-centric workflow
  • ✅ Basit pipeline’lar

Jenkins Kurulumu

Docker yöntemi (en kolay):

# Jenkins'i indir ve çalıştır
docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

# Initial admin password'ü al
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

# http://localhost:8080 aç

Kurulumdan sonra:

  1. Admin password’ü gir
  2. Suggested plugins’i kur
  3. Admin user oluştur
  4. Jenkins’i kullanmaya başla!

Playwright için Jenkinsfile

Declarative Pipeline:

pipeline {
    agent any
    
    environment {
        BASE_URL = 'https://staging.example.com'
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main',
                    url: 'https://github.com/username/test-automation.git'
            }
        }
        
        stage('Install Dependencies') {
            steps {
                sh 'npm ci'
                sh 'npx playwright install --with-deps'
            }
        }
        
        stage('Run Tests') {
            steps {
                sh 'npx playwright test'
            }
        }
        
        stage('Publish Results') {
            steps {
                publishHTML([
                    reportName: 'Playwright Report',
                    reportDir: 'playwright-report',
                    reportFiles: 'index.html',
                    keepAll: true,
                    alwaysLinkToLastBuild: true
                ])
            }
        }
    }
    
    post {
        always {
            junit 'test-results/*.xml'
            archiveArtifacts artifacts: 'screenshots/**/*.png',
                           allowEmptyArchive: true
        }
        
        failure {
            emailext(
                subject: "❌ Tests Failed: ${env.JOB_NAME} - ${env.BUILD_NUMBER}",
                body: """
                    Build failed!
                    
                    Job: ${env.JOB_NAME}
                    Build: ${env.BUILD_NUMBER}
                    URL: ${env.BUILD_URL}
                """,
                to: 'qa-team@example.com'
            )
        }
        
        success {
            echo '✅ All tests passed!'
        }
    }
}

Multi-stage Pipeline

Farklı test türleri ile karmaşık pipeline:

pipeline {
    agent any
    
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        
        stage('Build') {
            steps {
                sh 'npm ci'
            }
        }
        
        stage('Unit Tests') {
            steps {
                sh 'npm run test:unit'
            }
        }
        
        stage('Integration Tests') {
            parallel {
                stage('API Tests') {
                    steps {
                        sh 'npm run test:api'
                    }
                }
                
                stage('Component Tests') {
                    steps {
                        sh 'npm run test:component'
                    }
                }
            }
        }
        
        stage('E2E Tests') {
            steps {
                sh 'npx playwright test'
            }
        }
        
        stage('Deploy to Staging') {
            when {
                branch 'main'
                expression { currentBuild.result == null || currentBuild.result == 'SUCCESS' }
            }
            steps {
                sh './deploy-staging.sh'
            }
        }
        
        stage('Smoke Tests on Staging') {
            when {
                branch 'main'
            }
            steps {
                sh 'npm run test:smoke'
            }
        }
    }
    
    post {
        always {
            publishHTML([
                reportName: 'Test Report',
                reportDir: 'playwright-report',
                reportFiles: 'index.html'
            ])
            
            junit 'test-results/**/*.xml'
        }
        
        failure {
            slackSend(
                channel: '#qa-notifications',
                color: 'danger',
                message: "❌ Build Failed: ${env.JOB_NAME} ${env.BUILD_NUMBER}"
            )
        }
        
        success {
            slackSend(
                channel: '#qa-notifications',
                color: 'good',
                message: "✅ Build Successful: ${env.JOB_NAME} ${env.BUILD_NUMBER}"
            )
        }
    }
}

QA için Jenkins Eklentileri

Essential Plugins:

# Jenkins UI üzerinden kurulum:
# Manage Jenkins → Manage Plugins → Available

1. HTML Publisher Plugin       # Test raporları
2. JUnit Plugin                # Test sonuçları
3. Slack Notification Plugin   # Bildirimler
4. Blue Ocean                  # Modern UI
5. Pipeline                    # Pipeline desteği
6. Git Plugin                  # Git entegrasyonu
7. Docker Plugin               # Docker entegrasyonu
8. Allure Plugin              # Güzel raporlar

Scheduled Tests (Cron)

Zamanlanmış test çalıştırma:

pipeline {
    agent any
    
    triggers {
        // Her gün 9:00'da
        cron('0 9 * * *')
        
        // Her saat
        // cron('0 * * * *')
        
        // Her Pazartesi 8:00'de
        // cron('0 8 * * 1')
    }
    
    stages {
        stage('Nightly Tests') {
            steps {
                sh 'npx playwright test --project=full-suite'
            }
        }
    }
}

🐳 Test Otomasyonu için Docker

Testler için Neden Docker?

Docker olmadan problemler:

  • ❌ “Works on my machine”
  • ❌ Environment bağımlılığı
  • ❌ Karmaşık CI kurulumu
  • ❌ Tutarsız tarayıcı versiyonları

Docker ile:

  • ✅ Tutarlı environment
  • ✅ Kolay kurulum
  • ✅ İzole çalıştırma
  • ✅ Environment versiyonlama

Playwright için Dockerfile

Dockerfile:

FROM mcr.microsoft.com/playwright:v1.40.0-focal

# Çalışma dizinini ayarla
WORKDIR /app

# Package dosyalarını kopyala
COPY package*.json ./

# Bağımlılıkları kur
RUN npm ci

# Test dosyalarını kopyala
COPY . .

# Varsayılan olarak testleri çalıştır
CMD ["npx", "playwright", "test"]

docker-compose.yml:

version: '3.8'

services:
  tests:
    build: .
    environment:
      - BASE_URL=https://staging.example.com
      - CI=true
    volumes:
      - ./test-results:/app/test-results
      - ./playwright-report:/app/playwright-report
      - ./screenshots:/app/screenshots

Testleri çalıştırma:

# Image build et
docker build -t my-tests .

# Testleri çalıştır
docker run --rm my-tests

# docker-compose ile çalıştır
docker-compose up --abort-on-container-exit

# Belirli testi çalıştır
docker run --rm my-tests npx playwright test tests/login.spec.js

Multi-stage Dockerfile (optimizasyon)

# Stage 1: Dependencies
FROM node:18-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --production

# Stage 2: Test dependencies
FROM mcr.microsoft.com/playwright:v1.40.0-focal AS test-deps
WORKDIR /app
COPY package*.json ./
RUN npm ci

# Stage 3: Runtime
FROM mcr.microsoft.com/playwright:v1.40.0-focal
WORKDIR /app

# Bağımlılıkları kopyala
COPY --from=test-deps /app/node_modules ./node_modules
COPY . .

# Testleri çalıştır
CMD ["npx", "playwright", "test"]

Jenkins’te Docker

Docker ile Jenkinsfile:

pipeline {
    agent {
        docker {
            image 'mcr.microsoft.com/playwright:v1.40.0-focal'
            args '-v $HOME/.npm:/root/.npm'
        }
    }
    
    stages {
        stage('Test') {
            steps {
                sh 'npm ci'
                sh 'npx playwright test'
            }
        }
    }
}

Integration Testler için Docker Compose

docker-compose.test.yml:

version: '3.8'

services:
  # Uygulamanız
  app:
    build: ../app
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=test
      - DB_HOST=db
    depends_on:
      - db
  
  # Veritabanı
  db:
    image: postgres:15
    environment:
      POSTGRES_DB: testdb
      POSTGRES_USER: testuser
      POSTGRES_PASSWORD: testpass
    ports:
      - "5432:5432"
  
  # Testler
  tests:
    build: .
    environment:
      - BASE_URL=http://app:3000
      - DB_URL=postgresql://testuser:testpass@db:5432/testdb
    depends_on:
      - app
      - db
    command: sh -c "sleep 5 && npx playwright test"

Çalıştırma:

docker-compose -f docker-compose.test.yml up --abort-on-container-exit

🔗 Testleri Pipeline’a Entegre Etme

CI/CD’de Test Piramidi

Pipeline Aşamaları:
┌─────────────────────────────────────────┐
│  1. Unit Tests (30 sn)                 │
│     ✓ Hızlı                            │
│     ✓ Bağımlılık yok                   │
│     ✓ Her commit'te çalış              │
├─────────────────────────────────────────┤
│  2. Integration Tests (2-5 dk)         │
│     ✓ API testleri                     │
│     ✓ Component testleri               │
│     ✓ Database testleri                │
├─────────────────────────────────────────┤
│  3. E2E Tests (10-15 dk)               │
│     ✓ Kritik kullanıcı akışları        │
│     ✓ Smoke testleri                   │
│     ✓ Visual regression                │
├─────────────────────────────────────────┤
│  4. Full Regression (30-60 dk)         │
│     ✓ Sadece nightly build'ler         │
│     ✓ Tüm test suite'leri              │
│     ✓ Birden fazla environment         │
└─────────────────────────────────────────┘

Test Parallelization

package.json scripts:

{
  "scripts": {
    "test": "playwright test",
    "test:unit": "jest",
    "test:api": "newman run postman-collection.json",
    "test:e2e": "playwright test tests/e2e",
    "test:smoke": "playwright test tests/smoke --grep @smoke",
    "test:parallel": "playwright test --workers=4",
    "test:headed": "playwright test --headed",
    "test:debug": "playwright test --debug"
  }
}

Parallelization ile GitHub Actions:

name: Parallel Tests

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        suite: [smoke, auth, checkout, products, admin]
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Setup Node
      uses: actions/setup-node@v3
      with:
        node-version: '18'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Run ${{ matrix.suite }} tests
      run: npx playwright test tests/${{ matrix.suite }}

Conditional Testing

Değişikliklere bağlı test çalıştırma:

name: Smart Testing

on: [push]

jobs:
  detect-changes:
    runs-on: ubuntu-latest
    outputs:
      frontend: ${{ steps.filter.outputs.frontend }}
      backend: ${{ steps.filter.outputs.backend }}
    
    steps:
    - uses: actions/checkout@v3
    
    - uses: dorny/paths-filter@v2
      id: filter
      with:
        filters: |
          frontend:
            - 'src/frontend/**'
            - 'tests/e2e/**'
          backend:
            - 'src/backend/**'
            - 'tests/api/**'
  
  test-frontend:
    needs: detect-changes
    if: needs.detect-changes.outputs.frontend == 'true'
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - run: npm ci && npm run test:e2e
  
  test-backend:
    needs: detect-changes
    if: needs.detect-changes.outputs.backend == 'true'
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - run: npm ci && npm run test:api

📊 Test Reporting & Dashboard’lar

Playwright HTML Reporter

playwright.config.js:

export default {
    reporter: [
        ['html', { 
            outputFolder: 'playwright-report',
            open: 'never' 
        }],
        ['json', { 
            outputFile: 'test-results.json' 
        }],
        ['junit', { 
            outputFile: 'junit-results.xml' 
        }],
        ['list'] // Console output
    ],
};

CI’da raporları görüntüleme:

# GitHub Actions
- name: Upload HTML report
  uses: actions/upload-artifact@v3
  if: always()
  with:
    name: playwright-report
    path: playwright-report/
    retention-days: 30

Allure Reports

En güzel raporlar!

Kurulum:

npm install --save-dev @playwright/test allure-playwright

playwright.config.js:

export default {
    reporter: [
        ['allure-playwright', {
            detail: true,
            outputFolder: 'allure-results',
            suiteTitle: false
        }]
    ],
};

Rapor oluşturma:

# Allure CLI'ı kur
npm install -g allure-commandline

# Testleri çalıştır
npx playwright test

# Rapor oluştur
allure generate allure-results -o allure-report --clean

# Raporu aç
allure open allure-report

🎓 Öğrenme Kaynakları

📺 YouTube Kanalları

CI/CD:

  1. TechWorld with Nana

    • YouTube
    • ⭐⭐⭐⭐⭐ En iyi DevOps kanalı
    • Jenkins, Docker, Kubernetes
  2. FreeCodeCamp - Jenkins Full Course

    • YouTube
    • 4+ saat ücretsiz içerik
  3. Automation Step by Step

Docker:

  1. Docker - Official Channel

  2. Fireship - Docker in 100 Seconds


💻 Online Kurslar

GitHub Actions:

  1. “GitHub Actions - The Complete Guide” - Academind

  2. GitHub Learning Lab (FREE!)

Jenkins:

  1. “Jenkins From Zero To Hero” - Udemy
    • 💰 $13.99
    • Complete Jenkins guide
    • 💰 Get Course

Docker:

  1. “Docker Mastery” - Bret Fisher

    • 💰 Udemy: $12.99
    • 19+ saat
    • Industry standard
    • 💰 Get Course
  2. “Docker for QA Engineers” - Test Automation University


📚 Kitaplar

1. “Continuous Delivery” - Jez Humble, David Farley

  • CI/CD kutsal kitabı
  • Herkes için must-read
  • 💰 Amazon - $45

2. “The Phoenix Project” - Gene Kim

3. “Docker Deep Dive” - Nigel Poulton


🏆 Pratik Kaynaklar

1. Play with Docker

2. Katacoda/KillerCoda

  • 🆓 İnteraktif senaryolar
  • Jenkins, Docker, Kubernetes
  • killercoda.com

3. GitHub Actions Marketplace


🎓 Sertifikalar

1. GitHub Actions Certification

2. Jenkins Engineer Certification

3. Docker Certified Associate


✅ Checklist: CI/CD Hazırlığı

Git/GitHub:

  • Git workflow’u anlıyorum
  • Branch’lerle çalışabiliyorum
  • Pull Request oluşturabiliyorum
  • Code review yapmayı biliyorum
  • Git conflict’lerini çözebiliyorum

GitHub Actions:

  • Temel workflow yazdım
  • Matrix strategy yapılandırdım
  • Secret’larla çalıştım
  • Artifact’ları kullanmayı biliyorum
  • Bildirimleri yapılandırdım

Jenkins:

  • Jenkins’i lokal kurdum
  • Jenkinsfile yazdım
  • Jenkins pipeline yapılandırdım
  • Jenkins plugin’lerini biliyorum
  • Scheduled build’leri yapılandırdım

Docker:

  • Dockerfile yazdım
  • docker-compose oluşturdum
  • Container’da test çalıştırdım
  • Docker networking anlıyorum
  • Docker volume’larla çalıştım

Reporting:

  • HTML raporları yapılandırdım
  • Allure entegre ettim
  • Custom dashboard oluşturdum
  • Bildirimleri yapılandırdım

Genel:

  • CI/CD prensiplerini anlıyorum
  • Test piramidini açıklayabilirim
  • Best practice’leri biliyorum
  • GitHub’da CI/CD’li projem var

📍 Sırada Ne Var?

Bir sonraki makalede Performance Testing konusunu ele alacağız:

  • Load testing için JMeter
  • Modern performance testing için K6
  • Gatling advanced senaryolar
  • Performance monitoring
  • Sonuç analizi

Sonraki makale: Makale 6: Performance Testing


💡 Apple Mülakatı için Son Tavsiye

Apple’ın CI/CD’de değer verdiği şeyler:

  1. Automation First

    • Her şey otomatize edilmeli
    • Minimum manuel adım
  2. Fast Feedback

    • Testler hızlı (< 10 dk)
    • Parallel execution
    • Smart test selection
  3. Reliability

    • Stable testler (flaky test yok)
    • Retry mekanizmaları
    • Net hata raporlama
  4. Observability

    • İyi dashboard’lar
    • Metrik takibi
    • Trend analizi

Mülakatta gösterin:

  • ✅ CI/CD setup’lı GitHub repo
  • ✅ Jenkinsfile örnekleri
  • ✅ Docker containerized testler
  • ✅ Test raporları/dashboard’lar
  • ✅ Bildirim kurulumu

Açıklamaya hazır olun:

  • Neden bu yaklaşımı seçtiniz
  • Flaky testleri nasıl çözüyorsunuz
  • Çalıştırma süresini nasıl optimize ediyorsunuz
  • Kaliteyi nasıl izliyorsunuz

Bu makale faydalı oldu mu? 👏

Sorularınız mı var? Yorumlara yazın!


Yazar: AAnnayev — Senior SDET Tags: #CICD #Jenkins #GitHubActions #Docker #DevOps #Apple #QA


P.S. CI/CD’li tam proje kodu: github.com/yourname/cicd-test-framework

P.P.S. Finale sadece 2 makale kaldı! Makale 6 (Performance) ve Makale 7 (Apple Job)! 🚀