مشاركة عبر


التوزيع إلى App Service باستخدام إجراءات GitHub

ابدأ باستخدام GitHub Actions لأتمتة سير العمل ونشره في Azure App Service من GitHub.

المتطلبات الأساسية

إعداد نشر إجراءات GitHub عند إنشاء التطبيق

يتم دمج نشر GitHub Actions في عملية إنشاء تطبيق ويب الافتراضية. قم بتعيين النشر المستمر إلى تمكين في علامة التبويب Deployment، وقم بتكوين المؤسسة والمستودع والفرع الذي تريده.

توضح لقطة الشاشة كيفية تمكين نشر GitHub Actions في علامة التبويب App Service create Deployment.

عند تمكين النشر المستمر، يختار إنشاء التطبيق تلقائيا أسلوب المصادقة استنادا إلى تحديد المصادقة الأساسي وتكوين التطبيق ومستودع GitHub وفقا لذلك:

تحديد المصادقة الأساسية أسلوب المصادقة
تعطيل الهوية المعينة من قبل المستخدم (OpenID Connect) (مستحسن)
تمكين المصادقة الأساسية

إشعار

قد تتلقى خطأ عند إنشاء التطبيق الذي لا يملك حساب Azure الخاص بك أذونات معينة. قد يحتاج حسابك إلى الأذونات المطلوبة لإنشاء الهوية المعينة من قبل المستخدم وتكوينها. للحصول على بديل، راجع إعداد نشر إجراءات GitHub من مركز النشر.

إعداد نشر إجراءات GitHub من مركز النشر

بالنسبة لتطبيق موجود، يمكنك البدء بسرعة باستخدام GitHub Actions باستخدام App Service Deployment Center. ينشئ أسلوب تسليم المفتاح هذا ملف سير عمل GitHub Actions استنادا إلى مكدس التطبيق الخاص بك ويلتزم به في مستودع GitHub الخاص بك.

يتيح لك مركز النشر أيضا تكوين مصادقة OpenID Connect الأكثر أمانا بسهولة باستخدام هوية معينة من قبل المستخدم. لمزيد من المعلومات، راجع خيار الهوية المعينة من قبل المستخدم.

إذا كان حساب Azure الخاص بك يحتوي على الأذونات المطلوبة، يمكنك إنشاء هوية معينة من قبل المستخدم. وإلا، يمكنك تحديد هوية مدارة معينة من قبل المستخدم موجودة في القائمة المنسدلة Identity . يمكنك العمل مع مسؤول Azure لإنشاء هوية مدارة معينة من قبل المستخدم مع دور المساهم في موقع الويب.

لمزيد من المعلومات، راجع النشر المستمر إلى Azure App Service.

إعداد سير عمل إجراءات GitHub يدويا

يمكنك نشر سير عمل دون استخدام مركز النشر. في هذه الحالة، تحتاج إلى تنفيذ ثلاث خطوات:

  1. إنشاء بيانات اعتماد التوزيع
  2. تكوين سر GitHub
  3. إضافة ملف سير العمل إلى مستودع GitHub الخاص بك

تعيين بيانات اعتماد النشر

الطريقة الموصى بها للمصادقة مع Azure App Services ل GitHub Actions هي مع OpenID Connect. هذا الأسلوب هو أسلوب مصادقة يستخدم رموزا مميزة قصيرة الأجل. يعد إعداد OpenID Connect باستخدام GitHub Actions أكثر تعقيدا ولكنه يوفر أمانا مشددا.

بدلا من ذلك، يمكنك المصادقة باستخدام هوية مدارة معينة من قبل المستخدم أو كيان خدمة أو ملف تعريف نشر.

يصف الإجراء التالي خطوات إنشاء تطبيق Microsoft Entra، وأساس الخدمة، وبيانات الاعتماد الموحدة باستخدام عبارات Azure CLI. لمعرفة كيفية إنشاء تطبيق Microsoft Entra، ومدير الخدمة، وبيانات الاعتماد الموحدة في مدخل Microsoft Azure، راجع اتصال GitHub وAzure.

  1. إذا لم يكن لديك تطبيق موجود، فسجل تطبيق Microsoft Entra جديد ومدير خدمة يمكنه الوصول إلى الموارد. إنشاء تطبيق Microsoft Entra.

    az ad app create --display-name myApp
    

    يقوم هذا الأمر بإرجاع JSON مع appId الذي هو الخاص بك client-id. احفظ القيمة لاستخدامها كـ AZURE_CLIENT_ID سر GitHub لاحقًا.

    يمكنك استخدام objectId القيمة عند إنشاء بيانات اعتماد موحدة باستخدام واجهة برمجة تطبيقات Graph والإشارة إليها ك APPLICATION-OBJECT-ID.

  2. إنشاء كيان الخدمة. استبدل $appID مع التطبيق من مخرج JSON خاصتك.

    ينشئ هذا الأمر إخراج JSON مع مختلف objectId لاستخدامه في الخطوة التالية. objectId الجديد هو assignee-object-id.

    انسخ العبارة المراد appOwnerTenantId استخدامها كسر GitHub لوقت AZURE_TENANT_ID لاحق.

    az ad sp create --id $appId
    
  3. إنشاء تعيين دور جديد عن طريق الاشتراك و العنصر. بشكل افتراضي، يرتبط تعيين الدور باشتراكك الافتراضي. استبدل $subscriptionId بمعرف اشتراكك، $resourceGroupName واسم مجموعة الموارد، $webappName واسم تطبيق الويب الخاص بك، و $assigneeObjectId باسم الذي تم idإنشاؤه . تعرف على طريقة إدارة اشتراكات Azure باستخدام واجهة سطر الأوامر Azure.

    az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
    
  4. قم بتشغيل الأمر التالي لإنشاء بيانات اعتماد هوية موحدة جديدة لتطبيق Entra.

    • استبدل APPLICATION-OBJECT-ID ب appId (الذي تم إنشاؤه أثناء إنشاء التطبيق) لتطبيق Active Directory الخاص بك.

    • قم بتعيين قيمة للرجوع CREDENTIAL-NAME إليها لاحقاً.

    • تعيين subject. يحدد GitHub قيمته اعتمادا على سير العمل الخاص بك:

      • للوظائف في بيئة GitHub Actions: repo:< Organization/Repository >:environment:< Name >
      • بالنسبة للوظائف غير المرتبطة ببيئة، قم بتضمين مسار ref للفرع/العلامة استنادا إلى مسار ref المستخدم لتشغيل سير العمل: repo:< Organization/Repository >:ref:< ref path>. على سبيل المثال: repo:n-username/ node_express:ref:refs/heads/my-branch أو repo:n-username/ node_express:ref:refs/tags/my-tag.
      • بالنسبة إلى مهام سير العمل التي تم تشغيلها بواسطة حدث طلب سحب: repo:< Organization/Repository >:pull_request.
    az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
    ("credential.json" contains the following content)
    {
        "name": "<CREDENTIAL-NAME>",
        "issuer": "https://token.actions.githubusercontent.com",
        "subject": "repo:organization/repository:ref:refs/heads/main",
        "description": "Testing",
        "audiences": [
            "api://AzureADTokenExchange"
        ]
    }     
    

تكوين GitHub السري

تحتاج إلى توفير معرف العميل الخاص بالتطبيق ومعرف المستأجر ومعرفالاشتراك لإجراء Azure/login. يمكن توفير هذه القيم إما مباشرة في سير العمل أو يمكن تخزينها في أسرار GitHub والإشارة إليها في سير العمل خاصتك. حفظ القيم على أنها أسرار GitHub هو الخيار الأكثر أمانًا.

  1. افتح مستودع GitHub وانتقل إلى Settings>Security>Secrets and variables>Actions>New repository secret.

  2. إنشاء أسرار لـ AZURE_CLIENT_ID, AZURE_TENANT_ID, و AZURE_SUBSCRIPTION_ID. استخدم هذه القيم من تطبيق Active Directory لأسرار GitHub خاصتك:

    GitHub Secret تطبيق Active Directory
    AZURE_CLIENT_ID معرف التطبيق (العميل)
    AZURE_TENANT_ID معرف الدليل (المستأجر)
    AZURE_SUBSCRIPTION_ID مُعرّف الاشتراك
  3. احفظ كل سر عن طريق تحديد إضافة سر.

إضافة ملف سير العمل إلى مستودع GitHub الخاص بك

يحدد ملف YAML (.yml) في /.github/workflows/ المسار في مستودع GitHub سير العمل. ويتضمن هذا التعريف الخطوات والمعلمات المختلفة التي تشكّل سير العمل.

كحد أدنى، سيكون لملف سير العمل الخطوات المميزة التالية:

  1. المصادقة باستخدام App Service باستخدام سر GitHub الذي أنشأته.
  2. إنشاء تطبيق الويب.
  3. نشر تطبيق الويب.

لنشر التعليمات البرمجية الخاصة بك إلى تطبيق App Service، استخدم الإجراء azure/webapps-deploy@v3 . يتطلب الإجراء اسم تطبيق الويب الخاص بك في app-name ، واعتمادا على مكدس اللغة الخاص بك، مسار *.zip أو *.war أو *.jar أو مجلد للنشر في package. للحصول على قائمة كاملة بالمدخلات المحتملة azure/webapps-deploy@v3 للإجراء، راجع action.yml.

توضح الأمثلة التالية جزء سير العمل الذي يحول تطبيق الويب برمجيًا، بلغات مختلفة مدعومة.

للنشر باستخدام OpenID Connect باستخدام الهوية المدارة التي قمت بتكوينها، استخدم azure/login@v2 الإجراء مع client-idالمفاتيح tenant-idو و subscription-id . الرجوع إلى أسرار GitHub التي قمت بإنشائها سابقا.

name: .NET Core

on: [push]

permissions:
      id-token: write
      contents: read

env:
  AZURE_WEBAPP_NAME: my-app    # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'           # set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Checkout the repo
      - uses: actions/checkout@main
      - uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
          
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v3
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
      
      - name: logout
        run: |
          az logout

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

كيف أعمل نشر ملف WAR من خلال المكون الإضافي Maven؟

في حالة تكوين مشروع Java Tomcat الخاص بك باستخدام المكون الإضافي Maven، يمكنك أيضا النشر إلى Azure App Service من خلال هذا المكون الإضافي. إذا كنت تستخدم إجراء Azure CLI GitHub، فإنه يستخدم بيانات اعتماد Azure.

    - name: Azure CLI script file
      uses: azure/cli@v2
      with:
        inlineScript: |
          mvn package azure-webapp:deploy

لمزيد من المعلومات حول المكون الإضافي Maven وكيفية استخدامه وتكوينه، راجع Maven plugin wiki ل Azure App Service.

كيف أعمل نشر ملف WAR من خلال Az CLI؟

إذا كنت تفضل استخدام Azure CLI للتوزيع في App Service، يمكنك استخدام إجراء GitHub ل Azure CLI.

- name: Azure CLI script
  uses: azure/cli@v2
  with:
    inlineScript: |
      az webapp deploy --src-path '${{ github.workspace }}/target/yourpackage.war' --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }}  --async true --type war

لمزيد من المعلومات حول إجراء GitHub ل CLI وكيفية استخدامه وتكوينه، راجع إجراء Azure CLI GitHub.

لمزيد من المعلومات حول الأمر az webapp deploy، وكيفية استخدامه، وتفاصيل المعلمة، راجع وثائق az webapp deploy.

كيف أعمل نشر ملف بدء تشغيل؟

استخدم إجراء GitHub ل CLI. على سبيل المثال:

- name: Deploy startup script
  uses: azure/cli@v2
  with:
    inlineScript: |
      az webapp deploy --src-path ${{ github.workspace }}/src/main/azure/createPasswordlessDataSource.sh --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --type startup --track-status false

كيف أعمل النشر إلى حاوية؟

باستخدام إجراء Azure Web Deploy، يمكنك أتمتة سير العمل الخاص بك لنشر حاويات مخصصة إلى App Service باستخدام GitHub Actions. لمزيد من المعلومات حول خطوات النشر باستخدام إجراءات GitHub، راجع النشر إلى حاوية.

كيف أعمل تحديث تكوين Tomcat بعد النشر؟

في حالة رغبتك في تحديث أي من إعدادات تطبيقات الويب الخاصة بك بعد النشر، يمكنك استخدام إجراء App Service Settings .

    - uses: azure/appservice-settings@v1
      with:
        app-name: 'my-app'
        slot-name: 'staging'  # Optional and needed only if the settings have to be configured on the specific deployment slot
        app-settings-json: '[{ "name": "CATALINA_OPTS", "value": "-Dfoo=bar" }]' 
        connection-strings-json: '${{ secrets.CONNECTION_STRINGS }}'
        general-settings-json: '{"alwaysOn": "false", "webSocketsEnabled": "true"}' #'General configuration settings as Key Value pairs'
      id: settings

لمزيد من المعلومات حول هذا الإجراء وكيفية استخدامه وتكوينه، راجع مستودع App Service Settings .

تحقق من المراجع على إجراءات Azure GitHub ومهام سير العمل: