Automatyzowanie kompilacji, testów i wdrożeń projektu usługi Stream Analytics

Pakiet npm do ciągłej integracji/ciągłego wdrażania usługi Azure Stream Analytics (ASA) pomaga automatycznie kompilować, testować i wdrażać Twoje projekty Stream Analytics. W tym artykule pokazano, jak używać pakietu npm z dowolnym systemem CI/CD. Aby skonfigurować potok przy użyciu Azure DevOps, więcej informacji znajdziesz w Użyj Azure DevOps, aby utworzyć potok ciągłej integracji/ciągłego wdrażania dla zadania usługi Stream Analytics.

Jeśli nie masz projektu usługi Stream Analytics, utwórz go przy użyciu programu Visual Studio Code lub wyeksportuj istniejącą z witryny Azure Portal.

Instalacja

Pakiet można pobrać z witryny npm lub uruchomić następujące polecenie w terminalu.

npm install -g azure-streamanalytics-cicd

Budowanie projektu

Uwaga

Użyj opcji --v2 dla zaktualizowanego schematu szablonu ARM. Zaktualizowany schemat ma mniej parametrów, ale zachowuje tę samą funkcjonalność co poprzednia wersja.

Stary szablon ARM jest wycofany. Tylko szablony utworzone za pośrednictwem build --v2 otrzymują aktualizacje lub poprawki błędów.

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

Polecenie build wykonuje sprawdzanie składni słowa kluczowego i generuje szablony Azure Resource Manager (ARM).

Argument opis
--project Określ plik asaproj.json przy użyciu ścieżki bezwzględnej lub względnej.
--outputPath Określ folder wyjściowy do przechowywania szablonów ARM przy użyciu ścieżki bezwzględnej lub względnej. Jeśli nie określisz outputPath, szablony trafią do bieżącego katalogu.

Przykład:

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

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

Jeśli projekt zostanie utworzony pomyślnie, zobaczysz dwa pliki JSON utworzone w folderze wyjściowym:

  • Plik szablonu ARM: [ProjectName].JobTemplate.json
  • Plik parametrów usługi Azure Resource Manager: [ProjectName].JobTemplate.parameters.json

Wartości domyślne pliku parameters.json pochodzą z ustawień projektu. Jeśli chcesz wdrożyć w innym środowisku, zastąp odpowiednio wartości.

Domyślne wartości dla wszystkich kredencjałów to null. Ustaw wartości przed wdrożeniem w Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Aby użyć tożsamości zarządzanej dla Azure Data Lake Store Gen1 jako odbiornika danych wyjściowych, przed wdrażaniem do Azure należy zapewnić dostęp do jednostki usługi przy użyciu programu PowerShell. Aby dowiedzieć się więcej, zobacz deploy ADLS Gen1 z tożsamością zarządzaną przy użyciu szablonu Resource Manager.

Uruchom lokalnie

Jeśli projekt zawiera lokalne pliki wejściowe, użyj localrun polecenia , aby uruchomić skrypt usługi Stream Analytics lokalnie.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argument opis
--project Określ plik asaproj.json przy użyciu ścieżki bezwzględnej lub względnej.
--outputPath Określ folder wyjściowy do przechowywania szablonów ARM używając ścieżki bezwzględnej lub względnej. Jeśli outputPath nie jest określony, szablony zostaną umieszczone w bieżącym katalogu.
--customCodeZipFilePath Ścieżka pliku zip dla kodu niestandardowego języka C#, takiego jak UDF lub deserializator, jeśli ich używasz. Spakuj biblioteki DLL do pliku zip i określ tę ścieżkę.

Przykład:

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

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

Uwaga

UDF JavaScript działają tylko na Windows.

Test automatyczny

Użyj pakietu npm CI/CD, aby skonfigurować i uruchomić testy automatyczne dla projektu Stream Analytics.

Dodawanie przypadku testowego

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

Przypadki testowe można znaleźć w pliku konfiguracji testu.

Argument opis
--project Określ plik asaproj.json przy użyciu ścieżki bezwzględnej lub względnej.
--testConfigPath Ścieżka pliku konfiguracji testu. Jeśli nie określisz tego argumentu, narzędzie wyszukuje plik w katalogu \test w bieżącym katalogu pliku asaproj.json z domyślną nazwą pliku testConfig.json. Jeśli plik nie istnieje, narzędzie utworzy nowy plik.

Przykład:

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

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

Jeśli plik konfiguracji testu jest pusty, dodaj następującą zawartość do pliku. W przeciwnym razie dodaj przypadek testowy do tablicy TestCases . Narzędzie automatycznie wypełnia niezbędne konfiguracje wejściowe zgodnie z plikiem konfiguracji wejściowej. Przed uruchomieniem testu należy określić FilePath dla każdego pliku wejściowego i oczekiwanego pliku wyjściowego. Tę konfigurację można zmodyfikować ręcznie.

Jeśli chcesz, aby walidacja testu ignorowała określone dane wyjściowe, ustaw pole Wymagane dla tego oczekiwanego danych wyjściowych na wartość 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
        }
      ]
    }
  ]
}

Uruchamianie testu jednostkowego

Użyj następującego polecenia, aby uruchomić wiele przypadków testowych dla projektu. Proces generuje podsumowanie wyników testów w folderze wyjściowym. Proces kończy działanie z kodem 0 , jeśli wszystkie testy kończą się powodzeniem, -1 , jeśli wystąpi wyjątek, i -2 , jeśli testy zakończą się niepowodzeniem.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argument opis
--project Ścieżka pliku asaproj.json.
--testConfigPath Ścieżka do pliku konfiguracji testu. Jeśli nie określisz tego argumentu, proces wyszukuje plik w \test w bieżącym katalogu pliku asaproj.json z domyślną nazwą pliku testConfig.json.
--outputPath Ścieżka folderu wyjściowego wyniku testu. Jeśli nie określisz tego argumentu, proces umieszcza pliki wynikowe danych wyjściowych w bieżącym katalogu.
--customCodeZipFilePath Ścieżka pliku zip dla kodu niestandardowego, takiego jak UDF lub deserializator, jeśli są używane. Musisz spakować biblioteki DLL do pliku zip i określić ścieżkę.

Jeśli uruchamiasz przypadki testowe, możesz znaleźć plik testResultSummary.json wygenerowany w folderze wyjściowym.

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

Uwaga

Jeśli wyniki zapytania zawierają wartości zmiennoprzecinkowe, mogą wystąpić niewielkie różnice w wygenerowanych wartościach, które prowadzą do prawdopodobnie nieudanego testu. Ta różnica opiera się na różnych frameworkach .NET, które zasilają silnik Visual Studio oraz aparat przetwarzania testów. Aby upewnić się, że testy zakończą się pomyślnie, zmniejsz dokładność produkowanych wartości lub ręcznie dostosuj wyniki, które mają być porównane, do wygenerowanych wyników testu.

Wdróż na platformie Azure

Aby wdrożyć projekt usługi Stream Analytics przy użyciu szablonów usługi ARM, wykonaj następujące kroki:

  1. Połącz się z kontem platformy Azure:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Wdróż projekt usługi Stream Analytics:

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

Aby uzyskać więcej informacji na temat wdrażania zasobów przy użyciu szablonów usługi ARM, zobacz Wdróż z plikiem szablonu Menadżera zasobów i Azure PowerShell.