Builds, tests en implementaties van een Stream Analytics-project automatiseren

Met het AZURE Stream Analytics (ASA) CI/CD npm-pakket kunt u automatisch uw Stream Analytics-projecten bouwen, testen en implementeren. In dit artikel wordt beschreven hoe u het npm-pakket gebruikt met een CI/CD-systeem. Als u een pijplijn met Azure DevOps wilt instellen, raadpleegt u Azure DevOps gebruiken om een CI/CD-pijplijn te maken voor een Stream Analytics-taak.

Als u geen Stream Analytics-project hebt, maakt u er een met Visual Studio Code of exporteert u een bestaand project uit de Azure Portal.

Installatie

U kunt het pakket downloaden van de npm-site of de volgende opdracht uitvoeren in uw terminal.

npm install -g azure-streamanalytics-cicd

Project bouwen

Notitie

U wordt ten zeerste aangeraden de --v2 optie voor het bijgewerkte ARM-sjabloonschema te gebruiken. Het bijgewerkte schema heeft minder parameters, maar behoudt dezelfde functionaliteit als de vorige versie.

De oude ARM-sjabloon wordt in de toekomst afgeschaft. Vanaf nu ontvangen alleen sjablonen die zijn gemaakt via build --v2 updates of oplossingen voor fouten.

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

Met de build-opdracht wordt de syntaxis van trefwoorden gecontroleerd en worden ARM-sjablonen (Azure Resource Manager) gegenereerd.

Argument Description
--project Geef het bestand asaproj.json op met behulp van het absolute of relatieve pad.
--outputPath Geef de uitvoermap op voor het opslaan van ARM-sjablonen met behulp van het absolute of relatieve pad. Als outputPath niet is opgegeven, worden de sjablonen in de huidige map geplaatst.

Voorbeeld:

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

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

Als het project is gebouwd, ziet u dat er twee JSON-bestanden zijn gemaakt in de uitvoermap:

  • ARM-sjabloonbestand: [ProjectName].JobTemplate.json
  • ARM-parameterbestand: [ProjectName].JobTemplate.parameters.json

De standaardwaarden voor het bestand parameters.json zijn afkomstig uit de projectinstellingen. Als u wilt implementeren in een andere omgeving, vervangt u de waarden dienovereenkomstig.

De standaardwaarden voor alle referenties zijn null. U moet de waarden instellen voordat u implementeert in Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Als u beheerde identiteit voor Azure Data Lake Store Gen1 als uitvoersink wilt gebruiken, moet u toegang tot de service-principal bieden met behulp van PowerShell voordat u implementeert in Azure. Meer informatie over het implementeren van ADLS Gen1 met beheerde identiteit met Resource Manager-sjabloon.

Lokaal uitvoeren

Als in uw project lokale invoerbestanden zijn opgegeven, kunt u een Stream Analytics-script lokaal uitvoeren met behulp van de localrun opdracht .

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argument Description
--project Geef het bestand asaproj.json op met behulp van het absolute of relatieve pad.
--outputPath Geef de uitvoermap op voor het opslaan van ARM-sjablonen met behulp van het absolute of relatieve pad. Als outputPath niet is opgegeven, worden de sjablonen in de huidige map geplaatst.
--customCodeZipFilePath Het pad van het zip-bestand voor aangepaste C#-code, zoals een UDF of deserializer, als deze worden gebruikt. Verpak de DLL's in een zip-bestand en geef dit pad op.

Voorbeeld:

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

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

Notitie

JavaScript UDF werkt alleen in Windows.

Geautomatiseerde test

U kunt het CI/CD npm-pakket gebruiken om geautomatiseerde tests voor uw Stream Analytics-project te configureren en uit te voeren.

Een testcase toevoegen

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

U vindt de testcases in het testconfiguratiebestand.

Argument Description
--project Geef het bestand asaproj.json op met behulp van het absolute of relatieve pad.
--testConfigPath Het pad van het testconfiguratiebestand. Als dit niet is opgegeven, wordt het bestand doorzocht in \test in de huidige map van het bestand asaproj.json , met de standaardbestandsnaam testConfig.json. Er wordt een nieuw bestand gemaakt als dit nog niet bestaat.

Voorbeeld:

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

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

Als het testconfiguratiebestand leeg is, wordt de volgende inhoud aan het bestand toegevoegd. Anders wordt een testcase toegevoegd aan een TestCases-matrix . Benodigde invoerconfiguraties worden automatisch ingevuld op basis van het invoerconfiguratiebestand. FilePath van elke invoer en verwachte uitvoer moet worden opgegeven voordat de test wordt uitgevoerd. U kunt deze configuratie handmatig wijzigen.

Als u wilt dat de testvalidatie een bepaalde uitvoer negeert, stelt u het veld Vereist van die verwachte uitvoer in op onwaar.

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

Eenheidstest uitvoeren

U kunt de volgende opdracht gebruiken om meerdere testcases voor uw project uit te voeren. Er wordt een samenvatting van de testresultaten gegenereerd in de uitvoermap. Het proces wordt afgesloten met code 0 voor alle tests die zijn geslaagd; -1 voor uitzondering opgetreden; -2 voor mislukte tests.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argument Description
--project Het pad van het bestand asaproj.json .
--testConfigPath Het pad naar het testconfiguratiebestand. Als dit niet is opgegeven, wordt het bestand doorzocht in \test in de huidige map van het bestand asaproj.json , met de standaardbestandsnaam testConfig.json.
--outputPath Het pad van de uitvoermap van het testresultaat. Als dit niet is opgegeven, worden de uitvoerresultaatbestanden in de huidige map geplaatst.
--customCodeZipFilePath Het pad van het zip-bestand voor aangepaste code, zoals een UDF of deserializer, als deze worden gebruikt. U moet de DLL's verpakken in een zip-bestand en het pad opgeven.

Als er testcases worden uitgevoerd, vindt u een bestand testResultSummary.json dat is gegenereerd in de uitvoermap.

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

Notitie

Als de queryresultaten float-waarden bevatten, kunnen er kleine verschillen optreden in de geproduceerde waarden die leiden tot een waarschijnlijk mislukte test. Dit is gebaseerd op de verschillende .NET-frameworks die de Visual Studio- of Visual Studio-engine en de testverwerkingsengine aangestuurd. Als u er zeker van wilt zijn dat de tests met succes worden uitgevoerd, moet u de nauwkeurigheid van de geproduceerde waarden verlagen of de resultaten uitlijnen om handmatig te worden vergeleken met de gegenereerde testresultaten.

Implementeren op Azure

Voer de volgende stappen uit om uw Stream Analytics-project te implementeren met ARM-sjablonen:

  1. Verbinding maken met uw Azure-account:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Uw Stream Analytics-project implementeren:

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

Zie Implementeren met een Resource Manager-sjabloonbestand en Azure PowerShell voor meer informatie over het implementeren van resources met ARM-sjablonen.

Volgende stappen