الرئيسية قاعدة المعرفة الشبكات والاتصالات CI/CD: التكامل والنشر المستمر للبرامج الصناعية
الشبكات والاتصالات

CI/CD: التكامل والنشر المستمر للبرامج الصناعية

ما هو CI/CD ولماذا يهم البرامج الصناعية؟

CI/CD اختصار لـ التكامل المستمر والنشر المستمر. يؤتمت عملية البناء والاختبار والنشر في كل مرة يدفع فيها مطور تغييرات في الكود.

في البرمجيات الصناعية، النشر اليدوي محفوف بالمخاطر. الإنسان قد ينسى خطوة أو ينشر إصداراً خاطئاً أو يتخطى الاختبارات تحت الضغط. CI/CD ينشئ خط أنابيب آلي ينفذ نفس الخطوات في كل مرة بشكل متسق وموثوق. كل دفع يُطلق تجميعاً واختباراً، فقط الكود الناجح يُنشر، وسجل التدقيق يُظهر بالضبط ما تغيّر ومتى وبواسطة من.

GitHub Actions: أول خط أنابيب

GitHub Actions منصة CI/CD مدمجة في GitHub. تُعرَّف خطوط الأنابيب في ملفات YAML داخل .github/workflows/.

# .github/workflows/ci.yml
name: Factory Monitor CI
on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo build --release

كل سير عمل يحتاج مُحفّز (on)، وظيفة واحدة أو أكثر، وخطوات داخل كل وظيفة.

مرحلة البناء: تجميع وإنشاء الصورة

مرحلة البناء تُجمّع تطبيق Rust وتنشئ صورة Docker:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - run: cargo build --release
      - run: |
          docker build -t factory-monitor:${{ github.sha }} .
          docker tag factory-monitor:${{ github.sha }} factory-monitor:latest
      - run: |
          echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
          docker tag factory-monitor:latest ghcr.io/${{ github.repository }}/factory-monitor:latest
          docker push ghcr.io/${{ github.repository }}/factory-monitor:latest

خطوة التخزين المؤقت تُسرّع البناء بشكل ملحوظ بإعادة استخدام الاعتمادات المُحمّلة سابقاً.

مرحلة الاختبار: اختبارات تلقائية

خطأ في نظام مراقبة المصنع يعني تنبيهات مفقودة وأضرار بالمعدات. اختبر قبل النشر:

  test:
    runs-on: ubuntu-latest
    needs: build
    services:
      surrealdb:
        image: surrealdb/surrealdb:v2.1.4
        ports:
          - 8000:8000
        options: >-
          --health-cmd "curl -f http://localhost:8000/health"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo test --lib
      - run: cargo test --test '*'
        env:
          DATABASE_URL: ws://localhost:8000
      - run: cargo clippy -- -D warnings
      - run: cargo fmt --check

كتلة services تُشغّل نسخة SurrealDB حقيقية لاختبارات التكامل.

مرحلة النشر: نشر تلقائي على VPS

بعد نجاح الاختبارات، انشر الإصدار الجديد عبر SSH:

  deploy:
    runs-on: ubuntu-latest
    needs: test
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.VPS_HOST }}
          username: ${{ secrets.VPS_USER }}
          key: ${{ secrets.VPS_SSH_KEY }}
          script: |
            cd /opt/factory-monitor
            docker compose pull
            docker compose up -d --remove-orphans
            sleep 10
            curl -f http://localhost:8080/health || exit 1

خزّن الأسرار في GitHub تحت Settings > Secrets and Variables > Actions: VPS_HOST، VPS_USER، VPS_SSH_KEY، وREGISTRY_TOKEN.

مثال عملي: خط أنابيب كامل لتطبيق Rust

إليك سير العمل الكامل الذي يجمع جميع المراحل:

name: Factory Monitor Pipeline
on:
  push:
    branches: [main]
env:
  CARGO_TERM_COLOR: always
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo fmt --check
      - run: cargo clippy -- -D warnings
  test:
    runs-on: ubuntu-latest
    needs: check
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - run: cargo test --all
  deploy:
    runs-on: ubuntu-latest
    needs: test
    steps:
      - uses: actions/checkout@v4
      - name: Build and push
        run: |
          docker build -t factory-monitor:latest .
          echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
          docker push ghcr.io/${{ github.repository }}/factory-monitor:latest
      - uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.VPS_HOST }}
          username: ${{ secrets.VPS_USER }}
          key: ${{ secrets.VPS_SSH_KEY }}
          script: |
            cd /opt/factory-monitor
            docker compose pull && docker compose up -d

الخلاصة

CI/CD يؤتمت المسار من تغيير الكود إلى نشر الإنتاج. GitHub Actions يوفر منصة مجانية ومدمجة لمشاريع Rust. يتكون خط الأنابيب من ثلاث مراحل: البناء (التجميع وإنشاء الصور)، الاختبار (تشغيل الفحوصات الآلية)، والنشر (الدفع إلى خادم الإنتاج). في الدرس القادم، ستتعلم المراقبة باستخدام Prometheus وGrafana لمتابعة تطبيقاتك المنشورة في الوقت الفعلي.

CI-CD GitHub-Actions pipeline automated-testing deployment DevOps التكامل المستمر النشر المستمر خط الأنابيب الاختبار التلقائي التطوير الأتمتة