مشاركة عبر


النشر إلى Azure App Service باستخدام GitHub Actions

استخدم إجراءات GitHub لأتمتة سير العمل والنشر إلى Azure App Service من GitHub.

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

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

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

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

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

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

إشعار

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

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

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

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

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

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

إعداد سير عمل GitHub Actions يدويا

يمكنك نشر سير عمل دون استخدام Deployment Center. نفذ هذه الخطوات الثلاث:

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

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

نوصي باستخدام OpenID Connect للمصادقة مع Azure App Service ل GitHub Actions. يستخدم أسلوب المصادقة هذا رموزا مميزة قصيرة الأجل. يعد إعداد 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 استبدل ب من 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 "Website Contributor" --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
    
  4. قم بتشغيل الأمر التالي لإنشاء بيانات اعتماد هوية موحدة جديدة لتطبيق Microsoft 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 وانتقل إلى >>

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

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

إضافة ملف سير العمل إلى مستودع 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:
      # Check out 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 من خلال Azure 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 ل Azure CLI، راجع إجراء Azure CLI GitHub.

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

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

استخدم إجراء GitHub ل Azure 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. لمزيد من المعلومات، راجع النشر إلى حاوية.

كيف أنشر في موعد النشر؟

يمكنك النشر في خانة نشر بدلا من فتحة الإنتاج باستخدام المعامل slot-name في الإجراء azure/webapps-deploy@v3 . للنشر في فتحة، أضف المعلمة slot-name إلى خطوة النشر في سير عملك:

- name: Deploy to Azure Web App
  uses: azure/webapps-deploy@v3
  with:
    app-name: 'my-app-name'
    slot-name: 'staging'  # Deploy to the 'staging' slot instead of production
    package: './output'

إشعار

عند استخدام OpenID Connect أو مصادقة الخدمة، تأكد من أن الهوية لها دور المساهم بالموقع على كل من التطبيق وفتحة النشر. للحصول على مصادقة ملف النشر الشخصي، قم بتنزيل ملف النشر الخاص بالخانة المحددة من بوابة Azure (فتحاتنشر>النشر> اختر الفتحة >تحميل ملف النشر).

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

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

    - 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 .

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