Builds, tests en implementaties van een Stream Analytics-project automatiseren
Met het CI/CD NPM-pakket (Azure Stream Analytics) 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. Als u een pijplijn wilt instellen met Azure DevOps, 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 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 bouwen
Notitie
U wordt ten zeerste aangeraden de --v2
optie te gebruiken voor het bijgewerkte ARM-sjabloonschema. 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 buildopdracht wordt een syntaxiscontrole voor trefwoorden uitgevoerd en worden ARM-sjablonen (Azure Resource Manager) gegenereerd.
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 dit 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 gemaakt, 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 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. U moet de waarden instellen voordat u in Azure implementeert.
"Input_EntryStream_sharedAccessPolicyKey": {
"value": null
}
Als u Managed Identity voor Azure Data Lake Store Gen1 wilt gebruiken als uitvoersink, moet u toegang verlenen tot de service-principal met behulp van PowerShell voordat u implementeert in Azure. Meer informatie over het implementeren van ADLS Gen1 met beheerde identiteit met een Resource Manager-sjabloon.
lokaal uitvoeren
Als uw project lokale invoerbestanden heeft 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 | 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 dit 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. 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 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 | Beschrijving |
---|---|
--project |
Geef het asaproj.json bestand op met behulp van een absoluut of relatief pad. |
--testConfigPath |
Het pad van het testconfiguratiebestand. Als het niet is opgegeven, wordt het bestand doorzocht in \test onder de huidige map van het asaproj.json-bestand, 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 toegevoegd aan het bestand. Anders wordt een testcase toegevoegd aan een TestCases-matrix . De benodigde invoerconfiguraties worden automatisch ingevuld volgens 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 geslaagde tests; -1 voor uitzondering opgetreden; -2 voor tests is mislukt.
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 het niet is opgegeven, wordt het bestand doorzocht in \test onder de huidige map van het asaproj.json-bestand, 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, 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 is gebaseerd op de verschillende .NET Frameworks die de Visual Studio- of Visual Studio-engine en de testverwerkingsengine aandrijven. Als u ervoor wilt zorgen dat de tests correct worden uitgevoerd, moet u de nauwkeurigheid van de geproduceerde waarden verkleinen of de resultaten uitlijnen 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:
Verbinding maken met uw Azure-account:
# Connect to Azure Connect-AzAccount # Set the Azure subscription Set-AzContext [SubscriptionID/SubscriptionName]
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.