Automatize compilações, testes e implantações de um projeto do Stream Analytics

O pacote Azure Stream Analytics (ASA) CI/CD NPM ajuda-o a construir, testar e implementar automaticamente os seus projetos de Stream Analytics. Este artigo mostra como usar o pacote npm com qualquer sistema CI/CD. Para configurar um pipeline usando Azure DevOps, veja Use Azure DevOps para criar um pipeline CI/CD para um trabalho de 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

Pode descarregar o pacote no site da npm ou executar o seguinte comando no seu terminal.

npm install -g azure-streamanalytics-cicd

Construir projeto

Nota

Utilize a opção --v2 para o esquema atualizado do modelo ARM. O esquema atualizado tem menos parâmetros, mas mantém a mesma funcionalidade da versão anterior.

O antigo modelo ARM está obsoleto. Apenas modelos criados através de build --v2 recebem atualizações ou correções de erros.

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

O comando build realiza uma verificação de sintaxe por palavras-chave e gera modelos de Azure Resource Manager (ARM).

Argumento Descrição
--project Especifique o ficheiroasaproj.json usando um caminho absoluto ou relativo.
--outputPath Especifique a pasta de saída para armazenar modelos ARM usando um caminho absoluto ou relativo. Se não especificar outputPath, os modelos vão para o 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 sucesso, verá dois ficheiros 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 do ficheiroparameters.json vêm das definições do teu projeto. Se pretender implantar noutro ambiente, substitua os valores em conformidade.

Os valores padrão para todas as credenciais são null. Defina os valores antes de implementar no Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Para usar o Managed Identity for Azure Data Lake Store Gen1 como dissipador de saída, precisa de fornecer acesso ao principal de serviço usando o PowerShell antes de implementar no Azure. Para saber mais, consulte implantar o ADLS Gen1 com Identidade Gerida usando o modelo do Resource Manager.

Executar localmente

Se o seu projeto incluir ficheiros de entrada locais, use o localrun comando para executar um script de Stream Analytics localmente.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argumento Descrição
--project Especifique o ficheiro 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 ficheiro zip para código personalizado em C#, como um UDF ou desserializador, caso os uses. 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

Os UDFs em JavaScript funcionam apenas no Windows.

Teste automatizado

Use o pacote CI/CD npm para configurar e executar testes automatizados para o seu projeto de Análise de Fluxos.

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 Descrição
--project Especifique o ficheiro asaproj.json usando o caminho absoluto ou relativo.
--testConfigPath O caminho do arquivo de configuração de teste. Se não especificares este argumento, a ferramenta procura o ficheiro em \test no diretório atual do ficheiroasaproj.json , com o nome de ficheiro predefinido testConfig.json. Se o ficheiro não existir, a ferramenta cria um novo ficheiro.

Exemplo:

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

# Add a test case
azure-streamanalytics-cicd addtestcase --project ./asaproj.json

Se o ficheiro de configuração de teste estiver vazio, adicione o seguinte conteúdo ao ficheiro. Caso contrário, adicione um caso de teste a um array de Casos de Teste . A ferramenta preenche automaticamente as configurações de entrada necessárias de acordo com o ficheiro de configuração de entrada. Deve especificar o FilePath para cada entrada e saída esperada 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

Use o comando seguinte para executar múltiplos casos de teste para o seu projeto. O processo gera um resumo dos resultados dos testes na pasta de saída. O processo sai com código 0 se todos os testes passarem, -1 se ocorrer uma exceção, e -2 se os testes falharem.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argumento Descrição
--project O caminho do ficheiro asaproj.json.
--testConfigPath O caminho para o arquivo de configuração de teste. Se não especificar este argumento, o processo procura o ficheiro em \test sob o diretório atual em que se encontra o ficheiro asaproj.json, com o nome de ficheiro padrão testConfig.json.
--outputPath O caminho da pasta de saída do resultado do teste. Se não especificares este argumento, o processo coloca os ficheiros de resultados de saída 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 executares casos de teste, podes encontrar um ficheiro 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 conterem valores float, pode experienciar pequenas diferenças nos valores produzidos que levem a um teste provavelmente falhado. Esta diferença baseia-se nos diferentes frameworks .NET que alimentam o ambiente Visual Studio e o mecanismo de processamento de testes. Para garantir que os testes correm com sucesso, diminua a precisão dos valores produzidos ou alinhe os resultados para serem comparados manualmente com os resultados gerados.

Desdobrar no Azure

Para implementar o seu projeto de Análise de Fluxos utilizando modelos ARM, siga estes passos:

  1. Conecte-se à sua conta do Azure:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. 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 mais informações sobre a implementação de recursos utilizando os templates ARM, consulte Implantar com um ficheiro de template do Gestor de Recursos e Azure PowerShell.