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

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

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

التثبيت

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

npm install -g azure-streamanalytics-cicd

إنشاء مشروع

إشعار

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

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

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

يقوم أمر build بإجراء فحص لصياغة الكلمات المفتاحية ويولد قوالب 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
}

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

شغّل محليًا

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

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

مثال:

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

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

إشعار

تعمل UDFs بجافاسكريبت فقط على Windows.

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

استخدم حزمة CI/CD npm لتكوين وتشغيل الاختبارات الآلية لمشروعك في تحليلات التدفق الخاصة بك.

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

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

لنشر مشروع تحليلات التدفق باستخدام قوالب 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، راجع Deploy with a Resource Manager قالب ملف و Azure PowerShell.