Partilhar via


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

O pacote de CI/CD npm do Azure Stream Analytics (ASA) permite-lhe criar, testar e implementar automaticamente os seus projetos do Stream Analytics. Este artigo mostra como utilizar o pacote npm com qualquer sistema CI/CD. Para configurar um pipeline com o Azure DevOps, veja Utilizar o Azure DevOps para criar um pipeline CI/CD para uma tarefa do Stream Analytics.

Se não tiver um projeto do Stream Analytics, crie um com o Visual Studio Code ou exporte um existente a partir do portal do Azure.

Instalação

Pode transferir o pacote a partir do site npm ou executar o seguinte comando no terminal.

npm install -g azure-streamanalytics-cicd

Criar projeto

Nota

Recomendamos vivamente que utilize 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 que a versão anterior.

O modelo do ARM antigo será preterido no futuro. A partir de agora, apenas os modelos criados através build --v2 de receberão atualizações ou correções de erros.

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 ficheiro asaproj.json com o caminho absoluto ou relativo.
--outputPath Especifique a pasta de saída para armazenar Modelos do ARM com um caminho absoluto ou relativo. Se outputPath não for especificado, os modelos sã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 criado com êxito, verá dois ficheiros JSON criados na pasta de saída:

  • Ficheiro de modelo do ARM: [ProjectName].JobTemplate.json
  • Ficheiro de parâmetro do ARM: [ProjectName].JobTemplate.parameters.json

Os valores predefinidos para o ficheiro parameters.json provêm das definições do projeto. Se quiser implementar noutro ambiente, substitua os valores em conformidade.

Os valores predefinidos para todas as credenciais são nulos. Tem de definir os valores antes de implementar no Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Para utilizar a Identidade Gerida para o Azure Data Lake Store Gen1 como sink de saída, tem de fornecer Acesso ao principal de serviço com o PowerShell antes de implementar no Azure. Saiba mais sobre como implementar o ADLS Gen1 com a Identidade Gerida com Resource Manager modelo.

Executar localmente

Se o projeto tiver especificado ficheiros de entrada locais, pode executar um script do Stream Analytics localmente com o localrun comando .

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argumento Description
--project Especifique o ficheiro asaproj.json com o caminho absoluto ou relativo.
--outputPath Especifique a pasta de saída para armazenar Modelos do ARM com um caminho absoluto ou relativo. Se outputPath não for especificado, os modelos são colocados no diretório atual.
--customCodeZipFilePath O caminho do ficheiro zip para código personalizado C#, como um UDF ou um desserializador, se forem utilizados. Empacote os DLLs num ficheiro zip e especifique este caminho.

Exemplo:

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

# Run project locally
azure-streamanalytics-cicd localrun --project ./asaproj.json"

Nota

O JavaScript UDF só funciona no Windows.

Teste automatizado

Pode utilizar o pacote ci/CD npm para configurar e executar testes automatizados para o seu projeto do Stream Analytics.

Adicionar um caso de teste

azure-streamanalytics-cicd addtestcase --project <projectFullPath> [-testConfigPath <testConfigFileFullPath>]

Pode encontrar os casos de teste no ficheiro de configuração de teste.

Argumento Description
--project Especifique o ficheiro asaproj.json com o caminho absoluto ou relativo.
--testConfigPath O caminho do ficheiro de configuração de teste. Se não for especificado, o ficheiro é pesquisado em \test no diretório atual do ficheiro asaproj.json , com o nome de ficheiro predefinido testConfig.json. Um novo ficheiro é 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 ficheiro de configuração de teste estiver vazio, o seguinte conteúdo será adicionado ao ficheiro. Caso contrário, é adicionado um caso de teste a uma matriz TestCases . As configurações de entrada necessárias são preenchidas automaticamente de acordo com o ficheiro de configuração de entrada. O FilePath de cada entrada e saída esperada tem de ser especificado antes de executar o teste. Pode modificar esta configuração manualmente.

Se quiser que a validação de teste ignore uma determinada saída, defina o campo Necessário desse resultado esperado como falso.

{
  "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

Pode utilizar o seguinte comando para executar vários casos de teste para o seu projeto. É gerado um resumo dos resultados do teste na pasta de saída. O processo sai com o código 0 para todos os testes aprovados; -1 para exceção; -2 para testes falhados.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argumento Description
--project O caminho do ficheiro asaproj.json .
--testConfigPath O caminho para o ficheiro de configuração de teste. Se não for especificado, o ficheiro é pesquisado em \test no diretório atual do ficheiro asaproj.json , com o nome de ficheiro predefinido testConfig.json.
--outputPath O caminho da pasta de saída do resultado do teste. Se não for especificado, os ficheiros de resultados de saída são colocados no diretório atual.
--customCodeZipFilePath O caminho do ficheiro zip para código personalizado, como um UDF ou um desserializador, se forem utilizados. Tem de empacotar os DLLs para o ficheiro zip e especificar o caminho.

Se os casos de teste forem executados, pode 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 contiverem valores flutuantes, poderá deparar-se com ligeiras diferenças nos valores produzidos que conduzem a um teste provavelmente com falhas. Isto baseia-se nas diferentes arquiteturas .NET que alimentam o motor do Visual Studio ou do Visual Studio e o motor de processamento de teste. Se quiser certificar-se de que os testes são executados com êxito, terá de diminuir a precisão dos valores produzidos ou alinhar os resultados para serem comparados manualmente com os resultados de teste gerados.

Implementar no Azure

Para implementar o projeto do Stream Analytics com modelos arm, siga estes passos:

  1. Ligue-se à sua conta do Azure:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Implementar o 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 implementar recursos com modelos do ARM, veja Implementar com um ficheiro de modelo Resource Manager e Azure PowerShell.

Passos seguintes