خط أنابيب CI/CD جيد التصميم هو العمود الفقري لتسليم البرمجيات الحديث. يغطّي هذا الدليل كيفية بناء خطوط أنابيب سريعة وموثوقة وآمنة.
مبادئ تصميم خط الأنابيب
- افشل بسرعة: شغّل الفحوصات السريعة أولاً
- وازِ المهام: شغّل المهام المستقلة بالتوازي
- خزّن مؤقتاً بحزم: لا تُعِد بناء ما لم يتغيّر
- أبقِه قابلاً للتكرار: نفس المدخل = نفس المخرج
مثال: خط أنابيب GitHub Actions
# .github/workflows/ci.yml
name: CI/CD Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run lint
test:
runs-on: ubuntu-latest
needs: lint
strategy:
matrix:
node: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: \${{ matrix.node }}
cache: 'npm'
- run: npm ci
- run: npm test
build:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: build
path: dist/
deploy:
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/main'
environment: production
steps:
- uses: actions/download-artifact@v4
with:
name: build
- name: Deploy to production
run: ./scripts/deploy.sh
استراتيجيات الاختبار
هرم الاختبار
/\\
/ \\ E2E Tests (few)
/----\\
/ \\ Integration Tests (some)
/--------\\
/ \\ Unit Tests (many)
/--------------\\
تنفيذ الاختبارات بالتوازي
# Split tests across multiple runners
test:
parallel: 4
script:
- npm run test -- --shard=\$CI_NODE_INDEX/\$CI_NODE_TOTAL
استراتيجيات النشر
النشر الأزرق-الأخضر (Blue-Green)
1. Deploy to "green" environment
2. Run smoke tests
3. Switch load balancer to "green"
4. Keep "blue" as rollback target
الإصدارات التجريبية (Canary)
1. Deploy to canary (1-5% of traffic)
2. Monitor error rates and latency
3. Gradually increase traffic
4. Full rollout if metrics are healthy
أعلام الميزات (Feature Flags)
// Deploy code, control visibility with flags
if (featureFlags.isEnabled('new-checkout')) {
return <NewCheckout />;
}
return <LegacyCheckout />;
آليات التراجع (Rollback)
احتفظ دائماً بخطة تراجع:
# Kubernetes rollback
kubectl rollout undo deployment/my-app
# Docker rollback to previous tag
docker tag my-app:previous my-app:latest
docker push my-app:latest
# Database migrations
php artisan migrate:rollback --step=1
المراقبة في الإنتاج
بعد النشر، راقب هذه المقاييس:
- معدّل الأخطاء: يجب ألا يرتفع فجأةً بعد النشر
- الكمون: أزمنة الاستجابة p50 و p95 و p99
- الإنتاجية: الطلبات في الثانية
- استخدام الموارد: المعالج، الذاكرة، الاتصالات
# Prometheus alert for deploy health
- alert: HighErrorRateAfterDeploy
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) > 0.01
for: 2m
annotations:
summary: "Error rate above 1% after deployment"
خط أنابيب CI/CD جيد يمنحك الثقة للنشر بشكل متكرّر وآمن. استثمر فيه — سيشكرك أنت المستقبلي.
التعليقات (0)
اترك تعليقًا
لا توجد تعليقات بعد. كن أول من يشارك أفكاره!