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

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

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

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

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

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

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

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

إشعار

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

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

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

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

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

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

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

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

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

1. إنشاء بيانات اعتماد التوزيع

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

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

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

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

    az ad app create --display-name myApp
    

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

    ستستخدم قيمة objectId عند إنشاء بيانات اعتماد اتحادية مع واجهة برمجة تطبيقات الرسم البياني Graph API والإشارة إليها باسم 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. قم بتشغيل الأمر التالي لإنشاء اعتماد هوية اتحادي جديد لتطبيق الدليل النشط خاصتك.

    • استبدل APPLICATION-OBJECT-ID ب appId (الذي تم إنشاؤه أثناء إنشاء التطبيق) لتطبيق Active Directory الخاص بك.
    • قم بتعيين قيمة للرجوع CREDENTIAL-NAME إليها لاحقاً.
    • تعيين subject. يتم تعريف قيمته بواسطة GitHub اعتمادا على سير العمل الخاص بك:
      • الوظائف في بيئة إجراءات GitHub خاصتك: 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"
        ]
    }     
    

2. تكوين سر GitHub

تحتاج إلى توفير معرف العميل الخاص بالتطبيق ومعرف المستأجر ومعرف الاشتراك لإجراء Azure/تسجيل الدخول. يمكن توفير هذه القيم إما مباشرة في سير العمل أو يمكن تخزينها في أسرار 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. احفظ كل سر عن طريق تحديد إضافة سر.

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@v1 الإجراء مع client-idtenant-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@v1
        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 وOpenID Connect

في حالة تكوين مشروع 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 وOpenID Connect

إذا كنت تفضل استخدام Azure CLI للتوزيع في App Service، يمكنك استخدام إجراء GitHub ل 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.

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

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

كيف أعمل تحديث تكوين 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 ومهام سير العمل: