مشاركة عبر


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

تتيح لك حزمة Azure Stream Analytics (ASA) 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
  • ملف معلمة Azure Resource Manager: [ProjectName].JobTemplate.parameters.json

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

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

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

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

شغّل محليًا

إذا كان مشروعك قد حدد ملفات إدخال محلية، يمكنك تشغيل برنامج 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.