التوزيع إلى App Service باستخدام مسارات Azure
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
إشعار
بدءا من 1 يونيو 2024، سيكون لجميع تطبيقات App Service التي تم إنشاؤها حديثا خيار إنشاء اسم مضيف افتراضي فريد باستخدام اصطلاح <app-name>-<random-hash>.<region>.azurewebsites.net
التسمية . ستظل أسماء التطبيقات الحالية دون تغيير.
مثال: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
لمزيد من التفاصيل، راجع اسم المضيف الافتراضي الفريد لمورد App Service.
استخدم Azure Pipelines لتوزيع تطبيق الويب الخاص بك تلقائيًا إلى Azure App Service على كل بنية ناجحة. يتيح لك Azure Pipelines الإنشاء والاختبار والنشر باستخدام التكامل المستمر (CI) والتسليم المستمر (CD) باستخدام Azure DevOps.
بنيات YAML الأساسية لبرنامج ربط العمليات التجارية يتم تعريفها باستخدام ملف YAML في مستودعك. الخطوة هي أصغر كتلة بناء للبنية الأساسية لبرنامج ربط العمليات التجارية ويمكن أن تكون نصا أو مهمة (برنامج نصي معبأة مسبقا). تعرف على المفاهيم والمكونات الرئيسية التي تشكل البنية الأساسية لبرنامج ربط العمليات التجارية.
ستستخدم مهمة Azure Web App (AzureWebApp
) للنشر إلى Azure App Service في البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك. بالنسبة للسيناريوهات الأكثر تعقيدا مثل الحاجة إلى استخدام معلمات XML في التوزيع الخاص بك، يمكنك استخدام مهمة توزيع Azure App Service (AzureRmWebAppDeployment).
المتطلبات الأساسية
- حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
- مؤسسة Azure DevOps أنشئ حسابًا مجانًا.
- القدرة على تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية على العوامل المستضافة من Microsoft. يمكنك إما شراء وظيفة موازية أو يمكنك طلب مستوى مجاني.
- تطبيق Azure App Service يعمل مع تعليمات برمجية مستضافة على GitHub أو Azure Repos.
1. إنشاء مسار لمكدس الذاكرة المؤقتة
تفترض أمثلة التعليمات البرمجية في هذا القسم أنك تنشر تطبيق ويب ASP.NET. يمكنك تكييف التعليمات لأطر أخرى.
تعرف على المزيد حول دعم النظام البنائي لـ Azure Pipelines.
سجل الدخول إلى مؤسسة Azure DevOps، وانتقل إلى مشروعك.
انتقل إلى Pipelines، ثم حدد New pipeline.
عند المطالبة، حدد موقع التعليمات البرمجية المصدر: إما Azure Repos Git أو GitHub.
قد تتم إعادة توجيهك إلى GitHub لتسجيل الدخول. إذا كان الأمر كذلك، فأدخل بيانات اعتماد GitHub.
عند ظهور قائمة المستودعات، حدد المستودع.
قد تتم إعادة توجيهك إلى GitHub لتثبيت تطبيق Azure Pipelines. إذا كان الأمر كذلك، فحدد Approve & install.
في علامة التبويب تكوين، حدد ASP.NET Core.
عند ظهور المسار الجديد، ألق نظرة على YAML لمعرفة ما يفعله. عندما تكون جاهزًا، حدد حفظ وتشغيل.
2. إضافة مهمة التوزيع
انقر فوق نهاية ملف YAML، ثم حدد إظهار المساعد.'
استخدم مساعد المهام لإضافة مهمة Azure Web App.
بدلا من ذلك، يمكنك إضافة مهمة توزيع Azure App Service (AzureRmWebAppDeployment).
اختر اشتراك Azure الخاص بك. تأكد من تخويل اتصالك. ينشئ التخويل اتصال الخدمة المطلوب.
حدد نوع التطبيق واسم التطبيق ومكدس وقت التشغيل استنادا إلى تطبيق App Service. يجب أن يبدو YAML الكامل مشابها للتعليمات البرمجية التالية.
variables: buildConfiguration: 'Release' steps: - task: DotNetCoreCLI@2 inputs: command: 'publish' publishWebProjects: true - task: AzureWebApp@1 inputs: azureSubscription: '<service-connection-name>' appType: 'webAppLinux' appName: '<app-name>' package: '$(System.DefaultWorkingDirectory)/**/*.zip'
- azureSubscription: اسم اتصال الخدمة المعتمد باشتراك Azure الخاص بك.
- appName: اسم تطبيقك الحالي.
- package: مسار الملف إلى الحزمة أو مجلد يحتوي على محتويات خدمة التطبيق. يتم دعم أحرف البدل.
مثال: نشر تطبيق .NET
لنشر حزمة ويب .zip (على سبيل المثال، من تطبيق ويب ASP.NET) إلى Azure Web App، استخدم القصاصة البرمجية التالية لنشر البنية إلى تطبيق.
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: 'webAppLinux'
appName: '<app-name>'
package: '$(System.DefaultWorkingDirectory)/**/*.zip'
- azureSubscription: اشتراك Azure الخاص بك.
- appType: نوع تطبيق الويب الخاص بك.
- appName: اسم خدمة التطبيق الحالية.
- package: مسار الملف إلى الحزمة أو مجلد يحتوي على محتويات خدمة التطبيق. يتم دعم أحرف البدل.
مثال: النشر إلى تطبيق ظاهري
بشكل افتراضي، يحدث التوزيع الخاص بك للتطبيق الجذر في Azure Web App. يمكنك النشر إلى تطبيق ظاهري معين باستخدام VirtualApplication
خاصية مهمة توزيع (AzureRmWebAppDeployment
) Azure App Service:
- task: AzureRmWebAppDeployment@4
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>'
appType: webAppLinux
WebAppName: '<app-name>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
- azureSubscription: اشتراك Azure الخاص بك.
- appType: (اختياري) استخدم
webAppLinux
للتوزيع إلى تطبيق ويب على Linux. - appName: اسم خدمة التطبيق الحالية.
- deployToSlotOrASE: منطقي. التوزيع إلى فتحة نشر موجودة أو بيئة خدمة تطبيقات Azure.
- ResourceGroupName: اسم مجموعة الموارد. مطلوب إذا كان
deployToSlotOrASE
صحيحًا. - slotName: اسم الفتحة، الذي يتم تعيينه افتراضيا إلى
production
. مطلوب إذا كانdeployToSlotOrASE
صحيحًا. - 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'
مثال: إجراء استبدالات متغيرة
بالنسبة لمعظم مكدسات اللغة، يمكن تعيين إعدادات التطبيق وسلاسل الاتصال كمتغيرات بيئة في وقت التشغيل.
ولكن هناك أسباب أخرى قد ترغب في إجراء استبدالات متغيرة إلى Web.config الخاص بك. في هذا المثال، يحتوي ملف Web.config على سلسلة الاتصال باسم connectionString
. يمكنك تغيير قيمته قبل النشر إلى كل تطبيق ويب. يمكنك القيام بذلك إما عن طريق تطبيق تحويل Web.config أو عن طريق استبدال المتغيرات في ملف Web.config الخاص بك.
تعرض القصاصة البرمجية التالية مثالا على استبدال المتغيرات باستخدام مهمة توزيع خدمة تطبيقات Azure (AzureRmWebAppDeployment
):
jobs:
- job: test
variables:
connectionString: <test-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Test stage Azure service connection>'
WebAppName: '<name of test stage web app>'
enableXmlVariableSubstitution: true
- job: prod
dependsOn: test
variables:
connectionString: <prod-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Prod stage Azure service connection>'
WebAppName: '<name of prod stage web app>'
enableXmlVariableSubstitution: true
مثال: التوزيع بشكل مشروط
للقيام بذلك في YAML، يمكنك استخدام إحدى التقنيات التالية:
- اعزل خطوات التوزيع في مهمة منفصلة، وأضف شرطًا إلى تلك المهمة.
- إضافة شرط إلى الخطوة.
يوضح المثال التالي كيفية استخدام شروط الخطوة لتوزيع البنيات التي تنشأ من الفرع الرئيسي فقط:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<service-connection-name>'
appName: '<app-name>'
لمعرفة المزيد حول الشروط، راجع تحديد الشروط.
مثال: النشر باستخدام Web Deploy
يمكن نشر مهمة توزيع Azure App Service (AzureRmWebAppDeployment
) إلى 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@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '<service-connection-name>'
appType: 'webApp'
WebAppName: '<app-name>'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
الأسئلة الشائعة
ما الفرق بين AzureWebApp
المهام و AzureRmWebAppDeployment
؟
مهمة Azure Web App (AzureWebApp
) هي أبسط طريقة للنشر إلى Azure Web App. بشكل افتراضي، يحدث التوزيع الخاص بك للتطبيق الجذر في Azure Web App.
يمكن لمهمة Azure App Service Deploy (AzureRmWebAppDeployment
) معالجة المزيد من السيناريوهات المخصصة، مثل:
- تعديل إعدادات التكوين داخل حزم الويب وملفات معلمات XML.
- النشر باستخدام Web Deploy، إذا كنت معتادا على عملية نشر IIS.
- النشر إلى التطبيقات الظاهرية.
- النشر إلى أنواع التطبيقات الأخرى، مثل تطبيقات الحاوية أو تطبيقات الوظائف أو WebJobs أو تطبيقات API وتطبيقات الأجهزة المحمولة.
إشعار
يتم أيضًا دعم تحويلات الملفات واستبدال المتغيرات بواسطة مهمة تحويل الملفات المنفصلة للاستخدام في Azure Pipelines. يمكنك استخدام مهمة تحويل الملف لتطبيق تحويلات الملفات والاستبدالات المتغيرة على أي ملفات تكوين ومعلمات.
أحصل على الرسالة "تم توفير حزمة خدمة التطبيقات أو مسار المجلد غير صالح."
في مسارات YAML، اعتمادا على البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك، قد يكون هناك عدم تطابق بين مكان حفظ حزمة الويب المضمنة ومكان البحث عن مهمة التوزيع. على سبيل المثال، AzureWebApp
تلتقط المهمة حزمة الويب للنشر. على سبيل المثال، تبحث مهمة AzureWebApp في $(System.DefaultWorkingDirectory)/**/*.zip
. إذا تم إيداع حزمة الويب في مكان آخر، فعدل قيمة package
.
أتلقى الرسالة "يتم دعم خيارات النشر باستخدام webdeploy فقط عند استخدام عامل Windows."
يحدث هذا الخطأ في مهمة AzureRmWebAppDeployment عند تكوين المهمة للنشر باستخدام Web Deploy، ولكن عاملك لا يقوم بتشغيل Windows. تحقق من أن YAML الخاص بك يحتوي على شيء مشابه للتعليمات البرمجية التالية:
pool:
vmImage: windows-latest
لا يعمل Web Deploy عند تعطيل المصادقة الأساسية
للحصول على معلومات استكشاف الأخطاء وإصلاحها حول الحصول على مصادقة معرف Microsoft Entra للعمل مع AzureRmWebAppDeployment
المهمة، راجع لا يمكنني نشر الويب إلى خدمة تطبيقات Azure باستخدام مصادقة معرف Microsoft Entra من وكيل Windows الخاص بي
الخطوات التالية
- قم بتخصيص مسار Azure DevOps لديك.