أتمتة عمليات إنشاء مهمة Azure Stream Analytics واختبارها ونشرها باستخدام أدوات CI/CD
يمكنك استخدام حزمة Azure Stream Analytics CI/CD npm لإنشاء مشاريع Azure Stream Analytics Visual Studio Code أو Visual Studio تلقائيا واختبارها ونشرها. يمكن إنشاء المشاريع باستخدام أدوات التطوير أو يمكن تصديرها من وظائف Stream Analytics الحالية. توضح هذه المقالة كيفية استخدام حزمة npm مع أي نظام CI/CD. للنشر باستخدام خطوط أنابيب Azure، راجع استخدام Azure DevOps لإنشاء خط أنابيب CI/CD لمهمة Stream Analytics.
التثبيت
يمكنك تنزيل الحزمة مباشرة أو تثبيتها عالميا باستخدام الأمر npm install -g azure-streamanalytics-cicd . نوصي باستخدام الأمر، والذي يمكن استخدامه أيضا في مهمة البرنامج النصي PowerShell أو Azure CLI لخط أنابيب إنشاء في خطوط أنابيب Azure.
إنشاء المشروع
توفر حزمة asa-streamanalytics-cicd npm الأدوات اللازمة لإنشاء قوالب Azure Resource Manager لمشاريع Stream Analytics Visual Studio Code أو مشاريع Visual Studio. يمكنك أيضا استخدام حزمة npm على Windows و macOS و Linux دون تثبيت رمز Visual Studio أو Visual Studio.
بمجرد تثبيت الحزمة، استخدم الأمر التالي لإنشاء مشاريع Stream Analytics.
azure-streamanalytics-cicd build -project <projectFullPath> [-outputPath <outputPath>]
يقوم أمر الإنشاء بفحص بناء جملة الكلمة الأساسية وإخراج قالب Azure Resource Manager.
| المعلمة | الوصف |
|---|---|
-project |
المسار المطلق لملف asaproj.json لمشروع التعليمات البرمجية Visual Studio أو [اسم مشروعك].asaproj لمشروع Visual Studio. |
-outputPath |
مسار مجلد الإخراج ل Azure Resource Manager القوالب. إذا لم يتم تحديده ، وضع القوالب في الدليل الحالي. |
azure-streamanalytics-cicd build -project "/Users/username/projects/samplejob/asaproj.json"
عندما يتم إنشاء مشروع Stream Analytics بنجاح، فإنه ينشئ الملفين التاليين ضمن مجلد الإخراج:
ملف قالب Azure Resource Manager
[ProjectName].JobTemplate.jsonملف معلمة Azure Resource Manager
[ProjectName].JobTemplate.parameters.json
المعلمات الافتراضية في ملف parameters.json هي من الإعدادات الموجودة في التعليمات البرمجية Visual Studio أو مشروع Visual Studio. إذا كنت ترغب في النشر إلى بيئة أخرى، فاستبدل المعلمات وفقا لذلك.
القيم الافتراضية لكافة بيانات الاعتماد فارغة. أنت مطالب بتعيين القيم قبل النشر إلى 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 لمشروع التعليمات البرمجية Visual Studio أو [اسم مشروعك].asaproj لمشروع Visual Studio. |
-outputPath |
مسار مجلد الإخراج. إذا لم يتم تحديده ، وضع ملفات نتائج الإخراج في الدليل الحالي. |
-customCodeZipFilePath |
مسار الملف المضغوط للرمز المخصص C # ، مثل UDF أو deserializer ، إذا تم استخدامهما. قم بحزم DLLs في ملف مضغوط وحدد هذا المسار. |
azure-streamanalytics-cicd localrun -project "/Users/roger/projects/samplejob/asaproj.json"
ملاحظة
جافا سكريبت UDF يعمل فقط على Windows.
اختبار آلي
يمكنك استخدام حزمة CI/CD npm لتكوين الاختبارات التلقائية للبرنامج النصي Stream Analytics وتشغيله.
إضافة حالة اختبار
يتم وصف حالات الاختبار في ملف تكوين اختبار. للبدء، استخدم addtestcase الأمر لإضافة قالب حالة اختبار إلى ملف تكوين الاختبار. إذا لم يكن ملف تكوين الاختبار موجودا، إنشاء ملف افتراضيا.
azure-streamanalytics-cicd addtestcase -project <projectFullPath> [-testConfigPath <testConfigFileFullPath>]
| المعلمة | الوصف |
|---|---|
-project |
مسار ملف asaproj.json لمشروع التعليمات البرمجية Visual Studio أو [اسم مشروعك].asaproj لمشروع Visual Studio. |
-testConfigPath |
مسار ملف تكوين الاختبار. إذا لم يتم تحديده، سيتم البحث في الملف في \test ضمن الدليل الحالي للملف asaproj.json، مع اسم الملف الافتراضي testConfig.json. سيتم إنشاء ملف جديد إذا لم يكن موجودا. |
ملاحظة
Script القيمة في الملف testConfig.json الذي تم إنشاؤه هي فقط لتوفير السياق. لا يتم استخدامه في منطق الاختبار.
azure-streamanalytics-cicd addtestcase -project "/Users/roger/projects/samplejob/asaproj.json"
إذا كان ملف تكوين الاختبار فارغا، تتم كتابة المحتوى التالي في الملف. وإلا، تتم إضافة حالة اختبار إلى صفيف TestCases. يتم ملء تكوينات الإدخال الضرورية تلقائيا وفقا لملفات تكوين الإدخال، إن وجدت. وإلا، يتم تكوين القيم الافتراضية. يجب تحديد FilePath لكل إدخال ومخرج متوقع قبل تشغيل الاختبار. يمكنك تعديل التكوين يدويا.
{
"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],
"Required": true
}
]
}
]
}
يوضح المثال التالي حالتي اختبار، في استعلام باستخدام مدخلين. إذا كنت تريد أن يتجاهل التحقق من صحة الاختبار مخرجا معينا، فقم بتعيين الحقل المطلوب لهذا الإخراج المتوقع إلى false. في هذه الحالة، يجب ألا تكون الخاصية FilePath فارغة، ولكن لا يلزم أن تكون صالحة.
{
"Script": "C:\\...\\...\\samplejob.asaql",
"TestCases": [
{
"Name": "Case 1 - Testing all outputs at once",
"Inputs": [
{
"InputAlias": "entry",
"Type": "Data Stream",
"Format": "Json",
"FilePath": "C:\\...\\...\\Case1_Data_entry.json",
"ScriptType": "InputMock"
},
{
"InputAlias": "exit",
"Type": "Data Stream",
"Format": "Json",
"FilePath": "C:\\...\\...\\Case1_Data_exit.json",
"ScriptType": "InputMock"
}
],
"ExpectedOutputs": [
{
"OutputAlias": "output1",
"FilePath": "C:\\...\\...\\Case1_output1.json",
"Required": true
},
{
"OutputAlias": "output2",
"FilePath": "C:\\...\\...\\Case1_output2.json",
"Required": true
}
]
},
{
"Name": "Case 2 - Testing only one output at a time (recommended)",
"Inputs": [
{
"InputAlias": "entry",
"Type": "Data Stream",
"Format": "Json",
"FilePath": "C:\\...\\...\\Case2_Data_entry.json",
"ScriptType": "InputMock"
},
{
"InputAlias": "exit",
"Type": "Data Stream",
"Format": "Json",
"FilePath": "C:\\...\\...\Case2_Data_exit.json",
"ScriptType": "InputMock"
}
],
"ExpectedOutputs": [
{
"OutputAlias": "output1",
"FilePath": "C:\\...\\...\\Case2_output1.json",
"Required": true
},
{
"OutputAlias": "output2",
"FilePath": "[N/A]",
"Required": false
}
]
}
]
}
ملاحظة
حاليا ، القيمة الوحيدة المسموح بها للعنصر ScriptType هي InputMock، وهي أيضا القيمة الافتراضية. إذا قمت بتعيينها إلى أي قيمة أخرى، تجاهلها واستخدام القيمة الافتراضية (InputMock).
تشغيل اختبار وحدة
يمكنك استخدام الأمر التالي لتشغيل حالات اختبار متعددة لمشروعك. يتم إنشاء ملخص لنتائج الاختبار في مجلد الإخراج. تخرج العملية باستخدام الرمز 0 لجميع الاختبارات التي تم اجتيازها ؛ -1 للاستثناء حدث؛ -2 للاختبارات الفاشلة.
azure-streamanalytics-cicd test -project <projectFullPath> [-testConfigPath <testConfigFileFullPath>] [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
| المعلمة | الوصف |
|---|---|
-project |
مسار ملف asaproj.json لمشروع التعليمات البرمجية Visual Studio أو [اسم مشروعك].asaproj لمشروع Visual Studio. |
-testConfigPath |
المسار إلى ملف تكوين الاختبار. إذا لم يتم تحديده، سيتم البحث في الملف في \test ضمن الدليل الحالي للملف asaproj.json، مع اسم الملف الافتراضي testConfig.json. |
-outputPath |
مسار مجلد إخراج نتيجة الاختبار. إذا لم يتم تحديده ، وضع ملفات نتائج الإخراج في الدليل الحالي. |
-customCodeZipFilePath |
مسار الملف المضغوط للتعليمات البرمجية المخصصة مثل UDF أو deserializer ، إذا تم استخدامها. |
على سبيل المثال، في محطة طرفية ممكنة ل PowerShell، إذا كانت test كافة أصول الاختبار موجودة في مجلد فرعي من مجلد المشروع. مع كل إخراج تشغيل تجريبي مخزن في مجلد فرعي جديد مختوم زمنيا testResults من مجلد فرعي:
$projectPath = "C:\...\...\samplejob\"
azure-streamanalytics-cicd test `
-project ($projectPath + "asaproj.json") `
-testConfigPath ($projectPath + "test\testConfig.json") `
-outputPath ($projectPath + "test\testResults\$(Get-Date -Format "yyyyMMddHHmmss")\")
عند الانتهاء من جميع الاختبارات، يتم إنشاء ملخص لنتائج الاختبار بتنسيق JSON في مجلد الإخراج. يسمى ملف الملخص 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,
}
نشر في Azure
يمكنك استخدام قالب Azure Resource Manager وملفات المعلمات التي تم إنشاؤها من Build لنشر عملك في Azure.