إعداد النشر المستمر مع Chocolatey

إشعار

سيتم إيقاف Azure Automation State Configuration في 30 سبتمبر 2027، يرجى الانتقال إلى Azure Machine Configuration بحلول ذلك التاريخ. لمزيد من المعلومات، راجع إعلان نشر المدونة. تجمع خدمة Azure Machine Configuration بين ميزات ملحق DSC، وتكوين حالة أتمتة Azure، والميزات الأكثر شيوعا المطلوبة من ملاحظات العملاء. يتضمن تكوين جهاز Azure أيضا دعم الجهاز المختلط من خلال الخوادم الممكنة بواسطة Arc.

تنبيه

تم إيقاف Azure Automation DSC ل Linux في 30 سبتمبر 2023. لمزيد من المعلومات، راجع الإعلان.

في عالم DevOps، توجد العديد من الأدوات للمساعدة في نقاط مختلفة في تدفقات التكامل المستمر. تمثل ميزة تكوين حالة Azure Automation إضافة جديدة إلى الخيارات التي يمكن لفرق DevOps استخدامها.

تُعد Azure Automation خدمة مُدارة في Microsoft Azure تتيح لك أتمته المهام المختلفة باستخدام دفاتر التشغيل والعقد والموارد المشتركة، مثل بيانات الاعتماد والجداول والمتغيرات العمومية. يوسع Azure Automation State Configuration نطاق إمكانية الأتمتة هذه لتشمل أدوات PowerShell Desired State Configuration (DSC). إليك نظرة عامةممتازة.

توضح هذه المقالة كيفية إعداد التوزيع المستمر (CD) لجهاز كمبيوتر يعمل بنظام التشغيل Windows. يمكنك بسهولة توسيع التقنية لتشمل العديد من أجهزة كمبيوتر Windows حسب الضرورة في الدور، على سبيل المثال، موقع ويب، والانتقال من هناك إلى المزيد من الأدوار.

النشر المستمر لأجهزة IaaS الظاهرية

على مستوى عالي

يحدث الكثير في هذه المسألة، ولكن لحسن الحظ يمكننا تقسيم الأمر إلى عمليتين رئيسيتين:

  • كتابة التعليمات البرمجية واختبارها، ثم إنشاء ونشر حزم التثبيت للإصدارات الرئيسية والثانوية من النظام.
  • إنشاء وإدارة الأجهزة الظاهرية التي تثبت وتنفذ التعليمة البرمجية في الحزم.

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

نظرة عامة على المكون

مديري الحزمة مثل apt-get معروفين جيدًا في العالم Linux، ولكنهما ليس بالقدر ذاته في Windows. Chocolatey هو مدير حزمة لنظام التشغيل Windows. سكوت هانسلمان بلوق وظيفة عن Chocolatey هو مقدمة كبيرة. يسمح لك Chocolatey باستخدام سطر الأوامر لتثبيت الحزم من مستودع مركزي على نظام تشغيل Windows. يمكنك إنشاء وإدارة مستودعك، ويمكنك تثبيت حزم Chocolatey من أي عدد من المستودعات التي قمت بتعيينها.

PowerShell DSC هو أداة PowerShell التي تسمح لك بإعلان التكوين الذي تريده للجهاز. على سبيل المثال، إذا كنت تُريد حزم Chocolatey مُثبتة، وIIS مُثبتة ومدخل 80 مفتوح وإصدار 1.0.0 لموقع الويب مثبت، فإن Local Configuration Manager DSC (LCM) ينفذ هذا التكوين. يسحب DSC الخادم الذي يحتفظ بمستودع التكوينات لأجهزتك. يتحقق LCM الموجود على كل جهاز بشكل دوري لمعرفة ما إذا كان التكوين مطابقًا للتكوين المخزن. ويُمكنه إما الإبلاغ عن الحالة أو محاولة إعادة الجهاز إلى وضع المحاذاة مع التكوين المُخزن. يُمكنك تحرير التكوين المُخزن على خادم السحب بحيث يتسبب ذلك في دخول الجهاز أو مجموعة الأجهزة في وضع محاذاة مع التكوين الذي تم تغييره.

يمثل مورد DSC وحدة نمطية لتعليمة برمجية تحتوي على إمكانيات معينة، مثل إدارة الشبكات أو Active Directory أوSQL Server. يعرف مورد Chocolatey DSC كيفية الوصول إلى خادم NuGet وتنزيل الحزم وتثبيت الحزم وتنفيذ مهام أخرى. توجد العديد من موارد DSC الأخرى في معرض PowerShell. تقوم بتثبيت هذه الوحدات النمطية على خادم سحب تكوين Azure Automation State لتستخدمها التكوينات الخاصة بك.

توفر قوالب Resource Manager طريقة تعريفية لإنشاء موارد للبنية الأساسية الخاصة بك مثل:

  • الشبكات والشبكات الفرعية
  • أمان الشبكة
  • التوجيه
  • موازنات التحميل،
  • بطاقات NIC والأجهزة الظاهرية وغيرها

للمقارنة بين نموذج توزيع Resource Manager (التعريفي) ونموذج توزيع Azure الكلاسيكي (إلزامي)، راجع Azure Resource Manager مقابل التوزيع الكلاسيكي. تتضمن هذه المقالة حول موفري الموارد الأساسية: الحساب والتخزين وشبكة الاتصال.

تتمثل إحدى الميزات الرئيسية لقالب Resource Manager في قدرته على تثبيت ملحق الجهاز الظاهري أثناء توفير الجهاز الظاهري. يمتلك ملحق الجهاز الظاهري إمكانات مُحددة، مثل تشغيل برنامج نصي مخصص وتثبيت برنامج مكافحة الفيروسات، وتشغيل برنامج نصي لتكوين DSC. يوجد العديد من أنواع ملحقات الأجهزة الظاهرية الأخرى.

نظرة سريعة على المخطط

بدءًا من الأعلى، تكتب التعليمة البرمجية الخاصة بك، ثم تقوم بإنشائها واختبارها، ثم إنشاء حزمة تثبيت. يُمكن لـChocolatey التعامل مع أنواع مختلفة من حزم التثبيت، مثل MSI وMSU وZIP. ولديك إمكانات PowerShell الكاملة للقيام بالتثبيت الفعلي إذا لم تكن إمكانات Chocolatey الأصلية قادرة على ذلك. وضع الحزمة في مكان ما يمكن الوصول إليها - مستودع حزمة. يستخدم مثال الاستخدام هذا مجلد عمومي في حساب تخزين Azure blob، ولكن يمكن أن يكون في أي مكان. يعمل Chocolatey في الأصل مع خوادم NuGet، وعدد آخر قليل لإدارة بيانات تعريف الحزمة. توضح هذه المقالة الخيارات. يستخدم مثال الاستخدام هذا NuGet. تُعد Nuspec بيانات تعريف بخصوص حزمك. يتم تجميع معلومات Nuspec في NuPkg وتخزينها على خادم NuGet. عندما يطلب التكوين حزمة بالاسم ويشير إلى خادم NuGet، يقوم مورد DSC Chocolatey على الجهاز الظاهري بالاستحواذ على الحزمة وتثبيتها. يمكنك أيضًا طلب إصدار معين من حزمة.

في أسفل يسار الصورة، يوجد قالب Azure Resource Manager. في مثال الاستخدام هذا، يسجل ملحق الجهاز الظاهري، الجهاز الظاهري مع خادم سحب Azure Automation State Configuration كعقدة. يتم تخزين التكوين في خادم السحب مرتين: مرة كنص عادي ومرة مُجمع كملف MOF. في مدخل Microsoft Azure، يُمثل MOF تكوين عقدة، بدلًا من تكوين بسيط.

من السهل نسبيا إنشاء Nuspec وتحويله برمجيا وتخزينه في خادم NuGet. تتطلب الخطوة التالية للتوزيع المستمر المهام التالية لمرة واحدة:

  • إعداد خادم السحب
  • تسجيل العقد الخاصة بك مع الخادم
  • إنشاء التكوين الأولي على الخادم

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

إذا كنت لا تبدأ بقالب Resource Manager، فهناك أوامر PowerShell لمساعدتك في تسجيل الأجهزة الظاهرية الخاصة بك مع خادم السحب. لمزيد من المعلومات، راجع تهيئة الأجهزة للإدارة بواسطة Azure Automation State Configuration.

حول مثال الاستخدام

يبدأ مثال الاستخدام في هذه المقالة مع جهاز ظاهر من صورة R2 Server 2012 Windows عامة من معرض Azure. يمكنك البدء من أي صورة مخزنة، ثم التعديل من هناك باستخدام تكوين DSC. ولكن، يُعد تغيير التكوين الذي يتم تحويله إلى صورة أصعب بكثير من تحديث التكوين ديناميكيًا باستخدام DSC.

ليس لديك لاستخدام قالب Resource Manager وملحق الجهاز الظاهري لاستخدام هذه التقنية مع أجهزتك الظاهرية. ولا يتعين أن تكون أجهزتك الظاهرية على نظام Azure لتكون تحت إدارة CD. ما عليك سوى تثبيت Chocolatey وتكوين LCM على الجهاز الظاهري حتى يعرف مكان خادم السحب.

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

يوجد المصدر الكامل لمثال الاستخدام هذا في مشروع Visual Studio هذا على GitHub.

الخطوة 1: إعداد خادم السحب وحساب Automation

قم بتشغيل الأوامر التالية في جلسة عمل PowerShell مصادق عليها(Connect-AzAccount):

New-AzResourceGroup -Name MY-AUTOMATION-RG -Location MY-RG-LOCATION-IN-QUOTES
$newAzAutomationAccountSplat = @{
    ResourceGroupName = 'MY-AUTOMATION-RG'
    Location = 'MY-RG-LOCATION-IN-QUOTES'
    Name = 'MY-AUTOMATION-ACCOUNT'
}
New-AzAutomationAccount @newAzAutomationAccountSplat

تستغرق هذه الخطوة بضع دقائق أثناء إعداد خادم السحب.

يمكنك إنشاء حساب التنفيذ التلقائي في أي من مناطق Azure التالية:

  • East US 2
  • South Central US
  • ولاية فرجينيا الأمريكية
  • أوروبا الغربية
  • جنوب شرق آسيا
  • شرق اليابان
  • وسط الهند‬
  • جنوب شرق أستراليا
  • وسط كندا
  • أوروبا الشمالية

الخطوة 2: إجراء تعديل لتحويل ملحق الجهاز الظاهري إلى قالب Resource Manager

تفاصيل تسجيل الجهاز الظاهري (باستخدام ملحق الجهاز الظاهري PowerShell DSC) المتوفر في قالب التشغيل السريع لـ Azure. تسجل هذه الخطوة جاهزك الظاهري الجديد مع خادم السحب في قائمة عقد تكوين الحالة. جزء من هذا التسجيل هو تحديد تكوين العقدة ليتم تطبيقه على العقدة. لا يجب أن يكون تكوين العقدة هذا موجودا بعد في خادم السحب، ولكن تحتاج إلى اختيار اسم العقدة واسم التكوين. على سبيل المثال، العقدة هي isvbox واسم التكوين هو ISVBoxConfig. اسم تكوين العقدة الذي تحدده في DeploymentTemplate.json هو ISVBoxConfig.isvbox.

الخطوة 3: إضافة موارد DSC المطلوبة إلى خادم السحب

يمكن لمعرض PowerShell تثبيت موارد DSC في حساب Azure Automation الخاص بك. انتقل إلى المورد الذي تريده وحدد Deploy to Azure Automation.

مثال معرض PowerShell

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

يوجد أيضًا نهج يدوي، يستخدم مرة واحدة فقط لكل مورد، ما لم ترغب في ترقيته لاحقًا. للمزيد من المعلومات حول تأليف الوحدات النمطية لتكامل PowerShell، راجع تأليف الوحدات النمطية للتكامل لـAzure Automation.

إشعار

تختلف بنية المجلد في الوحدة النمطية لتكامل PowerShell لجهاز كمبيوتر بنظام تشغيل Windows قليلًا عن بنية المجلد المتوقع بواسطة Azure Automation.

  1. تثبيت Windows Managment Framework v5 (لا يلزم تثبيته لـWindows 10).

  2. تثبيت الوحدة النمطية للتكامل.

    Install-Module -Name MODULE-NAME`    <—grabs the module from the PowerShell Gallery
    
  3. انسخ مجلد الوحدة النمطية من C:\Program Files\WindowsPowerShell\Modules\MODULE-NAME إلى مجلد مؤقت.

  4. حذف النماذج والوثائق من المجلد الرئيسي.

  5. قم بضغط المجلد الرئيسي، وتسمية الملف المضغوط باسم المجلد.

  6. ضع الملف المضغوط في موقع HTTP يمكن الوصول إليه، مثل مخزن البيانات الثنائية في حساب Azure Storage.

  7. قم بتشغيل الأمر التالي.

    $newAzAutomationModuleSplat = @{
        ResourceGroupName = 'MY-AUTOMATION-RG'
        AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
        Name = 'MODULE-NAME'
        ContentLinkUri = 'https://STORAGE-URI/CONTAINERNAME/MODULE-NAME.zip'
    }
    New-AzAutomationModule @newAzAutomationModuleSplat
    

المثال المضمن ينفذ هذه الخطوات لـcChoco وxNetworking.

الخطوة 4: إضافة تكوين العقدة إلى خادم السحب

لا يوجد شيء خاص حول المرة الأولى التي تقوم فيها باستيراد التكوين إلى خادم السحب والتحول برمجيًا. جميع الواردات أو التجميعات اللاحقة لنفس التكوين تبدو بالضبط نفسها. في كل مرة تقوم فيها بتحديث الحزمة الخاصة بك وتحتاج إلى دفعها إلى الإنتاج، تقوم بهذه الخطوة بعد التأكد من صحة ملف التكوين - بما في ذلك الإصدار الجديد من الحزمة الخاصة بك. إليك ملف ISVBoxConfig.ps1التكوين :

Configuration ISVBoxConfig
{
    Import-DscResource -ModuleName cChoco
    Import-DscResource -ModuleName xNetworking

    Node 'isvbox' {

        cChocoInstaller installChoco
        {
            InstallDir = 'C:\choco'
        }

        WindowsFeature installIIS
        {
            Ensure = 'Present'
            Name   = 'Web-Server'
        }

        xFirewall WebFirewallRule
        {
            Direction    = 'Inbound'
            Name         = 'Web-Server-TCP-In'
            DisplayName  = 'Web Server (TCP-In)'
            Description  = 'IIS allow incoming web site traffic.'
            Enabled       = 'True'
            Action       = 'Allow'
            Protocol     = 'TCP'
            LocalPort    = '80'
            Ensure       = 'Present'
        }

        cChocoPackageInstaller trivialWeb
        {
            Name      = 'trivialweb'
            Version   = '1.0.0'
            Source    = 'MY-NUGET-V2-SERVER-ADDRESS'
            DependsOn = '[cChocoInstaller]installChoco','[WindowsFeature]installIIS'
        }
    }
}

تم تعديل البرنامج النصي التالي New-ConfigurationScript.ps1 لاستخدام الوحدة النمطية Az PowerShell:

$importAzAutomationDscConfigurationSplat = @{
    ResourceGroupName = 'MY-AUTOMATION-RG'
    AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
    SourcePath = 'C:\temp\AzureAutomationDsc\ISVBoxConfig.ps1'
    Published = -Published
    Force = -Force
}
Import-AzAutomationDscConfiguration @importAzAutomationDscConfigurationSplat

$startAzAutomationDscCompilationJobSplat = @{
    ResourceGroupName = 'MY-AUTOMATION-RG'
    AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
    ConfigurationName = 'ISVBoxConfig'
}
$jobData = Start-AzAutomationDscCompilationJob @startAzAutomationDscCompilationJobSplat

$compilationJobId = $jobData.Id

$getAzAutomationDscCompilationJobSplat = @{
    ResourceGroupName = 'MY-AUTOMATION-RG'
    AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
    Id = $compilationJobId
}
Get-AzAutomationDscCompilationJob @getAzAutomationDscCompilationJobSplat

الخطوة 5: إنشاء بيانات تعريف الحزمة والاحتفاظ بها

لكل حزمة قمت بوضعها في مستودع الحزمة، تحتاج إلى Nuspec يصفها. يجب أن يتم تجميعها وتخزينها على خادم NuGet الخاص بك. لمزيد من المعلومات، راجع [إنشاء حزمة NuGet باستخدام nuget.exe CLI].

يمكنك استخدام MyGet.org كخادم NuGet. يمكنك شراء هذه الخدمة، ولكن إليك بداية مجانية SKU. للحصول على إرشادات حول تثبيت خادم NuGet الخاص بك لحزمك الخاصة، راجع الوثائق على Nuget.org.

الخطوة 6: ربط كل ما سبق معًا

في كل مرة يجتاز إصدار تأكيد الجودة وتتم الموافقة على نشره، يتم إنشاء الحزمة، ويتم تحديث nuspec وnupkg ونشرهم على خادم NuGet. يجب تحديث التكوين (الخطوة 4) برقم الإصدار الجديد. ثم أرسله إلى خادم السحب وقم بتحويله برمجيا.

من الآن فصاعدًا، يتُرك الأمر للأجهزة الظاهرية التي تعتمد على هذا التكوين لسحب التحديث وتثبيته. كل من هذه التحديثات بسيطة - مجرد سطر أو اثنين من PowerShell. بالنسبة إلى Azure DevOps، يتم تغليف بعضها في مهام الإنشاء التي يمكنك ربطها معا في بنية. توفر هذه المقالة المزيد من التفاصيل. هذا repo GitHub يُفصل مهام الإنشاء المتاحة.

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