مشاركة عبر


التسليم المستمر باستخدام Azure Pipelines

استخدم Azure Pipelines لنشر مشروع التعليمات البرمجية تلقائيا إلى تطبيق دالة في Azure. يتيح لك Azure Pipelines الإنشاء والاختبار والنشر باستخدام التكامل المستمر (CI) والتسليم المستمر (CD) باستخدام Azure DevOps.

بنيات YAML الأساسية لبرنامج ربط العمليات التجارية يتم تعريفها باستخدام ملف YAML في مستودعك. الخطوة هي أصغر كتلة بناء للبنية الأساسية لبرنامج ربط العمليات التجارية ويمكن أن تكون نصا أو مهمة (برنامج نصي معبأة مسبقا). تعرف على المفاهيم والمكونات الرئيسية التي تشكل البنية الأساسية لبرنامج ربط العمليات التجارية.

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

مقارنة / إصدار AzureFunctionApp@2 AzureFunctionApp@1
يدعم خطة الاستهلاك المرن
يتضمن دعم التحقق المحسن*
متى تستخدم... موصى به لعمليات نشر التطبيقات الجديدة يتم الحفاظ عليها لعمليات النشر القديمة

* يجعل دعم التحقق المحسن من صحة المسارات أقل عرضة لفشل المسارات بسبب الأخطاء.

اختر إصدار المهمة في أعلى المقالة.

إشعار

قم بالترقية من AzureFunctionApp@1 إلى AzureFunctionApp@2 للوصول إلى الميزات الجديدة والدعم طويل الأمد.

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

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

بناء تطبيقك

  1. سجل الدخول إلى مؤسسة Azure DevOps، وانتقل إلى مشروعك.
  2. في مشروعك، انتقل إلى صفحة Pipelines . ثم اختر الإجراء لإنشاء خط أنابيب جديد.
  3. اطلع على خطوات المعالج عن طريق تحديد GitHub أولا كموقع للتعليمات البرمجية المصدر.
  4. قد تتم إعادة توجيهك إلى GitHub لتسجيل الدخول. إذا كان الأمر كذلك،‏ فأدخل بيانات اعتماد GitHub.
  5. عند ظهور قائمة المستودعات، حدد نموذج مستودع التطبيق.
  6. ستقوم Azure pipelines بتحليل المستودع الخاص بك، والتوصية بقالب. حدد حفظ وتشغيل، ثم حدد الالتزام مباشرة بالفرع الرئيسي، ثم اختر حفظ وتشغيل مرة أخرى.
  7. تم بدء تشغيل جديد. انتظر حتى تنتهي عملية التشغيل.

مثال على مسارات بناء YAML

يمكن استخدام البنيات الأساسية لبرنامج ربط العمليات التجارية المحددة اللغة التالية لإنشاء التطبيقات.

يمكنك استخدام النموذج التالي لإنشاء ملف YAML لإنشاء تطبيق .NET:

pool:
  vmImage: 'windows-latest'
steps:
  - task: UseDotNet@2
    displayName: 'Install .NET 8.0 SDK'
    inputs:
      packageType: 'sdk'
      version: '8.0.x'
      installationPath: $(Agent.ToolsDirectory)/dotnet
  - script: |
      dotnet restore
      dotnet build --configuration Release
  - task: DotNetCoreCLI@2
    displayName: 'dotnet publish'
    inputs:
      command: publish
      arguments: '--configuration Release --output $(System.DefaultWorkingDirectory)/publish_output'
      projects: 'csharp/*.csproj'
      publishWebProjects: false
      modifyOutputPath: false
      zipAfterPublish: false
  - task: ArchiveFiles@2
    displayName: "Archive files"
    inputs:
      rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
      includeRootFolder: false
      archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
      artifactName: 'drop'
  1. سجل الدخول إلى مؤسسة Azure DevOps، وانتقل إلى مشروعك.
  2. في مشروعك، انتقل إلى صفحة Pipelines . ثم حدد مسار معالجة جديد.
  3. حدد أحد هذه الخيارات ل أين توجد التعليمات البرمجية الخاصة بك؟:
    • GitHub: قد تتم إعادة توجيهك إلى GitHub لتسجيل الدخول. إذا كان الأمر كذلك،‏ فأدخل بيانات اعتماد GitHub. عندما يكون هذا الاتصال هو أول اتصال GitHub، يرشدك المعالج أيضا خلال عملية توصيل DevOps بحسابات GitHub الخاصة بك.
    • Azure Repos Git: يمكنك على الفور اختيار مستودع في مشروع DevOps الحالي.
  4. عند ظهور قائمة المستودعات، حدد نموذج مستودع التطبيق.
  5. تقوم Azure Pipelines بتحليل المستودع الخاص بك وفي تكوين البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك يوفر قائمة بالقوالب المحتملة. اختر قالب تطبيق الوظائف المناسب للغتك. إذا لم تتمكن من رؤية القالب الصحيح، فحدد إظهار المزيد.
  6. حدد حفظ وتشغيل، ثم حدد الالتزام مباشرة بالفرع الرئيسي، ثم اختر حفظ وتشغيل مرة أخرى.
  7. تم بدء تشغيل جديد. انتظر حتى تنتهي عملية التشغيل.

مثال على مسارات بناء YAML

يمكن استخدام البنيات الأساسية لبرنامج ربط العمليات التجارية المحددة اللغة التالية لإنشاء التطبيقات.

يمكنك استخدام النموذج التالي لإنشاء ملف YAML لإنشاء تطبيق .NET.

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

pool:
  vmImage: 'windows-latest'
steps:
  - task: UseDotNet@2
    displayName: 'Install .NET 8.0 SDK'
    inputs:
      packageType: 'sdk'
      version: '8.0.x'
      installationPath: $(Agent.ToolsDirectory)/dotnet
  - script: |
      dotnet restore
      dotnet build --configuration Release
  - task: DotNetCoreCLI@2
    displayName: 'dotnet publish'
    inputs:
      command: publish
      arguments: '--configuration Release --output $(System.DefaultWorkingDirectory)/publish_output'
      projects: 'csharp/*.csproj'
      publishWebProjects: false
      modifyOutputPath: false
      zipAfterPublish: false
  - task: ArchiveFiles@2
    displayName: "Archive files"
    inputs:
      rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
      includeRootFolder: false
      archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
      artifactName: 'drop'

نشر تطبيقك

ستقوم بالنشر مع مهمة Azure Function App Deploy v2 . هذه المهمة تتطلب اتصال خدمة Azure كمدخل. يخزن اتصال خدمة Azure بيانات الاعتماد للاتصال من Azure Pipelines إلى Azure. يجب إنشاء اتصال يستخدم اتحاد هوية حمل العمل.

للنشر إلى Azure Functions، أضف هذا القصاصة البرمجية في نهاية ملفك azure-pipelines.yml ، اعتمادا على ما إذا كان تطبيقك يعمل على Linux أو Windows:

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <Name of your Azure subscription>
  appName: <Name of the function app>
  # Agent VM image name
  vmImageName: 'windows-latest'

- task: AzureFunctionApp@2 # Add this at the end of your file
  inputs:
    azureSubscription: <Name of your Azure subscription>
    appType: functionApp # this specifies a Windows-based function app
    appName: $(appName)
    package: $(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip
    deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required. Deployment method. Default: auto.
    #Uncomment the next lines to deploy to a deployment slot
    #Note that deployment slots is not supported for Linux Dynamic SKU
    #deployToSlotOrASE: true
    #resourceGroupName: '<RESOURCE_GROUP>'
    #slotName: '<SLOT_NAME>'

الافتراضي appType هو Windows (functionApp). يمكنك تحديد Linux عن طريق تعيين appType إلى functionAppLinux. يعمل تطبيق Flex Consumption على Linux، ويجب عليك تعيين كليهما appType: functionAppLinux و isFlexConsumption: true.

تفترض القصاصة البرمجية أن خطوات الإنشاء في ملف YAML الخاص بك تنتج أرشيف zip في مجلد $(System.ArtifactsDirectory) الموجود على وكيلك.

يمكنك النشر باستخدام مهمة Azure Function App Deploy . هذه المهمة تتطلب اتصال خدمة Azure كمدخل. يخزن اتصال خدمة Azure بيانات الاعتماد للاتصال من Azure Pipelines إلى Azure.

هام

النشر إلى تطبيق Flex Consumption غير مدعوم باستخدام @v1AzureFunctionApp المهمة.

للنشر إلى Azure Functions، أضف هذا القصاصة البرمجية في نهاية ملفك azure-pipelines.yml :

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <Name of your Azure subscription>
  appName: <Name of the function app>
  # Agent VM image name
  vmImageName: 'ubuntu-latest'

- task: DownloadBuildArtifacts@1 # Add this at the end of your file
  inputs:
    buildType: 'current'
    downloadType: 'single'
    artifactName: 'drop'
    itemPattern: '**/*.zip'
    downloadPath: '$(System.ArtifactsDirectory)'
- task: AzureFunctionApp@1
  inputs:
    azureSubscription: $(azureSubscription)
    appType: functionAppLinux # default is functionApp
    appName: $(appName)
    package: $(System.ArtifactsDirectory)/**/*.zip

يقوم هذا المقتطف بتعيين الزر appType إلى functionAppLinux، وهو أمر مطلوب عند النشر إلى تطبيق يعمل على Linux. الافتراضي appType هو Windows (functionApp).

يفترض المثال أن خطوات الإنشاء في ملف YAML الخاص بك تنتج الأرشيف المضغوط في المجلد $(System.ArtifactsDirectory) الموجود على الوكيل الخاص بك.

توزيع حاوية

‏‫نَصِيحة

نوصي باستخدام دعم Azure Functions في Azure Container Apps لاستضافة تطبيق الوظائف الخاص بك في حاوية Linux مخصصة. لمزيد من المعلومات، راجع نظرة عامة على Azure Functions على Azure Container Apps.

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

يمكنك استخدام مهمة توزيع Azure Container Apps (AzureContainerApps) لنشر صورة تطبيق دالة إلى مثيل Azure Container App المحسن لوظائف Azure.

تنشر هذه التعليمات البرمجية الصورة الأساسية لتطبيق دالة نموذج عملية معزول .NET 8:

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureContainerApps@1
  inputs:
    azureSubscription: <Name of your Azure subscription>
    imageToDeploy: 'mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0'
    containerAppName: <Name of your container app>
    resourceGroup: <Name of the resource group>

من الناحية المثالية، يمكنك إنشاء حاوية مخصصة خاصة بك في البنية الأساسية بدلا من استخدام صورة أساسية، كما هو موضح في هذا المثال. لمزيد من المعلومات، راجع التوزيع إلى Azure Container Apps من Azure Pipelines.

التوزيع إلى فتحة

هام

لا تدعم خطة الاستهلاك المرن الفتحات حاليا. لا تدعم تطبيقات Linux أيضا الفتحات عند التشغيل في خطة الاستهلاك ، وسيتم إيقاف دعم هذه التطبيقات في المستقبل.

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <Name of your Azure subscription>
  appName: <Name of the function app>
  # Agent VM image name
  vmImageName: 'windows-latest'

- task: AzureFunctionApp@2 # Add this at the end of your file
  inputs:
    azureSubscription: <Name of your Azure subscription>
    appType: functionApp # this specifies a Windows-based function app
    appName: $(appName)
    package: $(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip
    deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required. Deployment method. Default: auto.
    deployToSlotOrASE: true
    resourceGroupName: '<RESOURCE_GROUP>'
    slotName: '<SLOT_NAME>'

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

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

- task: AzureFunctionApp@1
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux
    appName: <Name of the function app>
    package: $(System.ArtifactsDirectory)/**/*.zip
    deployToSlotOrASE: true
    resourceGroupName: <Name of the resource group>
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: <Azure service connection>
    WebAppName: <name of the function app>
    ResourceGroupName: <name of resource group>
    SourceSlot: staging
    SwapWithProduction: true

عند استخدام فتحات التوزيع، يمكنك أيضا إضافة المهمة التالية لإجراء مبادلة الفتحة كجزء من النشر.

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: <AZURE_SERVICE_CONNECTION>
    WebAppName: <APP_NAME>
    ResourceGroupName: <RESOURCE_GROUP>
    SourceSlot: <SLOT_NAME>
    SwapWithProduction: true

إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية باستخدام Azure CLI

لإنشاء مسار بناء في Azure، استخدم az functionapp devops-pipeline create. يتم إنشاء مسار البناء لإنشاء وإصدار أي تغييرات في التعليمات البرمجية يتم إجراؤها في مستودعك. ينشئ الأمر ملف YAML جديدًا يحدد مسار البناء والإصدار ثم يلتزم به في مستودعك. تعتمد المتطلبات الأساسية لهذا الأمر على تعليمتك البرمجية.

  • إذا كانت عليمتك البرمجية في GitHub:

    • يجب أن يكون لديك أذونات الكتابة لاشتراكك.

    • يجب أن تكون مسؤول المشروع في Azure DevOps.

    • يجب أن يكون لديك أذونات لإنشاء رمز وصول شخصي GitHub (PAT) لديه أذونات كافية. لمزيد من المعلومات، راجع متطلبات إذن GitHub PAT.

    • يجب أن يكون لديك أذونات للالتزام بالفرع الرئيسي في مستودع GitHub حتى تتمكن من تثبيت ملف YAML المُنشأ تلقائيًا.

  • إذا كانت تعليمتك البرمجية في مستودعات Azure:

    • يجب أن يكون لديك أذونات الكتابة لاشتراكك.

    • يجب أن تكون مسؤول المشروع في Azure DevOps.

الخطوات التالية