يدمج قوالب ARM مع خطوط أنابيب Azure

يمكنك دمج قوالب إدارة الموارد Azure (قوالب ARM) مع خطوط أنابيب Azure للتكامل المستمر والنشر المستمر (CI/CD). في هذه المقالة، يمكنك التعرف على طريقتين أكثر تقدمًا لنشر القوالب باستخدام خطوط أنابيب Azure Pipelines.

حدد خيارك

قبل المتابعة في هذه المقالة، دعونا ننظر في الخيارات المختلفة لنشر قالب ARM من خط أنابيب.

  • استخدم مهمة نشر قالب ARM. هذا الخيار هو الخيار الأسهل. يعمل هذا الأسلوب عندما تريد نشر قالب مباشرة من مستودع. لا يتم تغطية هذا الخيار في هذه المقالة ولكن بدًلا من ذلك يتم تغطيتها في البرنامج التعليمي التكامل المستمر للقوالب ARM مع خطوط أنابيب Azure. وهو يوضح كيفية استخدام مهمة نشر قالب ARM لنشر قالب من repo GitHub.

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

    يوفر Visual Studio مشروع مجموعة موارد Azure الذي يتضمن برنامج نصي PowerShell. مراحل البرنامج النصي artifacts من المشروع إلى حساب تخزين يمكن الوصول إلى إدارة الموارد. تعتبر artifacts عناصر في المشروع مثل القوالب المرتبطة والبرامج النصية وازناريو التطبيقات. إذا كنت ترغب في متابعة استخدام البرنامج النصي من المشروع، استخدم مهمة البرنامج النصي PowerShell الموضحة في هذه المقالة.

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

قم بإعداد مشروعك

تفترض هذه المقالة قالب ARM الخاص بك ومنظمة Azure DevOps جاهزة لإنشاء خط الأنابيب. توضح الخطوات التالية كيفية التأكد من أنك جاهز:

  • لديك مؤسسة Azure DevOps. في حالة عدم امتلاك حساب، أنشئ حساباً مجانياً. إذا كان لدى فريقك بالفعل مؤسسة Azure DevOps، فتأكد من أنك مسؤول عن مشروع Azure DevOps الذي تريد استخدامه.

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

  • لديك قالب ARM الذي يحدد البنية الأساسية للمشروع الخاص بك.

إنشاء مسار تدفق

  1. إذا لم تكن قد أضفت خط أنابيب من قبل، فستحتاج إلى إنشاء خط أنابيب جديد. من مؤسسة Azure DevOps، حدد خطوط الأنابيب وخطوط أنابيب جديدة.

    لقطة شاشة لزر إضافة مسار جديد

  2. حدد مكان تخزين التعليمات البرمجية. توضح الصورة التالية تحديد Azure Repos Git.

    لقطة شاشة لتحديد مصدر التعليمات البرمجية في Azure DevOps

  3. من هذا المصدر، حدد المستودع الذي يحتوي على التعليمات البرمجية للمشروع.

    لقطة شاشة لتحديد مستودع المشروع في Azure DevOps

  4. حدد نوع خط الأنابيب الذي تريد إنشاؤه. يمكنك تحديد بداية المسار.

    لقطة شاشة لتحديد نوع البنية الأساسية لبرنامج ربط العمليات التجارية المراد إنشاؤها في Azure DevOps

أنت مستعد إما لإضافة مهمة Azure PowerShell أو نسخ الملف ونشر المهام.

مهمة Azure PowerShell

يوضح هذا القسم كيفية تكوين النشر المستمر باستخدام مهمة واحدة تقوم بتشغيل البرنامج النصي PowerShell في المشروع الخاص بك. إذا كنت بحاجة إلى برنامج نصي PowerShell يقوم بنشر قالب، راجع Deploy-AzTemplate.ps1 أو Deploy-AzureResourceGroup.ps1.

ينشئ الملف YAML التالي مهمة Azure PowerShell:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'script-connection'
    ScriptType: 'FilePath'
    ScriptPath: './Deploy-AzTemplate.ps1'
    ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
    azurePowerShellVersion: 'LatestVersion'

عند تعيين المهمة إلى AzurePowerShell@5، يستخدم خط الأنابيب الوحدة النمطية Az. إذا كنت تستخدم الوحدة النمطية AzureRM في البرنامج النصي، قم بتعيين المهمة إلى AzurePowerShell@3.

steps:
- task: AzurePowerShell@3

من أجلazureSubscription، قم بتوفير اسم اتصال الخدمة الذي قمت بإنشائه.

inputs:
    azureSubscription: '<your-connection-name>'

من أجلscriptPath، توفير المسار النسبي من ملف خط أنابيب إلى البرنامج النصي الخاص بك. يمكنك البحث في المستودع الخاص بك لرؤية المسار.

ScriptPath: '<your-relative-path>/<script-file-name>.ps1'

في ScriptArguments، قم بتوفير أي معلمات مطلوبة بواسطة البرنامج النصي. يظهر المثال التالي بعض المعلمات الخاصة بالبرنامج النصي، ولكن ستحتاج إلى تخصيص المعلمات للبرنامج النصي.

ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json

عند تحديد "حفظ" ، يتم تشغيل خط أنابيب البنية تلقائيًا. عد إلى ملخص لخط أنابيب البناء الخاص بك، ومشاهدة الحالة.

لقطة شاشة لعرض نتائج البنية الأساسية لبرنامج ربط العمليات التجارية في Azure DevOps

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

قم بنسخ المهام ونشرها

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

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

يعرض YAML التالي مهمة نسخ الملف Azure.

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy

هناك عدة أجزاء من هذه المهمة لمراجعة البيئة الخاصة بك. SourcePathيشير إلى موقع artifacts نسبة إلى ملف خط أنابيب.

SourcePath: '<path-to-artifacts>'

من أجلazureSubscription، قم بتوفير اسم اتصال الخدمة الذي قمت بإنشائه.

azureSubscription: '<your-connection-name>'

للتخزين واسم الحاوية، قم بتوفير أسماء حساب التخزين والحاوية التي تريد استخدامها لتخزين القطع الأثرية. يجب أن يكون اسم حساب التخزين فريدًا.

storage: '<your-storage-account-name>'
ContainerName: '<container-name>'

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

يظهر YAML التالية مهمة نشر قالب إدارة الموارد Azure Resource Manager:

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

وهناك عدة أجزاء من هذه المهمة يتعين استعراضها بمزيد من التفصيل.

  • deploymentScopeحدد نطاق التوزيع من الخيارات: Management Group وSubscriptionResource Group . لمعرفة المزيد عن النطاقات، راجع نطاقات النشر.

  • من أجلazureResourceManagerConnection، قم بتوفير اسم اتصال الخدمة الذي قمت بإنشائه.

  • subscriptionIdتوفير معرف الاشتراك الهدف ID. تنطبق هذه الخاصية فقط على نطاق توزيع Resource Group ونطاق نشر الاشتراك.

  • resourceGroupName و: location توفير اسم وموقع مجموعة الموارد التي تريد النشر إليها. تقوم المهمة بإنشاء مجموعة الموارد إذا لم تكن موجودة.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLinkتوفير الارتباط للقالب المرحلي. عند تعيين القيمة، استخدم المتغيرات التي تم إرجاعها من مهمة نسخ الملف. يرتبط المثال التالي بقالب يسمى mainTemplate.js. يتم تضمين المجلد المسمى قوالب لأن حيث نسخ الملف المهمة نسخ الملف إلى. في خط الأنابيب الخاص بك، قم بتوفير المسار إلى القالب واسم القالب.

    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    

خط الأنابيب الخاص بك تبدو وكأنها:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

عند تحديد "حفظ" ، يتم تشغيل خط أنابيب البنية تلقائيًا. ضمن الإطار المهام، حدد المهمة لرؤية حالة المهمة.

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