Condividi tramite


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

Il pacchetto npm ci/cd di 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 con 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

È consigliabile usare l'opzione --v2 per lo schema del modello di Resource Manager aggiornato. Lo schema aggiornato ha un minor numero di parametri ma mantiene la stessa funzionalità della versione precedente.

Il modello arm precedente verrà deprecato in futuro. Da ora in poi, solo i modelli creati tramite build --v2 riceveranno aggiornamenti o correzioni di bug.

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

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

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 il percorso assoluto o relativo. Se outputPath non viene specificato, 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 di Resource Manager: [ProjectName].JobTemplate.json
  • File di parametri arm: [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. È necessario impostare i valori prima di eseguire la distribuzione in Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Per usare le identità gestite per Azure Data Lake Store Gen1 come sink di output, è necessario fornire l'accesso all'entità servizio con PowerShell prima della distribuzione in Azure. Altre informazioni su come distribuire ADLS Gen1 con identità gestite usando un modello di Resource Manager.

Esecuzione locale

Se il progetto ha specificato file di input locali, è possibile eseguire uno script di Analisi di flusso in locale usando il localrun comando .

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 il percorso assoluto o relativo. Se outputPath non viene specificato, i modelli vengono inseriti nella directory corrente.
--customCodeZipFilePath Percorso del file ZIP per il codice personalizzato C#, ad esempio una funzione definita dall'utente o un deserializzatore, se vengono usati. 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

La funzione definita dall'utente JavaScript funziona solo in Windows.

Test automatizzato

È possibile 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 viene specificato, il file viene cercato in \test nella directory corrente del file asaproj.json , con il nome di file predefinito testConfig.json. Se non esiste, viene creato 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 del test è vuoto, al file viene aggiunto il contenuto seguente. In caso contrario, un test case viene aggiunto a una matrice TestCases . Le configurazioni di input necessarie vengono compilate automaticamente in base al file di configurazione di input. È necessario specificare FilePath di ogni input e output previsto prima di eseguire il test. È possibile modificare questa configurazione manualmente.

Se si vuole 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 unit test

È possibile usare il comando seguente per eseguire più test case per il progetto. Nella cartella di output viene generato un riepilogo dei risultati del test. Il processo viene chiuso con il codice 0 per tutti i test superati; -1 per l'eccezione si è verificata; -2 per i test non superati.

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 viene specificato, il file viene cercato in \test nella directory corrente del file asaproj.json , con il nome di file predefinito testConfig.json.
--outputPath Percorso della cartella di output dei risultati del test. Se non viene specificato, i file dei risultati di output vengono inseriti nella directory corrente.
--customCodeZipFilePath Percorso del file ZIP per codice personalizzato, ad esempio una funzione definita dall'utente o un deserializzatore, se vengono usati. È necessario creare il pacchetto delle DLL per il file ZIP e specificare il percorso.

Se i test case vengono eseguiti, è possibile trovare un file testResultSummary.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. Si basa sui diversi framework .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, è necessario ridurre la precisione dei valori prodotti o allineare i risultati da confrontare manualmente con i risultati dei test generati.

Distribuisci in Azure

Per distribuire il progetto di Analisi di flusso usando i modelli di Resource Manager, seguire questa procedura:

  1. Connettersi all'account Azure:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Distribuire il progetto di Analisi di flusso:

    $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 con i modelli di Resource Manager, vedere Distribuire con un file modello di Resource Manager e Azure PowerShell.

Passaggi successivi