أتمتة البنيات والاختبارات وعمليات التوزيع لمشروع Stream Analytics

تتيح لك حزمة Azure Stream Analytics CI/CD npm إنشاء مشاريع Stream Analytics واختبارها وتوزيعها تلقائيا. توضح هذه المقالة كيفية استخدام حزمة npm مع أي نظام CI/CD. لإعداد مسار باستخدام Azure DevOps، راجع استخدام Azure DevOps لإنشاء مسار CI/CD لوظيفة Stream Analytics.

إذا لم يكن لديك مشروع Stream Analytics، فقم بإنشاء مشروع باستخدام Visual Studio Code أو تصدير مشروع موجود من مدخل Microsoft Azure.

التثبيت

يمكنك تنزيل الحزمة من موقع npm، أو تشغيل الأمر التالي في المحطة الطرفية الخاصة بك.

npm install -g azure-streamanalytics-cicd

إنشاء مشروع

ملاحظة

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

سيتم إهمال قالب ARM القديم في المستقبل. من الآن فصاعدا، ستتلقى القوالب التي تم إنشاؤها عبر build --v2 التحديثات أو إصلاحات الأخطاء فقط.

azure-streamanalytics-cicd build --v2 --project <projectFullPath> [--outputPath <outputPath>]

يقوم أمر الإنشاء بفحص بناء جملة الكلمة الأساسية وينشئ قوالب Azure Resource Manager (ARM).

وسيطة الوصف
--project حدد ملف asaproj.json باستخدام مسار مطلق أو نسبي.
--outputPath حدد مجلد الإخراج لتخزين قوالب ARM باستخدام مسار مطلق أو نسبي. إذا outputPath لم يتم تحديدها، يتم وضع القوالب في الدليل الحالي.

مثال:

# Go to the project directory
cd <path-to-the-project>

# Build project
azure-streamanalytics-cicd build --v2 --project ./asaproj.json --outputPath ./Deploy

إذا تم إنشاء المشروع بنجاح، فسترى ملفي JSON تم إنشاؤها ضمن مجلد الإخراج:

  • ملف قالب ARM: [ProjectName].JobTemplate.json
  • ملف معلمة ARM: [ProjectName].JobTemplate.parameters.json

تأتي القيم الافتراضية لملف parameters.json من إعدادات المشروع. إذا كنت تريد التوزيع إلى بيئة أخرى، فاستبدل القيم وفقا لذلك.

القيم الافتراضية لجميع معلومات تسجيل الدخول هي null. أنت مطالب بتعيين القيم قبل التوزيع إلى Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

لاستخدام "الهوية المدارة" لـ Azure Data Lake Store Gen1 كمتلقي إخراج، تحتاج إلى توفير الوصول إلى كيان الخدمة باستخدام PowerShell قبل التوزيع إلى Azure. تعرف على المزيد حول كيفية توزيع ADLS Gen1 مع الهوية المدارة باستخدام قالب Resource Manager.

شغّل محليًا

إذا كان مشروعك قد حدد ملفات إدخال محلية، يمكنك تشغيل برنامج Stream Analytics النصي محلياً باستخدام الأمر localrun.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
وسيطة الوصف
--project حدد ملف asaproj.json باستخدام مسار مطلق أو نسبي.
--outputPath حدد مجلد الإخراج لتخزين قوالب ARM باستخدام مسار مطلق أو نسبي. إذا outputPath لم يتم تحديدها، يتم وضع القوالب في الدليل الحالي.
--customCodeZipFilePath مسار الملف المضغوط للتعليمات البرمجية المخصصة C#، مثل UDF أو deserializer، إذا تم استخدامها. قم بحزم مكتبات DLL في ملف مضغوط وحدد هذا المسار.

مثال:

# Go to the project directory
cd <path-to-the-project>

# Run project locally
azure-streamanalytics-cicd localrun --project ./asaproj.json"

ملاحظة

يعمل JavaScript UDF فقط على Windows.

الاختبار الآلي

يمكنك استخدام حزمة CI/CD npm لتكوين الاختبارات التلقائية وتشغيلها لمشروع Stream Analytics.

أضف حالة اختبار

azure-streamanalytics-cicd addtestcase --project <projectFullPath> [-testConfigPath <testConfigFileFullPath>]

يمكنك العثور على حالات الاختبار في ملف تكوين الاختبار.

وسيطة الوصف
--project حدد ملف asaproj.json باستخدام مسار مطلق أو نسبي.
--testConfigPath مسار ملف تكوين الاختبار. إذا لم يتم تحديده، يتم البحث عن الملف في \test ضمن الدليل الحالي لملف asaproj.json ، مع اسم الملف الافتراضي testConfig.json. يتم إنشاء ملف جديد إذا لم يكن موجودا.

مثال:

# Go to the project directory
cd <path-to-the-project>

# Add a test case
azure-streamanalytics-cicd addtestcase --project ./asaproj.json

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

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

{
  "Script": [Absolute path of your script],
  "TestCases": [
    {
      "Name": "Case 1",
      "Inputs": [
        {
          "InputAlias": [Input alias string],
          "Type": "Data Stream",
          "Format": "JSON",
          "FilePath": [Required],
          "ScriptType": "InputMock"
        }
      ],
      "ExpectedOutputs": [
        {
          "OutputAlias": [Output alias string],
          "FilePath": [Required],
          "IgnoreFields": [Fields to ignore for test validation, e.g., ["col1", "col2"]],
          "Required": true
        }
      ]
    }
  ]
}

تشغيل اختبار الوحدة

يمكنك استخدام الأمر التالي لتشغيل حالات اختبار متعددة لمشروعك. يتم إنشاء ملخص لنتائج الاختبار في مجلد الإخراج. تنتهي العملية بالتعليمة البرمجية 0 لجميع الاختبارات التي تم اجتيازها؛ حدث -1 استثناء؛ -2 من الاختبارات الفاشلة.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
وسيطة الوصف
--project مسار ملف asaproj.json .
--testConfigPath المسار إلى ملف تكوين الاختبار. إذا لم يتم تحديده، يتم البحث عن الملف في \test ضمن الدليل الحالي لملف asaproj.json ، مع اسم الملف الافتراضي testConfig.json.
--outputPath مسار مجلد إخراج نتيجة الاختبار. إذا لم يتم تحديده، يتم وضع ملفات نتائج الإخراج في الدليل الحالي.
--customCodeZipFilePath مسار الملف المضغوط للتعليمات البرمجية المخصصة مثل UDF أو deserializer، إذا تم استخدامها. تحتاج إلى حزم DLLs إلى ملف zip وتحديد المسار.

إذا تم تنفيذ حالات الاختبار، يمكنك العثور على ملف testResultSummary.json تم إنشاؤه في مجلد الإخراج.

{
  "Total": (integer) total_number_of_test_cases,
  "Passed": (integer) number_of_passed_test_cases,
  "Failed": (integer) number_of_failed_test_cases,
  "Script": (string) absolute_path_to_asaql_file,
  "Results": [ (array) detailed_results_of_test_cases
    {
      "Name": (string) name_of_test_case,
      "Status": (integer) 0(passed)_or_1(failed),
      "Time": (string) time_span_of_running_test_case,
      "OutputMatched": [ (array) records_of_actual_outputs_equal_to_expected_outputs
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": (string) path_to_the_expected_output_file,
          "Output": (string) path_to_the_actual_output_file
        }
      ],
      "OutputNotEqual": [ (array) records_of_actual_outputs_not_equal_to_expected_outputs
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": (string) path_to_the_expected_output_file,
          "Output": (string) path_to_the_actual_output_file
        }
      ],
      "OutputMissing": [ (array) records_of_actual_outputs_missing
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": (string) path_to_the_expected_output_file,
          "Output": ""
        }
      ],
      "OutputUnexpected": [ (array) records_of_actual_outputs_unexpected
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": "",
          "Output": (string) path_to_the_actual_output_file
        }
      ],
      "OutputUnrequired": [ (array) records_of_actual_outputs_unrequired_to_be_checked
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": (string) path_to_the_expected_output_file,
          "Output": (string) path_to_the_actual_output_file
        }
      ]
    }
  ],
  "Time": (string) time_span_of_running_all_test_cases,
}

ملاحظة

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

نشر في Azure

لنشر مشروع Stream Analytics باستخدام قوالب ARM، اتبع الخطوات التالية:

  1. الاتصال بحساب Azure الخاص بك:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. توزيع مشروع Stream Analytics الخاص بك:

    $templateFile = ".\Deploy\ClickStream-Filter.JobTemplate.json"
    $parameterFile = ".\Deploy\ClickStream-Filter.JobTemplate.parameters.json"
    New-AzResourceGroupDeployment `
      -Name devenvironment `
      -ResourceGroupName myResourceGroupDev `
      -TemplateFile $templateFile `
      -TemplateParameterFile $parameterFile
    

لمزيد من المعلومات حول توزيع الموارد باستخدام قوالب ARM، راجع التوزيع باستخدام ملف قالب Resource Manager وAzure PowerShell.

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