0Pricing
Azure Fundamentals · درس

GitHub Actions على Azure

كرّر سير عمل CI/CD باستخدام GitHub Actions مع الإجراء azure/webapps-deploy، وتعرّف على الحالات التي يُختار فيها GitHub Actions بدلًا من Azure Pipelines.

GitHub Actions على Azure درس مجاني في Azure Fundamentals على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Azure Fundamentals، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.

ما المقصود بـ GitHub Actions؟

تُعد GitHub Actions منصة GitHub المدمجة للتكامل المستمر والنشر المستمر والأتمتة. تُعرَّف مسارات العمل في ملفات YAML المخزنة في الدليل .github/workflows/ ضمن مستودعك، ويتم تشغيلها استجابةً لأحداث GitHub — مثل عمليات الدفع وطلبات السحب والإصدارات وغير ذلك. تتكامل GitHub Actions بعمق مع منظومة GitHub (المشكلات وطلبات السحب والحزم وفحص الأمان)، وتوفر سوقًا غنيًا بـإجراءات المجتمع لمهام مثل الإنشاء والاختبار والنشر إلى Azure.

بنية مسار عمل GitHub Actions

يحتوي ملف مسار عمل GitHub Actions على ثلاثة أقسام عليا. يحدّد on أحداث التشغيل. ويضبط env متغيرات البيئة العامة. ويحدّد jobs مهمة واحدة أو أكثر، تعمل كل منها على runner (مستضاف من GitHub أو مستضاف ذاتيًا). تحتوي كل مهمة على steps — إما run (برنامج نصي للصدفة) أو uses (إجراء مُنشأ مسبقًا). تعمل المهام بالتوازي افتراضيًا؛ استخدم needs لإنشاء تبعيات تسلسلية.

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

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

env:
  NODE_VERSION: '18.x'

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: ${{ env.NODE_VERSION }}
    - run: npm ci
    - run: npm test

المصادقة على Azure من GitHub Actions

الطريقة الموصى بها لمصادقة GitHub Actions مع Azure هي OpenID Connect (OIDC) — إذ تُصدر رموزًا قصيرة الأجل من دون تخزين أسرار طويلة الأجل في GitHub. اضبط بيانات اعتماد هوية متحدة على تسجيل تطبيق Azure أو هوية مُدارة، وامنحها الثقة لمستودع GitHub وفرعه. استخدم الإجراء azure/login@v2 لتبادل رمز GitHub OIDC مقابل رمز وصول إلى Azure — ولا حاجة إلى أسرار عميل في GitHub Secrets.

# Configure OIDC federated credential in Azure
az ad app federated-credential create \
  --id <AppRegistrationObjectId> \
  --parameters '{
    "name": "github-oidc",
    "issuer": "https://token.actions.githubusercontent.com",
    "subject": "repo:myorg/myrepo:ref:refs/heads/main",
    "audiences": ["api://AzureADTokenExchange"]
  }'

# In the workflow: login via OIDC
# permissions:
#   id-token: write
#   contents: read
# - uses: azure/login@v2
#   with:
#     client-id: ${{ vars.AZURE_CLIENT_ID }}
#     tenant-id: ${{ vars.AZURE_TENANT_ID }}
#     subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}

النشر إلى Azure App Service

ينشر الإجراء azure/webapps-deploy@v3 التعليمات البرمجية أو صورة حاوية إلى Azure App Service. ويتولى نشر الفتحات، والنشر القائم على الحزم، ونشر صور Docker. اقرنه بـ azure/login@v2 للمصادقة. يمكنك استهداف فتحة تدريج، وتشغيل اختبارات دخان، ثم تبديل الفتحة باستخدام الإجراء azure/CLI@v2 الذي يشغّل أمر تبديل الفتحات — وبذلك تحاكي نمط النشر الأزرق-الأخضر في Azure Pipelines بالكامل داخل GitHub Actions.

# .github/workflows/deploy.yml
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
    - uses: actions/checkout@v4

    - uses: azure/login@v2
      with:
        client-id: ${{ vars.AZURE_CLIENT_ID }}
        tenant-id: ${{ vars.AZURE_TENANT_ID }}
        subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}

    - name: Build and zip app
      run: npm ci && npm run build && zip -r app.zip dist/

    - uses: azure/webapps-deploy@v3
      with:
        app-name: myUniqueWebApp
        slot-name: staging
        package: app.zip

النشر إلى Azure Kubernetes Service

انشر إلى AKS من GitHub Actions باستخدام الإجراء azure/k8s-deploy@v5. يستخدم هذا الإجراء kubectl apply لنشر البيانات التعريفية، ويجري استبدال الصور (باستبدال وسم الصورة بوسم الإنشاء الحالي)، ويراقب صحة عملية الطرح. يضبط الإجراء azure/aks-set-context@v4 بيانات اعتماد kubectl من خلال جلب kubeconfig الخاص بالمجموعة باستخدام جلسة Azure المصادق عليها.

jobs:
  deploy-aks:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
    - uses: actions/checkout@v4
    - uses: azure/login@v2
      with:
        client-id: ${{ vars.AZURE_CLIENT_ID }}
        tenant-id: ${{ vars.AZURE_TENANT_ID }}
        subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}

    - uses: azure/aks-set-context@v4
      with:
        resource-group: MyRG
        cluster-name: myAKSCluster

    - uses: azure/k8s-deploy@v5
      with:
        namespace: production
        manifests: k8s/
        images: 'mycontainerregistry.azurecr.io/myapp:${{ github.sha }}'

أسرار GitHub ومتغيراته

خزّن القيم الحساسة في GitHub Secrets — وهي قيم مشفّرة يمكن الوصول إليها بصيغة ${{ secrets.SECRET_NAME }} في مسارات العمل. ضع إعدادات التهيئة غير الحساسة في GitHub Variables — ويمكن الوصول إليها بصيغة ${{ vars.VARIABLE_NAME }}. يمكن تحديد نطاق كليهما على مستوى المستودع أو البيئة أو المؤسسة. استخدم environments في GitHub Actions لإضافة قواعد حماية (المراجعون المطلوبون وفروع النشر) على نحو مشابه لبيئات Azure DevOps.

# Reference secrets and variables in a workflow
steps:
- name: Configure app settings
  uses: azure/CLI@v2
  with:
    inlineScript: |
      az webapp config appsettings set \
        --name myUniqueWebApp \
        --resource-group MyRG \
        --settings \
          DATABASE_URL='${{ secrets.DATABASE_URL }}' \
          API_VERSION='${{ vars.API_VERSION }}'

قواعد حماية البيئة

تضيف Environments في GitHub Actions (التي تُضبط من الإعدادات Settings → Environments في المستودع) بوابات نشر مشابهة لبيئات Azure DevOps. يمكنك طلب required reviewers الذين يجب أن يوافقوا قبل تشغيل مهمة تستهدف البيئة، وتقييد عمليات النشر على specific branches (بحيث لا يمكن إلا لـ main النشر إلى Production)، وإضافة wait timers لتأخير عمليات النشر. تتوقف المهام التي تستهدف بيئة محمية مؤقتًا إلى أن تُستوفى جميع قواعد الحماية.

# Workflow job targeting a protected GitHub environment
jobs:
  deploy-production:
    runs-on: ubuntu-latest
    environment:
      name: Production           # Must have 2 approvers in GitHub settings
      url: https://myapp.contoso.com
    needs: deploy-staging
    steps:
    - uses: azure/login@v2
      with:
        client-id: ${{ vars.AZURE_CLIENT_ID }}
        tenant-id: ${{ vars.AZURE_TENANT_ID }}
        subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
    - uses: azure/webapps-deploy@v3
      with:
        app-name: myUniqueWebApp
        package: app.zip

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

تجنب تكرار منطق CI/CD عبر المستودعات باستخدام ميزتين في GitHub Actions. تتيح مسارات العمل القابلة لإعادة الاستخدام تعريف مسار عمل في مستودع واحد واستدعاءه من مسارات العمل في مستودعات أخرى باستخدام uses: myorg/shared-workflows/.github/workflows/deploy.yml@main. وتجمع الإجراءات المركبة خطوات متعددة في إجراء واحد مخزن في مستودع، ويمكن إعادة استخدامه باستخدام uses: myorg/my-actions/deploy@v1. تعزز كلتا الميزتين مبادئ DRY عبر مسارات CI/CD في مؤسستك.

# Call a reusable workflow from another workflow
jobs:
  deploy:
    uses: myorg/shared-workflows/.github/workflows/deploy-appservice.yml@main
    with:
      app-name: myUniqueWebApp
      slot-name: staging
      package-path: dist/
    secrets:
      AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
      AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
      AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

GitHub Actions مقابل Azure Pipelines: متى تختار كلًّا منهما

اختر GitHub Actions عندما يكون رمزك مستضافًا على GitHub، أو عندما يفضّل فريقك واجهة GitHub، أو عندما تريد تكاملًا وثيقًا مع فحوصات طلبات السحب وفحص التعليمات البرمجية في GitHub، أو عندما تنشئ مشاريع مفتوحة المصدر (مع دقائق مجانية سخية). واختر Azure Pipelines عندما تحتاج إلى تكامل Azure Boards، أو إلى اختبار متقدم باستخدام Azure Test Plans، أو إلى إدارة موجز Azure Artifacts، أو عندما يكون الرمز في Azure Repos، أو عندما تحتاج إلى إدارة معقدة للإصدارات متعددة المراحل مع بوابات عبر العديد من البيئات. يدعم كلا الخيارين النشر إلى Azure بالقدر نفسه.

سوق GitHub Actions

يستضيف GitHub Actions Marketplace آلاف الإجراءات المجتمعية والرسمية للمهام الشائعة. تنشر Microsoft إجراءات Azure الرسمية التالية: azure/login وazure/webapps-deploy وazure/aks-set-context وazure/k8s-deploy وazure/CLI وazure/arm-deploy وغيرها الكثير. ثبّت دائمًا الإجراءات على وسم إصدار محدد (مثل @v3) أو على SHA لالتزام محدد، لمنع هجمات سلسلة التوريد الناتجة عن تحديث إجراء مخترق بتعليمات برمجية ضارة.

# Pin actions to specific version (recommended)
- uses: actions/checkout@v4         # Pinned to v4 tag
- uses: azure/login@v2               # Pinned to v2
- uses: azure/webapps-deploy@v3      # Pinned to v3

# Extra security: pin to commit SHA
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683

# Avoid unpinned 'latest' or branch references
# - uses: some-action@main           # UNSAFE - could change at any time

العوامل المستضافة ذاتيًا للشبكات الخاصة

لا يملك العوامل المستضافة من GitHub سوى وصول إلى الإنترنت العام — ولا يمكنها الوصول إلى موارد Azure الخاصة (قواعد بيانات SQL وواجهات API الداخلية) من دون كشف هذه الموارد للعامة. استخدم العوامل المستضافة ذاتيًا على أجهزة Azure الافتراضية داخل VNet لديك للنشر إلى الموارد الخاصة. سجّل عاملًا من خلال تنزيل عامل GitHub Actions، وتهيئته باستخدام عنوان URL للمستودع ورمز التسجيل، ثم تشغيله كخدمة. قم بتوسيع نطاق العوامل المستضافة ذاتيًا باستخدام Azure Container Apps لإنشاء مجموعات عوامل مرنة.

# Register a self-hosted runner on an Azure VM
# 1. Download runner (run on the VM)
curl -O -L https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-linux-x64-2.317.0.tar.gz
mkdir actions-runner && tar xzf ./actions-runner-linux-x64-2.317.0.tar.gz -C actions-runner
cd actions-runner

# 2. Configure (use token from GitHub Settings > Actions > Runners)
./config.sh --url https://github.com/myorg/myrepo --token <REGISTRATION_TOKEN>

# 3. Run as a service
sudo ./svc.sh install && sudo ./svc.sh start

# Use in workflow
# runs-on: self-hosted

تحقق سريع

اختبر مدى فهمك لمفاهيم Microsoft Azure Fundamentals (AZ-900) الواردة في هذا الدرس.

مراجعة الدرس

تعلّمت في هذا الدرس أن مسارات عمل GitHub Actions هي ملفات YAML في .github/workflows/ يتم تشغيلها بواسطة أحداث GitHub وتنفيذها على عوامل، وأن بيانات اعتماد OIDC المتحّدة تتيح المصادقة على Azure من GitHub Actions من دون أسرار، وأن GitHub Environments مع قواعد الحماية تضيف بوابات موافقة إلى عمليات النشر في بيئة الإنتاج. وبذلك تكتمل دورة Azure DevOps — وننتقل بعد ذلك إلى Azure Monitor وLog Analytics.

الأسئلة الشائعة

هل درس «GitHub Actions على Azure» مجاني؟

نعم — نص درس «GitHub Actions على Azure» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Azure Fundamentals، انتقل إلى CoddyKit PRO. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.

ماذا ستتعلم في «GitHub Actions على Azure»؟

كرّر سير عمل CI/CD باستخدام GitHub Actions مع الإجراء azure/webapps-deploy، وتعرّف على الحالات التي يُختار فيها GitHub Actions بدلًا من Azure Pipelines. تتمرن على Azure Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Azure Fundamentals؟

لا تُشترط خبرة سابقة. Azure Fundamentals على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «GitHub Actions على Azure»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Azure Fundamentals هذا؟

نعم. كل درس في Azure Fundamentals يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. نظرة عامة على Azure DevOps Services
  2. إنشاء مسار CI باستخدام Azure Pipelines
  3. النشر المستمر إلى Azure
  4. GitHub Actions على Azure
← العودة إلى Azure Fundamentals