你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
自动执行流分析项目的生成、测试和部署
Azure 流分析 (ASA) CI/CD npm 包让你可以自动生成、测试和部署流分析项目。 本文演示如何在任何 CI/CD 系统中使用 npm 包。 若要使用 Azure DevOps 设置管道,请查看使用 Azure DevOps 为流分析作业创建 CI/CD 管道。
如果你没有流分析项目,请使用 Visual Studio Code 创建一个,或者从 Azure 门户导出现有项目。
安装
可以从 npm 站点下载包,或在终端中运行以下命令。
npm install -g azure-streamanalytics-cicd
生成项目
注意
强烈建议将 --v2
选项用于更新后的 ARM 模板架构。 更新后的架构的参数更少,但保留了与之前版本相同的功能。
未来会弃用旧的 ARM 模板。 从现在开始,只有通过 build --v2
创建的模板才会收到更新或 bug 修复。
azure-streamanalytics-cicd build --v2 --project <projectFullPath> [--outputPath <outputPath>]
build 命令会执行关键字语法检查并生成 Azure 资源管理器 (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 的托管标识用作输出接收器,需要在部署到 Azure 之前使用 PowerShell 提供对服务主体的访问权限。 了解有关如何使用资源管理器模板部署具有托管标识的 ADLS Gen1 的详细信息。
在本地运行
如果项目已指定本地输入文件,则可使用 localrun
命令在本地运行流分析脚本。
azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
参数 | 说明 |
---|---|
--project |
使用绝对路径或相对路径指定 asaproj.json 文件。 |
--outputPath |
使用绝对路径或相对路径指定用于存储 ARM 模板的输出文件夹。 如果未指定 outputPath ,则将模板放在当前目录中。 |
--customCodeZipFilePath |
UDF 或反序列化程序(若使用)等 C# 自定义代码的 zip 文件的路径。 将 DLL 打包到一个 zip 文件中,并指定此路径。 |
示例:
# 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 包配置和运行流分析项目的自动测试。
添加测试用例
azure-streamanalytics-cicd addtestcase --project <projectFullPath> [-testConfigPath <testConfigFileFullPath>]
可以在测试配置文件中找到测试用例。
参数 | 说明 |
---|---|
--project |
使用绝对路径或相对路径指定 asaproj.json 文件。 |
--testConfigPath |
测试配置文件的路径。 如果未指定,则在 asaproj.json 文件的当前目录下的 \test 中搜索文件,默认文件名为 testConfig.json。 如果不存在,则将创建一个新文件。 |
示例:
# Go to the project directory
cd <path-to-the-project>
# Add a test case
azure-streamanalytics-cicd addtestcase --project ./asaproj.json
如果测试配置文件为空,会将以下内容添加到文件。 否则,测试用例将添加到 TestCases 数组。 必要的输入配置会根据输入配置文件自动填充。 在运行测试之前,必须指定每个输入和预期输出的 FilePath。 可手动修改配置。
如果希望测试验证忽略某个输出,请将预期输出的“必填”字段设置为 false 。
{
"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 |
测试配置文件的路径。 如果未指定,则在 asaproj.json 文件的当前目录下的 \test 中搜索文件,默认文件名为 testConfig.json。 |
--outputPath |
测试结果输出文件夹的路径。 如果未指定,则将输出结果文件放在当前目录中。 |
--customCodeZipFilePath |
UDF 或反序列化程序(若使用)等自定义代码的 zip 文件的路径。 需要将 DLL 打包为 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,
}
注意
如果查询结果包含浮点值,则生成的值可能存在细微差异,从而导致测试可能失败。 这基于支持 Visual Studio 或 Visual Studio 引擎和测试处理引擎的不同 .NET 框架。 如果要确保测试成功运行,则必须降低生成的值的精度,或者将结果与生成的测试结果进行手动比较。
部署到 Azure
若要使用 ARM 模板部署流分析项目,请执行以下步骤:
连接到 Azure 帐户:
# Connect to Azure Connect-AzAccount # Set the Azure subscription Set-AzContext [SubscriptionID/SubscriptionName]
部署流分析项目:
$templateFile = ".\Deploy\ClickStream-Filter.JobTemplate.json" $parameterFile = ".\Deploy\ClickStream-Filter.JobTemplate.parameters.json" New-AzResourceGroupDeployment ` -Name devenvironment ` -ResourceGroupName myResourceGroupDev ` -TemplateFile $templateFile ` -TemplateParameterFile $parameterFile
有关使用 ARM 模板部署资源的详细信息,请参阅使用资源管理器模板文件和 Azure PowerShell 进行部署。