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

خدمات | Azure DevOps Server 2022

توضح هذه المقالة كيفية استخدام Azure Pipelines لإنشاء تطبيق الويب الخاص بك واختباره ونشره تلقائيا إلى Azure App Service. يمكنك إعداد مسار تكامل مستمر وتسليم مستمر (CI/CD) يتم تشغيله كلما قمت بإيداع تغيير التعليمات البرمجية إلى فرع معين من المستودع الخاص بك.

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

يمكنك استخدام مهمة Azure Web App في البنية الأساسية لبرنامج ربط العمليات التجارية للنشر إلى App Service. بالنسبة للسيناريوهات الأكثر تعقيدا، مثل استخدام معلمات XML في عمليات التوزيع، يمكنك استخدام مهمة نشر Azure App Service .

المتطلبات

هام

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

إنشاء خط أنابيب

أمثلة التعليمات البرمجية في هذا القسم مخصصة لتطبيق ويب ASP.NET Core. يمكنك تكييف الإرشادات لأطر العمل الأخرى. لمزيد من المعلومات حول دعم النظام البيئي لمسارات Azure، راجع أمثلة النظام البيئي لمسارات Azure.

حدد البنية الأساسية لبرنامج ربط العمليات التجارية عن طريق إنشاء ملف YAML azure-pipelines.yml في مستودع التعليمات البرمجية الخاص بك.

  1. في قائمة التنقل اليسرى لمشروع Azure DevOps، حدد التدفقات.
  2. في صفحة التدفقات ، حدد مسار جديد، أو إنشاء مسار إذا كان هذا المسار هو الأول في المشروع.
  3. في شاشة أين توجد التعليمات البرمجية الخاصة بك ، حدد موقع التعليمات البرمجية المصدر، إما Azure Repos Git أو GitHub. إذا لزم الأمر، قم بتسجيل الدخول إلى GitHub.
  4. في شاشة تحديد مستودع ، حدد مستودع التعليمات البرمجية الخاص بك.
  5. في شاشة تكوين التدفق ، حدد مسار المبتدئين.

أضف مهمة .NET Core (DotNetCoreCLI@2) إلى البنية الأساسية لبرنامج ربط العمليات التجارية، وقم بإنشاء تطبيقك ونشره.

  1. في شاشة مراجعة YAML لخط الأنابيب ، احذف كل التعليمات البرمجية بعد السطر steps: .
  2. حدد نهاية الملف، ثم حدد إظهار المساعد على اليمين.
  3. ضمن المهام، حدد .NET Core.
  4. في شاشة تكوين .NET Core ، ضمن اتصال Azure Resource Manager، حدد اشتراك Azure، ثم حدد تخويل لإنشاء اتصال الخدمة المطلوب.
  5. ضمن الأوامر، حدد نشر.
  6. تأكد من تحديد خانتي الاختيار نشر مشاريع ويبوالمشاريع المنشورة على Zip ، ثم حدد إضافة.
  7. تظهر المهمة في مسار YAML الخاص بك. راجع كود YAML لمعرفة ما يفعله. عندما تكون جاهزا، حدد حفظ وتشغيل، ثم حدد حفظ وتشغيل مرة أخرى.
  8. في شاشة ملخص الإنشاء، ضمن الوظائف، حدد الارتباط الإذن المطلوب . في شاشة عمليات الفحوص ، حدد تصريح، ثم حدد السماح مرة أخرى. يسمح منح الإذن هنا باستخدام اتصال الخدمة الذي قمت بالسماح به لجميع عمليات تشغيل هذا التدفق.

ينشر المسار ملف ZIP للتوزيع كأداة Azure لمهمة التوزيع لاستخدامها في الخطوة التالية.

إضافة مهمة النشر

بعد تشغيل المسار بنجاح، أضف مهمة النشر.

  1. في شاشة تشغيل التدفق، حدد أيقونة المزيد من الإجراءات في الجزء العلوي الأيمن، ثم حدد تحرير التدفق.
  2. حدد نهاية ملف YAML، وحدد إظهار المساعد إذا لم تظهر قائمة المهام .
  3. في قائمة المهام ، ابحث عن مهمة Azure Web App وحددها. بدلا من ذلك، يمكنك استخدام مهمة نشر Azure App Service .
  4. في شاشة تكوين Azure Web App، ضمن اشتراك Azure، حدد نفس اتصال الخدمة الذي قمت بإعداده للخطوة السابقة. لا تحتاج إلى إعادة تفويض هذا الاتصال.
  5. بالنسبة لنوع التطبيق، حدد Azure Web App على Linux أو Azure Web App على Windows، اعتمادا على التعليمات البرمجية الخاصة بك.
  6. بالنسبة إلى اسم التطبيق، حدد اسم تطبيق App Service أو أدخله.
  7. حدد إضافة.
  8. حدد التحقق من الصحة والحفظ، ثم حدد حفظ.
  9. حدد تشغيل، ثم حدد تشغيل مرة أخرى.

يجب أن يبدو مسار YAML الكامل مثل التعليمات البرمجية التالية:

trigger:
- <branch-specification>

pool:
  vmImage: <agent-specification>

steps:
- task: DotNetCoreCLI@2
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    command: 'publish'
    publishWebProjects: true

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    appType: 'webApp'
    appName: '<your-app-name>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    deploymentMethod: 'auto'  
  • azureSubscription: اسم اتصال الخدمة المعتمد باشتراك Azure الخاص بك.
  • appName: اسم تطبيقك الحالي.
  • packageمسار الملف إلى الحزمة أو المجلد الذي يحتوي على محتويات App Service.: يتم دعم أحرف البدل.

الأمثلة

تناقش الأقسام التالية إنشاء أنواع مختلفة من مسارات الإنشاء والإصدار.

النشر إلى تطبيق ظاهري

يتم نشر مهمة Azure Web App إلى التطبيق الجذر في تطبيق ويب Azure. يمكنك النشر إلى تطبيق ظاهري معين باستخدام VirtualApplication خاصية مهمة نشر Azure App Service .

- task: AzureRmWebAppDeployment@5
  inputs:
    VirtualApplication: '<name of virtual application>'

VirtualApplication هو اسم التطبيق الظاهري الذي تم تكوينه في مدخل Microsoft Azure. لمزيد من المعلومات، راجع تكوين تطبيق App Service في مدخل Microsoft Azure.

النشر في فتحة

يوضح المثال التالي كيفية النشر إلى فتحة التقسيم المرحلي، ثم التبديل إلى فتحة إنتاج:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<service-connection-name>'
    appType: webAppLinux
    appName: '<app-name>'
    deployToSlotOrASE: true
    resourceGroupName: '<name of resource group>'
    slotName: staging
    package: '$(Build.ArtifactStagingDirectory)/**/*.zip'

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<service-connection-name>'
    WebAppName: '<app-name>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscriptionاتصال خدمة Azure.:
  • appTypeنوع التطبيق الاختياري مثل webAppLinux النشر على تطبيق ويب على Linux.:
  • appNameاسم تطبيقك الحالي.:
  • deployToSlotOrASE:منطقيه. ما إذا كان سيتم النشر في فتحة توزيع موجودة أو بيئة App Service.
  • resourceGroupNameاسم مجموعة الموارد المراد النشر فيها، مطلوب إذا deployToSlotOrASE كان صحيحا.:
  • slotNameاسم الفتحة المراد النشر فيها، مطلوب إذا deployToSlotOrASE كان صحيحا.: الإعدادات الافتراضية لـ production.
  • packageمسار الملف إلى الحزمة أو المجلد الذي يحتوي على محتويات التطبيق.: يتم دعم أحرف البدل.
  • SourceSlot: يتم إرسال الفتحة إلى الإنتاج عندما SwapWithProduction يكون صحيحا.
  • SwapWithProduction:منطقيه. ما إذا كان سيتم تبديل حركة مرور فتحة المصدر بالإنتاج.

النشر في تطبيقات ويب متعددة

يمكنك استخدام المهام في ملف YAML لإعداد مسار عمليات التوزيع. باستخدام الوظائف، يمكنك التحكم في ترتيب النشر إلى تطبيقات ويب متعددة.

jobs:
- job: buildandtest
  pool:
    vmImage: ubuntu-latest
 
  steps:
  # publish an artifact called drop
  - task: PublishPipelineArtifact@1
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)' 
      artifactName: drop
  
  # deploy to Azure Web App staging
  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<service-connection-name>'
      appType: <app type>
      appName: '<staging-app-name>'
      deployToSlotOrASE: true
      resourceGroupName: <group-name>
      slotName: 'staging'
      package: '$(Build.ArtifactStagingDirectory)/**/*.zip'

- job: deploy
  dependsOn: buildandtest
  condition: succeeded()

  pool: 
    vmImage: ubuntu-latest
  
  steps:
    # download the artifact drop from the previous job
  - task: DownloadPipelineArtifact@2
    inputs:
      source: 'current'
      artifact: 'drop'
      path: '$(Pipeline.Workspace)'

  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<service-connection-name>'
      appType: <app type>
      appName: '<production-app-name>'
      resourceGroupName: <group-name>
      package: '$(Pipeline.Workspace)/**/*.zip'

النشر المشروط

للنشر المشروط في YAML، استخدم إحدى الأساليب التالية:

  • إضافة شرط إلى الخطوة.
  • اعزل خطوات التوزيع في مهمة منفصلة، وأضف شرطا إلى تلك المهمة.

يوضح المثال التالي كيفية استخدام شروط الخطوة لنشر الإصدارات الناجحة فقط التي تنشأ من الفرع الرئيسي:

- task: AzureWebApp@1
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
    azureSubscription: '<service-connection-name>'
    appName: '<app-name>'

لمزيد من المعلومات حول الشروط، راجع تحديد الشروط.

النشر باستخدام نشر الويب

يمكن نشر مهمة نشر Azure App Service إلى App Service باستخدام Web Deploy.

trigger:
- main

pool:
  vmImage: windows-latest

variables:
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--configuration $(buildConfiguration)'
    zipAfterPublish: true

- task: AzureRmWebAppDeployment@5
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: '<service-connection-name>'
    appType: 'webApp'
    WebAppName: '<app-name>'
    packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
    enableCustomDeployment: true
    DeploymentType: 'webDeploy'

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

ما الفرق بين مهام AzureWebApp وAzureRmWebAppDeploy؟

مهمة Azure Web App هي أبسط طريقة للنشر إلى تطبيق ويب Azure. بشكل افتراضي، يمكنك نشر التطبيق الجذر في تطبيق ويب Azure.

يمكن لمهمة نشر Azure App Service التعامل مع المزيد من السيناريوهات المخصصة، مثل:

إشعار

تدعم مهمة تحويل الملفات المنفصلة أيضا تحويلات الملفات واستبدال المتغير لاستخدامها في مسارات Azure. يمكنك استخدام مهمة تحويل الملف لتطبيق تحويلات الملفات واستبدال المتغيرات على أي ملفات تكوين ومعلمات.

لماذا أحصل على الرسالة "تم توفير حزمة App Service أو مسار مجلد غير صالح"؟

في مسارات YAML، قد يكون هناك عدم تطابق بين مكان حفظ حزمة الويب المبنية والمكان الذي تبحث فيه مهمة النشر عنها. تلتقط مهمة AzureWebApp الافتراضية حزمة الويب للنشر منها $(System.DefaultWorkingDirectory)/**/*.zip. إذا تم إيداع حزمة الويب في مكان آخر، فقم بتعديل قيمة المعلمة package .

لماذا أحصل على الرسالة "النشر باستخدام خيارات webdeploy مدعومة فقط عند استخدام عامل Windows"؟

يحدث هذا الخطأ في مهمة AzureRmWebAppDeployment عند تكوين المهمة للنشر باستخدام Web Deploy، ولكن الوكيل الخاص بك لا يقوم بتشغيل Windows. تحقق من أن معلمة YAML vmImage الخاصة بك تحدد Windows.

pool:
  vmImage: windows-latest

لماذا لا يعمل Web Deploy عند تعطيل المصادقة الأساسية؟

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