Automatizzare compilazioni, test e distribuzioni di un progetto di Analisi di flusso

Il pacchetto npm CI/CD (ASA) Analisi di flusso di Azure consente di compilare, testare e distribuire automaticamente i progetti di Analisi di flusso. Questo articolo illustra come usare il pacchetto npm con qualsiasi sistema CI/CD. Per configurare una pipeline usando Azure DevOps, vedere Usare Azure DevOps per creare una pipeline CI/CD per un processo di Analisi di flusso.

Se non si ha un progetto di Analisi di flusso, crearne uno usando Visual Studio Code o esportarne uno esistente dal portale di Azure.

Installazione

È possibile scaricare il pacchetto dal sito npm oppure eseguire il comando seguente nel terminale.

npm install -g azure-streamanalytics-cicd

Compilare un progetto

Nota

Usare l'opzione --v2 per lo schema del modello ARM aggiornato. Lo schema aggiornato ha meno parametri, ma mantiene la stessa funzionalità della versione precedente.

Il modello ARM Template precedente è obsoleto. Solo i modelli creati tramite build --v2 ricevono aggiornamenti o correzioni di bug.

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

Il comando build esegue un controllo della sintassi delle parole chiave e genera modelli Azure Resource Manager (ARM).

Argomento Descrizione
--project Specificare il fileasaproj.json utilizzando un percorso assoluto o relativo.
--outputPath Specificare la cartella di output per l'archiviazione dei modelli arm usando un percorso assoluto o relativo. Se non si specifica outputPath, i modelli vengono inseriti nella directory corrente.

Esempio:

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

# Build project
azure-streamanalytics-cicd build --v2 --project ./asaproj.json --outputPath ./Deploy

Se il progetto viene compilato correttamente, vengono visualizzati due file JSON creati nella cartella di output:

  • File del modello ARM: [ProjectName].JobTemplate.json
  • File di parametri di Azure Resource Manager: [ProjectName].JobTemplate.parameters.json

I valori predefiniti per il file parameters.json provengono dalle impostazioni del progetto. Se si vuole eseguire la distribuzione in un altro ambiente, sostituire i valori di conseguenza.

I valori predefiniti per tutte le credenziali sono Null. Impostare i valori prima di eseguire la distribuzione in Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Per utilizzare l'identità gestita per Azure Data Lake Store Gen1 come destinazione di output, è necessario fornire l'accesso al principale del servizio utilizzando PowerShell prima di eseguire la distribuzione su Azure. Per altre informazioni, vedere deploy ADLS Gen1 con identità gestita con modello di Resource Manager.

Esegui in locale

Se il progetto include file di input locali, usare il localrun comando per eseguire uno script di Analisi di flusso in locale.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argomento Descrizione
--project Specificare il file asaproj.json usando il percorso assoluto o relativo.
--outputPath Specificare la cartella di output per l'archiviazione dei modelli arm usando un percorso assoluto o relativo. Se outputPath non viene specificato, i modelli vengono inseriti nella directory corrente.
--customCodeZipFilePath Il percorso del file zip per il codice C# personalizzato, come una funzione UDF o un deserializzatore, se li usi. Creare il pacchetto delle DLL in un file ZIP e specificare questo percorso.

Esempio:

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

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

Nota

Le UDF JavaScript funzionano solo su Windows.

Test automatizzato

Usare il pacchetto npm CI/CD per configurare ed eseguire test automatizzati per il progetto di Analisi di flusso.

Aggiungere un test case

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

È possibile trovare i test case nel file di configurazione del test.

Argomento Descrizione
--project Specificare il file asaproj.json usando il percorso assoluto o relativo.
--testConfigPath Percorso del file di configurazione del test. Se non si specifica questo argomento, lo strumento cerca il file in \test nella directory corrente del file asaproj.json , con il nome file predefinito testConfig.json. Se il file non esiste, lo strumento crea un nuovo file.

Esempio:

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

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

Se il file di configurazione di test è vuoto, aggiungere il contenuto seguente al file. In caso contrario, aggiungere un test case a una matrice TestCases . Lo strumento compila automaticamente le configurazioni di input necessarie in base al file di configurazione di input. È necessario specificare FilePath per ogni input e output previsto prima di eseguire il test. È possibile modificare questa configurazione manualmente.

Se si desidera che la convalida del test ignori un determinato output, impostare il campo Obbligatorio dell'output previsto su 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
        }
      ]
    }
  ]
}

Eseguire test unitario

Usare il comando seguente per eseguire più test case per il progetto. Il processo genera un riepilogo dei risultati del test nella cartella di output. Il processo viene chiuso con codice 0 se tutti i test superano, -1 se si verifica un'eccezione e -2 se i test hanno esito negativo.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argomento Descrizione
--project Percorso del file asaproj.json .
--testConfigPath Percorso del file di configurazione del test. Se non si specifica questo argomento, il processo cerca il file in \test nella directory corrente del file asaproj.json , con il nome file predefinito testConfig.json.
--outputPath Percorso della cartella di output dei risultati del test. Se non si specifica questo argomento, il processo inserisce i file dei risultati di output nella directory corrente.
--customCodeZipFilePath Il percorso del file zip per il codice personalizzato, come una funzione UDF o un deserializzatore, se li usi. È necessario impacchettare le DLLs in un file zip e specificare il percorso.

Se si eseguono test case, è possibile trovare un filetestResultSummary.json generato nella cartella di output.

{
  "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 i risultati della query contengono valori float, è possibile che si verifichino lievi differenze nei valori prodotti che portano a un test probabilmente non riuscito. Questa differenza si basa sui diversi framework di .NET che alimentano il motore di Visual Studio o Visual Studio e il motore di elaborazione dei test. Per assicurarsi che i test vengano eseguiti correttamente, ridurre la precisione dei valori prodotti o allineare i risultati da confrontare manualmente con i risultati dei test generati.

Distribuzione in Azure

Per distribuire il progetto di Analisi del flusso utilizzando i modelli ARM, seguire i seguenti passaggi:

  1. Connettersi all'account di Azure:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Distribuire il progetto 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
    

Per altre informazioni sulla distribuzione delle risorse tramite i modelli arm, vedere Deploy con un file modello Resource Manager e Azure PowerShell.