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

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

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

ستستخدم مهمة AzureFunctionApp للنشر في Azure Functions. هناك الآن إصداران من مهمة AzureFunctionApp (AzureFunctionApp@1، AzureFunctionApp@2). يتضمن AzureFunctionApp@2 دعم التحقق المحسن الذي يجعل البنية الأساسية لبرنامج ربط العمليات التجارية أقل عرضة للفشل بسبب الأخطاء.

اختر إصدار المهمة في أعلى المقالة. بنيات YAML الأساسية لبرنامج ربط العمليات التجارية لا تتوفر لـ Azure DevOps 2019 والإصدارات السابقة.

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

بناء تطبيقك

  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:
- script: |
    dotnet restore
    dotnet build --configuration Release
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    arguments: '--configuration Release --output publish_output'
    projects: '*.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. هذه المهمة تتطلب اتصال خدمة Azure كمدخل. يخزن اتصال خدمة Azure بيانات الاعتماد للاتصال من Azure Pipelines إلى Azure.

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

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: AzureFunctionApp@1 # Add this at the end of your file
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux # default is functionApp
    appName: $(appName)
    package: $(System.ArtifactsDirectory)/**/*.zip
    #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 Name>'
    #slotName: '<Slot name>'

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

توزيع حاوية

يمكنك توزيع التعليمات البرمجية تلقائيًا إلى Azure Functions كحاوية مخصصة بعد كل بناء ناجح. لمعرفة المزيد حول الحاويات، راجع إنشاء وظيفة على Linux باستخدام حاوية مخصصة.

التوزيع باستخدام Azure Function App لمهمة الحاوية

أبسط طريقة للتوزيع إلى حاوية هي استخدام Azure Function App على مهمة Container Deploy.

للتوزيع، أضف القصاصة البرمجية التالية في نهاية ملف YAML:

trigger:
- main

variables:
  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: <Docker registry service connection>
  imageRepository: <Name of your image repository>
  containerRegistry: <Name of the Azure container registry>
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'

- task: AzureFunctionAppContainer@1 # Add this at the end of your file
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of the function app>'
    imageName: $(containerRegistry)/$(imageRepository):$(tag)

تدفع القصاصة البرمجية صورة Docker إلى Azure Container Registry. تسحب مهمة Azure Function App على Container Deploy صورة Docker المناسبة المقابلة للمستودع BuildId المحدد، ثم تنشر الصورة.

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

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

توضح القصاصة البرمجية 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

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

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

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

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

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

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

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

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

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

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

بناء تطبيقك

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

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

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

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

pool:
  vmImage: 'windows-latest'
steps:
- script: |
    dotnet restore
    dotnet build --configuration Release
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    arguments: '--configuration Release --output publish_output'
    projects: '*.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.

يتضمن إصدار v2 من المهمة دعم مكدسات التطبيقات الأحدث ل .NET وPython والعقدة. تتضمن المهمة عمليات التحقق من النشر المسبق للشبكات. عند وجود مشكلات في النشر المسبق، يتوقف النشر.

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

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: AzureFunctionApp@2 # Add this at the end of your file
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux # default is functionApp
    appName: $(appName)
    package: $(System.ArtifactsDirectory)/**/*.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 Name>'
    #slotName: '<Slot name>'

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

توزيع حاوية

يمكنك توزيع التعليمات البرمجية تلقائيًا إلى Azure Functions كحاوية مخصصة بعد كل بناء ناجح. لمعرفة المزيد حول الحاويات، راجع العمل مع الحاويات وAzure Functions .

التوزيع باستخدام Azure Function App لمهمة الحاوية

أبسط طريقة للتوزيع إلى حاوية هي استخدام Azure Function App على مهمة Container Deploy.

للتوزيع، أضف القصاصة البرمجية التالية في نهاية ملف YAML:

trigger:
- main

variables:
  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: <Docker registry service connection>
  imageRepository: <Name of your image repository>
  containerRegistry: <Name of the Azure container registry>
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'

- task: AzureFunctionAppContainer@1 # Add this at the end of your file
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of the function app>'
    imageName: $(containerRegistry)/$(imageRepository):$(tag)

تدفع القصاصة البرمجية صورة Docker إلى Azure Container Registry. تسحب مهمة Azure Function App على Container Deploy صورة Docker المناسبة المقابلة للمستودع BuildId المحدد، ثم تنشر الصورة.

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

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

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

- task: AzureFunctionApp@2
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux
    appName: <Name of the Function app>
    package: $(System.ArtifactsDirectory)/**/*.zip
    deploymentMethod: 'auto'
    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

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

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

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

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

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

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

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

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

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

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

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