Makale 5: QA Mühendisleri için CI/CD: Manuel Testten Sürekli Teste
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

📍 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
- CI/CD Nedir ve QA için Neden Önemli
- QA için Git & GitHub
- GitHub Actions: Sıfırdan Otomasyon
- Jenkins: Enterprise-level CI/CD
- Test Otomasyonu için Docker
- Testleri Pipeline’a Entegre Etme
- Test Reporting & Dashboard’lar
- Bildirimler & İzleme
- Gerçek Proje: Complete CI/CD Setup
- Öğ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:
- Repo → Settings → Secrets and variables → Actions
- New repository secret
- 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:
- Admin password’ü gir
- Suggested plugins’i kur
- Admin user oluştur
- 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:
-
TechWorld with Nana
- YouTube
- ⭐⭐⭐⭐⭐ En iyi DevOps kanalı
- Jenkins, Docker, Kubernetes
-
FreeCodeCamp - Jenkins Full Course
- YouTube
- 4+ saat ücretsiz içerik
-
Automation Step by Step
- YouTube
- QA için Jenkins
Docker:
💻 Online Kurslar
GitHub Actions:
-
“GitHub Actions - The Complete Guide” - Academind
- 💰 Udemy: $12.99
- 6+ saat
- 💰 Get Course - 85% OFF
-
GitHub Learning Lab (FREE!)
- 🆓 İnteraktif tutorial’lar
- GitHub Skills
Jenkins:
- “Jenkins From Zero To Hero” - Udemy
- 💰 $13.99
- Complete Jenkins guide
- 💰 Get Course
Docker:
-
“Docker Mastery” - Bret Fisher
- 💰 Udemy: $12.99
- 19+ saat
- Industry standard
- 💰 Get Course
-
“Docker for QA Engineers” - Test Automation University
- 🆓 FREE
- TAU - Docker Course
📚 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
- DevOps romanı
- Kültürü anlama
- 💰 Amazon - $18
3. “Docker Deep Dive” - Nigel Poulton
- Kapsamlı Docker rehberi
- 💰 Amazon - $25
🏆 Pratik Kaynaklar
1. Play with Docker
- 🆓 Ücretsiz Docker playground
- labs.play-with-docker.com
2. Katacoda/KillerCoda
- 🆓 İnteraktif senaryolar
- Jenkins, Docker, Kubernetes
- killercoda.com
3. GitHub Actions Marketplace
- 10,000+ hazır action
- github.com/marketplace
🎓 Sertifikalar
1. GitHub Actions Certification
- $99
- Resmi sertifikasyon
- GitHub Certifications
2. Jenkins Engineer Certification
- $150
- CloudBees University
3. Docker Certified Associate
- $195
- Docker Certification
✅ 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:
-
Automation First
- Her şey otomatize edilmeli
- Minimum manuel adım
-
Fast Feedback
- Testler hızlı (< 10 dk)
- Parallel execution
- Smart test selection
-
Reliability
- Stable testler (flaky test yok)
- Retry mekanizmaları
- Net hata raporlama
-
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)! 🚀