DevOps 3 دقيقة للقراءة 1,179 مشاهدات

تصميم خطوط CI/CD: من إيداع الكود إلى الإنتاج في دقائق

ابنِ خطوط CI/CD فعّالة تنقل كودك من الإيداع إلى الإنتاج بأمان وسرعة. تعلّم عن استراتيجيات الاختبار وأنماط النشر.

DevOps pipeline visualization

خط أنابيب CI/CD جيد التصميم هو العمود الفقري لتسليم البرمجيات الحديث. يغطّي هذا الدليل كيفية بناء خطوط أنابيب سريعة وموثوقة وآمنة.

مبادئ تصميم خط الأنابيب

  1. افشل بسرعة: شغّل الفحوصات السريعة أولاً
  2. وازِ المهام: شغّل المهام المستقلة بالتوازي
  3. خزّن مؤقتاً بحزم: لا تُعِد بناء ما لم يتغيّر
  4. أبقِه قابلاً للتكرار: نفس المدخل = نفس المخرج

مثال: خط أنابيب 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 جيد يمنحك الثقة للنشر بشكل متكرّر وآمن. استثمر فيه — سيشكرك أنت المستقبلي.

مشاركة هذه المقالة:
ES
كتبه

Edrees Salih

مهندس برمجيات متكامل يتمتع بخبرة 9 سنوات. شغوف ببناء حلول قابلة للتطوير ومشاركة المعرفة مع مجتمع المطورين.

عرض الملف الشخصي

التعليقات (0)

اترك تعليقًا

لن يتم نشر بريدك الإلكتروني.

لا توجد تعليقات بعد. كن أول من يشارك أفكاره!

مقالات ذات صلة

مقالات ذات صلة

هل تحتاج مساعدة في مشروعك؟

احجز استشارة مجانية لمدة 30 دقيقة لمناقشة تحدياتك التقنية واستكشاف الحلول معًا.