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

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

Als u geen Stream Analytics-project hebt, maakt u er een met Visual Studio Code of exporteert u een bestaand project vanuit 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 opbouwen

Notitie

Gebruik de --v2 optie voor het bijgewerkte ARM-sjabloonschema. Het bijgewerkte schema heeft minder parameters, maar behoudt dezelfde functionaliteit als de vorige versie.

De oude ARM-sjabloon is afgeschaft. Alleen sjablonen die zijn gemaakt via build --v2 ontvangen updates of krijgen oplossingen voor fouten.

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

De opdracht build voert een syntaxiscontrole voor trefwoorden uit en genereert Azure Resource Manager sjablonen (ARM).

Argument Beschrijving
--project Geef het asaproj.json bestand op met behulp van een absoluut of relatief pad.
--outputPath Geef de uitvoermap op voor het opslaan van ARM-sjablonen met behulp van een absoluut of relatief pad. Als u outputPath niet opgeeft, gaan de sjablonen in de huidige map.

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 twee JSON-bestanden die zijn gemaakt onder de uitvoermap:

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

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

De standaardwaarden voor alle referenties zijn null. Stel de waarden in voordat u implementeert op Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Als u Beheerde identiteit wilt gebruiken voor Azure Data Lake Store Gen1 als uitvoersink, moet u toegang bieden tot de service-principal met behulp van PowerShell voordat u implementeert op Azure. Zie deploy ADLS Gen1 met beheerde identiteit met Resource Manager sjabloon voor meer informatie.

lokaal uitvoeren

Als uw project lokale invoerbestanden bevat, gebruikt u de localrun opdracht om een Stream Analytics-script lokaal uit te voeren.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argument Beschrijving
--project Geef het asaproj.json bestand op met behulp van een absoluut of relatief pad.
--outputPath Geef de uitvoermap op voor het opslaan van ARM-sjablonen met behulp van een absoluut of relatief pad. Als outputPath niet is gespecificeerd, worden de sjablonen in de huidige map geplaatst.
--customCodeZipFilePath Het pad van het zip-bestand voor aangepaste C#-code, zoals een UDF of deserializer, indien u deze gebruikt. Pak 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's werken alleen op Windows.

Geautomatiseerde test

Gebruik het CI/CD NPM-pakket 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 Beschrijving
--project Geef het asaproj.json bestand op met behulp van een absoluut of relatief pad.
--testConfigPath Het pad van het testconfiguratiebestand. Als u dit argument niet opgeeft, zoekt het hulpprogramma naar het bestand in \test onder de huidige map van het asaproj.json bestand, met de standaardbestandsnaam testConfig.json. Als het bestand niet bestaat, maakt het hulpprogramma een nieuw bestand.

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, voegt u de volgende inhoud toe aan het bestand. Voeg anders een testcase toe aan een TestCases-matrix . Het hulpprogramma vult automatisch de benodigde invoerconfiguraties in op basis van het invoerconfiguratiebestand. U moet het FilePath opgeven voor elke invoer en verwachte uitvoer voordat u de test uitvoert. 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

Gebruik de volgende opdracht om meerdere testcases voor uw project uit te voeren. Het proces genereert een samenvatting van testresultaten in de uitvoermap. Het proces wordt afgesloten met code 0 als alle tests slagen, -1 als er een uitzondering optreedt en -2 als de tests mislukken.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argument Beschrijving
--project Het pad van het asaproj.json-bestand .
--testConfigPath Het pad naar het testconfiguratiebestand. Als u dit argument niet opgeeft, zoekt het proces naar het bestand in \test onder de huidige map van het asaproj.json bestand, met de standaardbestandsnaamtestConfig.json.
--outputPath Het pad naar de map voor uitvoer van het testresultaat. Als u dit argument niet opgeeft, plaatst het proces de uitvoerresultatenbestanden in de huidige map.
--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 u testcases uitvoert, kunt u een testResultSummary.json bestand vinden 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 verschil is gebaseerd op de verschillende .NET frameworks die de Visual Studio- of Visual Studio-engine en de testverwerkingsengine aandrijven. Om ervoor te zorgen dat de tests correct worden uitgevoerd, verlaagt u de precisie van de geproduceerde waarden of lijnt u de resultaten uit die handmatig moeten worden vergeleken met de gegenereerde testresultaten.

Implementeren op Azure

Voer de volgende stappen uit om uw Stream Analytics-project te implementeren met behulp van 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 Deploy met een Resource Manager sjabloonbestand en Azure PowerShell voor meer informatie over het implementeren van resources met behulp van ARM-sjablonen.