Automatize compilações, testes e implantações de um projeto do Stream Analytics
O pacote npm CI/CD do Azure Stream Analytics (ASA) permite que você crie, teste e implante automaticamente seus projetos do Stream Analytics. Este artigo mostra como usar o pacote npm com qualquer sistema CI/CD. Para configurar um pipeline com o Azure DevOps, consulte Usar o Azure DevOps para criar um pipeline de CI/CD para um trabalho do Stream Analytics.
Se você não tiver um projeto do Stream Analytics, crie um usando o Visual Studio Code ou exporte um existente do portal do Azure.
Instalação
Você pode baixar o pacote do site npm ou executar o seguinte comando no seu terminal.
npm install -g azure-streamanalytics-cicd
Construir projeto
Nota
É altamente recomendável que você use a --v2
opção para o esquema de modelo ARM atualizado. O esquema atualizado tem menos parâmetros, mas mantém a mesma funcionalidade da versão anterior.
O modelo ARM antigo será preterido no futuro. A partir de agora, apenas os modelos que foram criados via build --v2
receberão atualizações ou correções de bugs.
azure-streamanalytics-cicd build --v2 --project <projectFullPath> [--outputPath <outputPath>]
O comando build faz uma verificação de sintaxe de palavra-chave e gera modelos do Azure Resource Manager (ARM).
Argumento | Description |
---|---|
--project |
Especifique o arquivo asaproj.json usando o caminho absoluto ou relativo. |
--outputPath |
Especifique a pasta de saída para armazenar modelos ARM usando o caminho absoluto ou relativo. Se outputPath não for especificado, os modelos serão colocados no diretório atual. |
Exemplo:
# Go to the project directory
cd <path-to-the-project>
# Build project
azure-streamanalytics-cicd build --v2 --project ./asaproj.json --outputPath ./Deploy
Se o projeto for construído com êxito, você verá dois arquivos JSON criados na pasta de saída:
- Arquivo de modelo ARM:
[ProjectName].JobTemplate.json
- Arquivo de parâmetro do Azure Resource Manager:
[ProjectName].JobTemplate.parameters.json
Os valores padrão para parameters.json arquivo vêm das configurações do projeto. Se você quiser implantar em outro ambiente, substitua os valores de acordo.
Os valores padrão para todas as credenciais são null. É necessário definir os valores antes de implantar no Azure.
"Input_EntryStream_sharedAccessPolicyKey": {
"value": null
}
Para usar a Identidade Gerenciada para o Azure Data Lake Store Gen1 como coletor de saída, você precisa fornecer Acesso à entidade de serviço usando o PowerShell antes de implantar no Azure. Saiba mais sobre como implantar o ADLS Gen1 com o modelo Managed Identity with Resource Manager.
Executar localmente
Se o seu projeto tiver especificado arquivos de entrada locais, você poderá executar um script do Stream Analytics localmente usando o localrun
comando.
azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argumento | Description |
---|---|
--project |
Especifique o arquivo asaproj.json usando o caminho absoluto ou relativo. |
--outputPath |
Especifique a pasta de saída para armazenar modelos ARM usando o caminho absoluto ou relativo. Se outputPath não for especificado, os modelos serão colocados no diretório atual. |
--customCodeZipFilePath |
O caminho do arquivo zip para o código personalizado C#, como um UDF ou desserializador, se eles forem usados. Empacote as DLLs em um arquivo zip e especifique esse caminho. |
Exemplo:
# Go to the project directory
cd <path-to-the-project>
# Run project locally
azure-streamanalytics-cicd localrun --project ./asaproj.json"
Nota
JavaScript UDF só funciona no Windows.
Teste automatizado
Você pode usar o pacote npm CI/CD para configurar e executar testes automatizados para seu projeto do Stream Analytics.
Adicionar um caso de teste
azure-streamanalytics-cicd addtestcase --project <projectFullPath> [-testConfigPath <testConfigFileFullPath>]
Você pode encontrar os casos de teste no arquivo de configuração de teste.
Argumento | Description |
---|---|
--project |
Especifique o arquivo asaproj.json usando o caminho absoluto ou relativo. |
--testConfigPath |
O caminho do arquivo de configuração de teste. Se não for especificado, o arquivo será pesquisado em \test no diretório atual do arquivo asaproj.json, com o nome de arquivo padrão testConfig.json. Um novo arquivo é criado se não existir. |
Exemplo:
# Go to the project directory
cd <path-to-the-project>
# Add a test case
azure-streamanalytics-cicd addtestcase --project ./asaproj.json
Se o arquivo de configuração de teste estiver vazio, o seguinte conteúdo será adicionado ao arquivo. Caso contrário, um caso de teste é adicionado a uma matriz TestCases . As configurações de entrada necessárias são preenchidas automaticamente de acordo com o arquivo de configuração de entrada. FilePath de cada entrada e saída esperada deve ser especificado antes de executar o teste. Você pode modificar essa configuração manualmente.
Se desejar que a validação de teste ignore uma determinada saída, defina o campo Obrigatório dessa saída esperada como 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
}
]
}
]
}
Executar teste de unidade
Você pode usar o comando a seguir para executar vários casos de teste para seu projeto. Um resumo dos resultados do teste é gerado na pasta de saída. O processo sai com o código 0 para todos os testes aprovados; -1 por exceção ocorrida; -2 para testes reprovados.
azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argumento | Description |
---|---|
--project |
O caminho do arquivo asaproj.json . |
--testConfigPath |
O caminho para o arquivo de configuração de teste. Se não for especificado, o arquivo será pesquisado em \test no diretório atual do arquivo asaproj.json, com o nome de arquivo padrão testConfig.json. |
--outputPath |
O caminho da pasta de saída do resultado do teste. Se não for especificado, os arquivos de resultado de saída serão colocados no diretório atual. |
--customCodeZipFilePath |
O caminho do arquivo zip para código personalizado, como UDF ou desserializador, se forem usados. Você precisa empacotar as DLLs para o arquivo zip e especificar o caminho. |
Se os casos de teste forem executados, você poderá encontrar um arquivo de testResultSummary.json gerado na pasta de saída.
{
"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,
}
Nota
Se os resultados da consulta contiverem valores float, você pode enfrentar pequenas diferenças nos valores produzidos, levando a um teste provavelmente reprovado. Isso se baseia nas diferentes estruturas .NET que alimentam o mecanismo Visual Studio ou Visual Studio e o mecanismo de processamento de teste. Se você quiser ter certeza de que os testes são executados com sucesso, você terá que diminuir a precisão dos valores produzidos ou alinhar os resultados a serem comparados manualmente com os resultados de teste gerados.
Implementar no Azure
Para implantar seu projeto do Stream Analytics usando modelos ARM, siga estas etapas:
Conecte-se à sua conta do Azure:
# Connect to Azure Connect-AzAccount # Set the Azure subscription Set-AzContext [SubscriptionID/SubscriptionName]
Implante seu projeto do 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
Para obter mais informações sobre como implantar recursos com modelos ARM, consulte Implantar com um arquivo de modelo do Resource Manager e Azure PowerShell.