تحزيم تطبيق

توضح هذه المقالة كيفية تحزيم تطبيق Service Fabric وجعله جاهزًا للنشر.

تخطيط الحزمة

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

tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│   ApplicationManifest.xml
│
└───MyServiceManifest
    │   ServiceManifest.xml
    │
    ├───MyCode
    │       MyServiceHost.exe
    │
    ├───MyConfig
    │       Settings.xml
    │
    └───MyData
            init.dat

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

استخدام SetupEntryPoint

السيناريوهات النموذجية لاستخدام SetupEntryPoint هي عندما تحتاج إلى تشغيل ملف تنفيذي قبل بدء تشغيل الخدمة أو عندما تحتاج إلى تنفيذ عملية بامتيازات مرتفعة. على سبيل المثال:

  • إعداد وتهيئة متغيرات البيئة التي تحتاجها الخدمة القابلة للتنفيذ. لا يقتصر ذلك فقط على الملفات التنفيذية المكتوبة عبر نماذج برمجة Service Fabric. على سبيل المثال، يحتاج npm.exe إلى بعض متغيرات البيئة التي تم تكوينها لتوزيع تطبيق Node.js.
  • إعداد التحكم في الوصول عن طريق تثبيت شهادات الأمان.

لمزيد من المعلومات حول كيفية تكوين SetupEntryPoint، راجع تكوين النهج لنقطة إدخال إعداد خدمة

تكوين

إنشاء حزمة باستخدام Visual Studio

إذا استخدمت Visual Studio لإنشاء تطبيقك، يمكنك استخدام الأمر حزمة لإنشاء حزمة تتطابق تلقائيًا مع التخطيط الموضح أعلاه.

لإنشاء حزمة، انقر بزر الماوس الأيمن فوق مشروع التطبيق في مستكشف الحلول واختر الأمر حزمة:

تعبئة تطبيق باستخدام Visual Studio

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

إنشاء حزمة حسب سطر الأوامر

من الممكن أيضًا تحزيم تطبيقك برمجيًا باستخدام msbuild.exe. في الخلفية، يقوم Visual Studio بتشغيله بحيث يكون الإخراج هو نفسه.

D:\Temp> msbuild HelloWorld.sfproj /t:Package

اختبار الحزمة

يمكنك التحقق من بنية الحزمة محليًا من خلال PowerShell باستخدام الأمر Test-ServiceFabricApplicationPackage. يتحقق هذا الأمر من مشكلات تحليل البيانات ويتحقق من كافة المراجع. يتحقق هذا الأمر فقط من الصحة الهيكلية للأدلة والملفات الموجودة في الحزمة. لا يتحقق من أي من محتويات التعليمات البرمجية أو حزمة البيانات بخلاف التحقق من وجود جميع الملفات الضرورية.

Test-ServiceFabricApplicationPackage .\MyApplicationType
False
Test-ServiceFabricApplicationPackage : The EntryPoint MySetup.bat is not found.
FileName: C:\Users\servicefabric\AppData\Local\Temp\TestApplicationPackage_7195781181\nrri205a.e2h\MyApplicationType\MyServiceManifest\ServiceManifest.xml

يوضح هذا الخطأ أن ملف MySetup.bat المشار إليه في بيان الخدمة SetupEntryPoint مفقود من حزمة التعليمات البرمجية. بعد إضافة الملف المفقود، يمر التحقق من التطبيق:

tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│   ApplicationManifest.xml
│
└───MyServiceManifest
    │   ServiceManifest.xml
    │
    ├───MyCode
    │       MyServiceHost.exe
    │       MySetup.bat
    │
    ├───MyConfig
    │       Settings.xml
    │
    └───MyData
            init.dat
Test-ServiceFabricApplicationPackage .\MyApplicationType
True

إذا كان التطبيق الخاص بك يحتوي على معلمات التطبيق المحددة، يمكنك اجتيازها في Test-ServiceFabricApplicationPackage للتحقق من الصحة المناسب.

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

بمجرد تحزيم التطبيق بشكل صحيح واجتياز التحقق من الصحة، فكر في ضغط الحزمة لعمليات نشر أسرع.

ضغط حزمة

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

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

يمكنك ضغط حزمة عن طريق تشغيل الأمر PowerShell Copy-ServiceFabricApplicationPackage من خلال التبديل CompressPackage. يمكنك إلغاء ضغط الحزمة بنفس الأمر باستخدام التبديل UncompressPackage.

يقوم الأمر التالي بضغط الحزمة دون نسخها إلى مخزن الصور. يمكنك نسخ حزمة مضغوطة إلى مجموعة واحدة أو أكثر من مجموعات Service Fabric، حسب الحاجة، باستخدام Copy-ServiceFabricApplicationPackage بدون العلامة SkipCopy. تتضمن الحزمة الآن ملفات مضغوطة للحزم code وconfig وdata. لا يتم ضغط بيان التطبيق وبيانات الخدمة، لأنها مطلوبة للعديد من العمليات الداخلية. على سبيل المثال، تحتاج مشاركة الحزم واسم نوع التطبيق واستخراج الإصدار لعمليات التحقق المعينة إلى الوصول إلى البيانات. إن ضغط البيانات من شأنه أن يجعل هذه العمليات غير فعالة.

tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│   ApplicationManifest.xml
│
└───MyServiceManifest
    │   ServiceManifest.xml
    │
    ├───MyCode
    │       MyServiceHost.exe
    │       MySetup.bat
    │
    ├───MyConfig
    │       Settings.xml
    │
    └───MyData
            init.dat
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -CompressPackage -SkipCopy
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│   ApplicationManifest.xml
│
└───MyServiceManifest
       ServiceManifest.xml
       MyCode.zip
       MyConfig.zip
       MyData.zip

بدلاً من ذلك، يمكنك ضغط ونسخ الحزمة باستخدام Copy-ServiceFabricApplicationPackage في خطوة واحدة. إذا كانت الحزمة كبيرة، فقم بتوفير مهلة عالية بما يكفي لإتاحة الوقت لكل من ضغط الحزمة والتحميل إلى المجموعة.

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -ApplicationPackagePathInImageStore MyApplicationType -ImageStoreConnectionString fabric:ImageStore -CompressPackage -TimeoutSec 5400

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

إذا لم يكن تزويد الاختلاف خيارًا ويتعين عليك تضمين الحزم، فقم بإنشاء إصدارات جديدة للحزم code وconfig وdata لتجنب عدم تطابق المجموع الاختباري. يعد إنشاء إصدارات جديدة للحزم التي لم تتغير ضروريًا عند استخدام حزمة مضغوطة، بغض النظر عما إذا كان الإصدار السابق يستخدم الضغط أم لا.

يتم الآن تحزيم الحزمة بشكل صحيح والتحقق من صحتها وضغطها (إذا لزم الأمر)، بحيث تكون جاهزة للنشر في واحدة أو أكثر من مجموعات Service Fabric.

ضغط الحزم عند النشر باستخدام Visual Studio

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

    <PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
        <ClusterConnectionParameters ConnectionEndpoint="mycluster.westus.cloudapp.azure.com" />
        <ApplicationParameterFile Path="..\ApplicationParameters\Cloud.xml" />
        <CopyPackageParameters CompressPackage="true"/>
    </PublishProfile>

إنشاء sfpkg

بدءًا من الإصدار 6.1، يسمح Service Fabric بالتزويد من متجر خارجي. باستخدام هذا الخيار، لا يلزم نسخ حزمة التطبيق إلى مخزن الصور. بدلاً من ذلك، يمكنك إنشاء ملف sfpkg وتحميله إلى متجر خارجي، ثم توفير عنوان URI للتنزيل إلى Service Fabric عند التزويد. يمكن تزويد نفس الحزمة إلى مجموعات متعددة. يوفر التزويد من المتجر الخارجي الوقت المطلوب لنسخ الحزمة إلى كل مجموعة.

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

لإنشاء ملف sfpkg، ابدأ بمجلد يحتوي على حزمة التطبيق الأصلية، سواء أكانت مضغوطة أم لا. ثم استخدم أي أداة مساعدة لضغط المجلد بالملحق "‎.sfpkg". على سبيل المثال، استخدم ZipFile.CreateFromDirectory.

ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);

يتعين تحميل sfpkg إلى المتجر الخارجي خارج النطاق، خارج Service Fabric. يمكن أن يكون المخزن الخارجي أي مخزن يعرض نقطة نهاية REST http أو https. أثناء التزويد، يقوم Service Fabric بتنفيذ عملية GET لتنزيل حزمة التطبيق sfpkg، لذلك يتعين أن يسمح المتجر بالوصول للقراءة فقط للحزمة.

لتزويد الحزمة، استخدم التزويد الخارجي، والذي يتطلب تنزيل عنوان URI ومعلومات نوع التطبيق.

ملاحظة

لا يدعم التزويد استنادًا إلى المسار النسبي لمخزن الصور ملفات sfpkg حاليًا. لذلك، لا ينبغي نسخ sfpkg إلى مخزن الصور.

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

يصف نشر التطبيقات وإزالتها كيفية استخدام PowerShell لإدارة مثيلات التطبيقات

تصف إدارة معلمات التطبيق لبيئات متعددة كيفية تكوين المعلمات ومتغيرات البيئة لمثيلات التطبيق المختلفة.

يصف تكوين نُهج الأمان للتطبيق الخاص بك كيفية تشغيل الخدمات ضمن نُهج الأمان لتقييد الوصول.