Partilhar via


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:

  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 com modelos ARM, consulte Implantar com um arquivo de modelo do Resource Manager e Azure PowerShell.