🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

كيفية إعداد خط أنابيب CI/CD باستخدام إجراءات GitHub في عام 2026: الدليل الكامل

⏱️2 min read  ·  374 words

إجراءات جيثب هي منصة CI/CD الأكثر شهرة في عام 2026 — وهي مدمجة في GitHub، مع سوق ضخم من الإجراءات المعدة مسبقًا. يبني هذا الدليل مسارًا كاملاً من الاختبار إلى النشر، بالكامل في ملفات YAML الموجودة في الريبو الخاص بك.

كيف تعمل إجراءات جيثب

سير العمل موجود في.github/workflows/*.yml. يتم تشغيل كل سير عمل على الأحداث (طلب الدفع والسحب والجدول الزمني) ويحتوي علىوظائف التي تعمل علىالعدائين (الأجهزة الافتراضية المستضافة على GitHub). وظائف تحتوي علىالخطوات — إما أوامر shell أو قابلة لإعادة الاستخدامافعال.

سير عمل CI الأساسي

# .github/workflows/ci.yml
name: CI

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

jobs:
  test:
    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
      - run: npm test
      - run: npm run build

بناءات المصفوفة (اختبار الإصدارات المتعددة)

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node: [18, 20, 22]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
      - run: npm ci
      - run: npm test
# Runs 9 combinations (3 OS x 3 Node versions) in parallel

تبعيات التخزين المؤقت

steps:
  - uses: actions/checkout@v4

  # setup-node has built-in caching
  - uses: actions/setup-node@v4
    with:
      node-version: '20'
      cache: 'npm'   # caches ~/.npm automatically

  # Or cache manually for other tools
  - uses: actions/cache@v4
    with:
      path: |
        ~/.cache/pip
        .venv
      key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}

بناء ودفع صور دوكر

name: Build and Push

on:
  push:
    branches: [main]

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - uses: docker/build-push-action@v6
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:latest
            ghcr.io/${{ github.repository }}:${{ github.sha }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

النشر مع البيئات والموافقات

jobs:
  deploy:
    runs-on: ubuntu-latest
    needs: [test]           # only deploy if tests pass
    environment:
      name: production      # can require manual approval in repo settings
      url: https://example.com
    steps:
      - uses: actions/checkout@v4

      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.PROD_HOST }}
          username: ${{ secrets.DEPLOY_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /app
            docker compose pull
            docker compose up -d

إدارة الأسرار

مخزن الأسرار فيإعدادات الريبو، ثم الأسرار والمتغيرات، ثم الإجراءات. قم بالإشارة إليها كـ${{ secrets.NAME }}. إنهم ملثمون في جذوع الأشجار ولم يتم كشفهم أبدًا. استخدم الأسرار الخاصة بالبيئة للتدريج مقابل الإنتاج.

steps:
  - run: ./deploy.sh
    env:
      API_KEY: ${{ secrets.API_KEY }}
      DATABASE_URL: ${{ secrets.DATABASE_URL }}

سير العمل القابل لإعادة الاستخدام والإجراءات المركبة

# Call a reusable workflow to avoid duplication
jobs:
  call-shared:
    uses: ./.github/workflows/shared-test.yml
    with:
      node-version: '20'
    secrets: inherit

# shared-test.yml declares:
# on:
#   workflow_call:
#     inputs:
#       node-version:
#         type: string

نصائح التحسين

  • استخدمneeds: للتحكم في ترتيب الوظائف وتشغيل الوظائف المستقلة بالتوازي
  • تبعيات ذاكرة التخزين المؤقت – أكبر تسريع لمعظم خطوط الأنابيب
  • إلغاء عمليات التشغيل القديمة: concurrency: { group: ${{ github.ref }}, cancel-in-progress: true }
  • استخدم مرشحات المسار: قم بتشغيل سير العمل فقط عندما تتغير الملفات ذات الصلة
  • إصدارات إجراء التثبيت (@v4) للاستقرار والأمان

الأسئلة المتداولة

س: GitHub Actions vs GitLab CI vs Jenkins؟
ج: إجراءات GitHub إذا كانت التعليمات البرمجية الخاصة بك موجودة على GitHub – تكامل عميق وسوق ضخم. GitLab CI للتعليمات البرمجية المستضافة على GitLab. Jenkins لتحقيق أقصى قدر من التحكم/الاستضافة الذاتية أو احتياجات المؤسسة المعقدة. الإجراءات هي الأسهل لمشاريع GitHub.

س: هل إجراءات GitHub مجانية؟
ج: تحصل عمليات إعادة الشراء العامة على دقائق مجانية غير محدودة. تحصل اتفاقيات إعادة الشراء الخاصة على حصة مجانية شهرية، ثم تدفع بالدقيقة. بالنسبة لمعظم المشاريع الصغيرة ومفتوحة المصدر، فهي مجانية بشكل فعال.

س: كيف يمكنني تسريع سير العمل البطيء؟
ج: تبعيات ذاكرة التخزين المؤقت (الفوز الأكبر)، تشغيل المهام بالتوازي معneeds:، استخدم مرشحات المسار لتخطي عمليات التشغيل غير ذات الصلة، وإلغاء عمليات التشغيل القديمة مع مجموعات التزامن. الملف التعريفي للخطوات الأبطأ أولاً.

س: كيف أطلب الموافقة قبل نشر الإنتاج؟
ج: استخدم بيئات GitHub مع المراجعين المطلوبين. تكوينproduction البيئة في إعدادات الريبو للمطالبة بالموافقة اليدوية – تتوقف مهمة النشر مؤقتًا حتى يؤكد المراجع المعتمد.

س: هل يمكنني تشغيل مهام سير العمل وفقًا لجدول زمني؟
ج: نعم – استخدمon: schedule: - cron: '0 0 * * *' لعمليات التشغيل المجدولة (الإنشاءات الليلية، ومهام التنظيف، والفحوصات الدورية). يتحكم بناء جملة Cron في التوقيت.

الخلاصة

تتيح إجراءات GitHub إمكانية الوصول إلى CI/CD مع كل ما هو محدد في YAML في الريبو الخاص بك. يغطي هذا الدليل الأساسيات — سير عمل CI مع إنشاءات المصفوفة، والتخزين المؤقت للتبعية، وبناء صور Docker، والنشر مع موافقات البيئة. إن السوق الضخم للإجراءات المعدة مسبقًا يعني أنك نادرًا ما تكتب الأشياء من الصفر. ابدأ بسير عمل اختباري بسيط، وأضف مهام البناء والنشر بشكل متزايد، وقم بالتخزين المؤقت بقوة لتحقيق السرعة، واستخدم البيئات لبوابة عمليات نشر الإنتاج. إنه أسرع طريق للحصول على CI/CD احترافي للمشروعات التي تستضيفها GitHub.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা