Builds, Tests und Bereitstellungen eines Stream Analytics-Projekts automatisieren

Das Azure Stream Analytics (ASA)-CI/CD npm-Paket hilft Ihnen, Ihre Stream Analytics-Projekte automatisch zu erstellen, zu testen und bereitzustellen. In diesem Artikel wird beschrieben, wie Sie das npm-Paket mit einem beliebigen CI/CD-System verwenden. Informationen zum Einrichten einer Pipeline mithilfe von Azure DevOps finden Sie unter Use Azure DevOps to create a CI/CD pipeline for a Stream Analytics job.

Wenn Sie kein Stream Analytics-Projekt haben, erstellen Sie ein Projekt mit Visual Studio Code, oder exportieren Sie ein vorhandenes Projekt aus dem Azure-Portal.

Installation

Sie können das Paket von der npm-Website herunterladen oder den folgenden Befehl in Ihrem Terminal ausführen.

npm install -g azure-streamanalytics-cicd

Erstellen des Projekts

Hinweis

Verwenden Sie die --v2 Option für das aktualisierte ARM-Vorlagenschema. Das aktualisierte Schema hat weniger Parameter, behält jedoch die gleiche Funktionalität wie die vorherige Version bei.

Die alte ARM-Vorlage ist veraltet. Nur Vorlagen, die über build --v2 erstellt wurden, erhalten Updates oder Fehlerbehebungen.

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

Der Befehl build führt eine Überprüfung der Schlüsselwortsyntax durch und generiert Azure Resource Manager (ARM)-Vorlagen.

Argument BESCHREIBUNG
--project Geben Sie die asaproj.json Datei mithilfe eines absoluten oder relativen Pfads an.
--outputPath Geben Sie den Ausgabeordner zum Speichern von ARM-Vorlagen mithilfe eines absoluten oder relativen Pfads an. Wenn Sie nicht angeben outputPath, werden die Vorlagen im aktuellen Verzeichnis abgelegt.

Beispiel:

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

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

Wenn das Projekt erfolgreich erstellt wurde, werden zwei JSON-Dateien angezeigt, die unter dem Ausgabeordner erstellt wurden:

  • ARM-Vorlagendatei: [ProjectName].JobTemplate.json
  • Azure Resource Manager-Parameterdatei: [ProjectName].JobTemplate.parameters.json

Die Standardwerte für die parameters.json Datei stammen aus den Projekteinstellungen. Wenn Sie die Bereitstellung in einer anderen Umgebung ausführen möchten, ersetzen Sie die Werte entsprechend.

Die Standardwerte für alle Anmeldeinformationen sind NULL. Legen Sie die Werte fest, bevor Sie sie für Azure bereitstellen.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Um verwaltete Identität für Azure Data Lake Store Gen1 als Ausgabesenke zu verwenden, müssen Sie zugriff auf den Dienstprinzipal mithilfe von PowerShell bereitstellen, bevor Sie Azure bereitstellen. Weitere Informationen finden Sie unter Bereitstellen von ADLS Gen1 mit verwalteter Identität und einer Resource Manager-Vorlage.

Lokal ausführen

Wenn Ihr Projekt lokale Eingabedateien enthält, verwenden Sie den localrun Befehl, um ein Stream Analytics-Skript lokal auszuführen.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argument BESCHREIBUNG
--project Geben Sie die Datei asaproj.json mithilfe des absoluten oder relativen Pfads an.
--outputPath Geben Sie den Ausgabeordner zum Speichern von ARM-Vorlagen mithilfe des absoluten oder relativen Pfads an. Wenn outputPath nicht angegeben ist, werden die Vorlagen im aktuellen Verzeichnis abgelegt.
--customCodeZipFilePath Der Pfad der ZIP-Datei für benutzerdefinierten C#-Code, wie eine UDF oder einen Deserializer, falls Sie diese verwenden. Verpacken Sie die DLLs in einer ZIP-Datei, und geben Sie diesen Pfad an.

Beispiel:

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

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

Hinweis

JavaScript-UDFs funktionieren nur für Windows.

Automatisierter Test

Verwenden Sie das CI/CD npm-Paket, um automatisierte Tests für Ihr Stream Analytics-Projekt zu konfigurieren und auszuführen.

Hinzufügen eines Testfalls

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

Die Testfälle finden Sie in der Testkonfigurationsdatei.

Argument BESCHREIBUNG
--project Geben Sie die Datei asaproj.json mithilfe des absoluten oder relativen Pfads an.
--testConfigPath Der Pfad der Testkonfigurationsdatei. Wenn Sie dieses Argument nicht angeben, sucht das Tool unter dem aktuellen Verzeichnis der asaproj.json-Datei unter dem aktuellen Verzeichnis der Datei "\test" nach der Datei mit dem Standarddateinamen testConfig.json. Wenn die Datei nicht vorhanden ist, erstellt das Tool eine neue Datei.

Beispiel:

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

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

Wenn die Testkonfigurationsdatei leer ist, fügen Sie der Datei den folgenden Inhalt hinzu. Fügen Sie andernfalls einem Testcases-Array einen Testfall hinzu. Das Tool füllt automatisch die erforderlichen Eingabekonfigurationen gemäß der Eingabekonfigurationsdatei aus. Sie müssen den FilePath für jede Eingabe und die erwartete Ausgabe angeben, bevor Sie den Test ausführen. Sie können diese Konfiguration manuell ändern.

Wenn bei der Testvalidierung eine bestimmte Ausgabe ignoriert werden soll, legen Sie das Feld Required der erwarteten Ausgabe auf false fest.

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

Komponententest ausführen

Verwenden Sie den folgenden Befehl, um mehrere Testfälle für Ihr Projekt auszuführen. Der Prozess generiert eine Zusammenfassung der Testergebnisse im Ausgabeordner. Der Prozess wird mit Code 0 beendet, wenn alle Tests bestehen, -1 , wenn eine Ausnahme auftritt, und -2 , wenn Tests fehlschlagen.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argument BESCHREIBUNG
--project Der Pfad der Datei asaproj.json.
--testConfigPath Der Pfad zur Testkonfigurationsdatei. Wenn Sie dieses Argument nicht angeben, sucht der Prozess unter dem aktuellen Verzeichnis der asaproj.json-Datei nach der Datei in \test, wobei der Standarddateiname testConfig.json.
--outputPath Der Pfad des Ausgabeordners für Testergebnisse. Wenn Sie dieses Argument nicht angeben, platziert der Prozess die Ausgabeergebnisdateien im aktuellen Verzeichnis.
--customCodeZipFilePath Der Pfad der ZIP-Datei für benutzerdefinierten Code wie UDF oder Deserialisierer, wenn sie verwendet werden. Sie müssen die DLLs in eine ZIP-Datei packen und den Pfad angeben.

Wenn Sie Testfälle ausführen, finden Sie eine testResultSummary.json Datei, die im Ausgabeordner generiert wurde.

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

Hinweis

Wenn die Abfrageergebnisse Float-Werte enthalten, können geringfügige Unterschiede in den erzeugten Werten auftreten, die zu einem wahrscheinlich fehlgeschlagenen Test führen. Dieser Unterschied basiert auf den verschiedenen .NET Frameworks, die das Visual Studio- oder Visual Studio-Modul und das Testverarbeitungsmodul aktivieren. Um sicherzustellen, dass die Tests erfolgreich ausgeführt werden, verringern Sie die Genauigkeit der erzeugten Werte, oder richten Sie die Ergebnisse aus, um die Ergebnisse manuell mit den generierten Testergebnissen zu vergleichen.

In Azure bereitstellen

Führen Sie die folgenden Schritte aus, um Ihr Stream Analytics-Projekt mithilfe von ARM-Vorlagen bereitzustellen:

  1. Stellen Sie eine Verbindung mit Ihrem Azure-Konto her:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Stellen Sie Ihr Stream Analytics-Projekt bereit:

    $templateFile = ".\Deploy\ClickStream-Filter.JobTemplate.json"
    $parameterFile = ".\Deploy\ClickStream-Filter.JobTemplate.parameters.json"
    New-AzResourceGroupDeployment `
      -Name devenvironment `
      -ResourceGroupName myResourceGroupDev `
      -TemplateFile $templateFile `
      -TemplateParameterFile $parameterFile
    

Weitere Informationen zum Bereitstellen von Ressourcen mithilfe von ARM-Vorlagen finden Sie unter Deploy with a Resource Manager template file and Azure PowerShell.