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

O pacote de CI/CD npm do AZURE STREAM ANALYTICS (ASA) ajuda você a criar, testar e implantar automaticamente seus projetos do Stream Analytics. Este artigo mostra como usar o pacote npm com qualquer sistema de CI/CD. Para configurar um pipeline usando Azure DevOps, consulte Use 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 no site do npm ou executar o comando a seguir em seu terminal.

npm install -g azure-streamanalytics-cicd

Compilar projeto

Observação

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

O modelo antigo do ARM foi preterido. Somente templates criados através de build --v2 recebem atualizações ou correções de bugs.

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

O comando build executa uma verificação de sintaxe de palavra-chave e gera modelos do ARM (Azure Resource Manager).

Argumento Descrição
--project Especifique o arquivo asaproj.json usando um caminho absoluto ou relativo.
--outputPath Especifique a pasta de saída para armazenar modelos do ARM usando um caminho absoluto ou relativo. Se você não especificar outputPath, os modelos entrarão 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 compilado com êxito, você verá dois arquivos JSON criados na pasta de saída:

  • Arquivo de modelo do ARM: [ProjectName].JobTemplate.json
  • Arquivo de parâmetros do Azure Resource Manager: [ProjectName].JobTemplate.parameters.json

Os valores padrão do arquivo parameters.json vêm das configurações do projeto. Se você deseja implantar em outro ambiente, apenas substitua os parâmetros adequadamente.

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

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Para usar Identidade Gerenciada para Azure Data Lake Store Gen1 como destino de saída, você precisa fornecer acesso ao principal de serviço usando o PowerShell antes de implementar o serviço no Azure. Para saber mais, consulte implantar ADLS Gen1 com Identidade Gerenciada usando modelo do Resource Manager.

Executar localmente

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

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argumento Descrição
--project Especifique o arquivo asaproj.json usando o caminho absoluto ou relativo.
--outputPath Especifique a pasta de saída para armazenar modelos do ARM usando o caminho absoluto ou relativo. CasooutputPath não seja especificado, os modelos serão colocados no diretório atual.
--customCodeZipFilePath O caminho para o arquivo zip do código personalizado em C#, como um UDF ou desserializador, caso você os utilize. 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"

Observação

As UDFs do JavaScript funcionam somente em Windows.

Testes automatizados

Use o pacote npm de 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 Descrição
--project Especifique o arquivo asaproj.json usando o caminho absoluto ou relativo.
--testConfigPath O caminho do arquivo de configuração de teste. Se você não especificar esse argumento, a ferramenta procurará o arquivo em \test no diretório atual do arquivo asaproj.json , com o nome do arquivo padrão testConfig.json. Se o arquivo não existir, a ferramenta criará um novo arquivo.

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, adicione o seguinte conteúdo ao arquivo. Caso contrário, adicione um caso de teste a uma matriz TestCases . A ferramenta preenche automaticamente as configurações de entrada necessárias de acordo com o arquivo de configuração de entrada. Você deve especificar o FilePath para cada entrada e saída esperada antes de executar o teste. É possível modificar a configuração manualmente.

Se você quiser que a validação do teste ignore uma determinada saída, defina o campoObrigató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 a seguir para executar vários casos de teste para seu projeto. O processo gera um resumo dos resultados do teste na pasta de saída. O processo será encerrado com o código 0 se todos os testes forem aprovados, -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 arquivo asaproj.json.
--testConfigPath O caminho do arquivo de configuração de teste. Se você não especificar esse argumento, o processo procurará o arquivo em \test no diretório atual do arquivo asaproj.json , com o nome do arquivo padrão testConfig.json.
--outputPath O caminho da pasta onde se encontra o resultado de saída do teste. Se você não especificar esse argumento, o processo colocará os arquivos de resultado de saída no diretório atual.
--customCodeZipFilePath O caminho do arquivo zip para código personalizado, como um UDF ou desserializador, caso sejam utilizados. Você precisa empacotar as DLLs para o arquivo zip e especificar o caminho.

Se você executar casos de teste, poderá encontrar um arquivo 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,
}

Observação

Se os resultados da consulta contiverem valores flutuantes, você poderá experimentar pequenas diferenças nos valores produzidos que levam a um teste provavelmente com falha. Essa diferença se baseia nos diferentes frameworks de .NET que sustentam o Visual Studio ou o mecanismo do Visual Studio e o mecanismo de processamento de testes. Para garantir que os testes sejam executados com êxito, diminua a precisão dos valores produzidos ou alinhe os resultados a serem comparados manualmente aos resultados de teste gerados.

Implantar no Azure

Para implantar seu projeto do Stream Analytics usando modelos do ARM, siga estas etapas:

  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 obter mais informações sobre como implantar recursos usando modelos do ARM, consulte Deploy com um arquivo de modelo Resource Manager e Azure PowerShell.