Udostępnij za pośrednictwem


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

Pakiet npm ciągłej integracji/ciągłego wdrażania usługi Azure Stream Analytics (ASA) umożliwia automatyczne kompilowanie, testowanie i wdrażanie projektów usługi Stream Analytics. W tym artykule pokazano, jak używać pakietu npm z dowolnym systemem ciągłej integracji/ciągłego wdrażania. Aby skonfigurować potok za pomocą usługi Azure DevOps, zobacz Tworzenie potoku ciągłej integracji/ciągłego wdrażania dla zadania usługi Stream Analytics przy użyciu usługi Azure DevOps.

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

Kompilowanie projektu

Uwaga

Zdecydowanie zalecamy użycie --v2 opcji zaktualizowanego schematu szablonu usługi ARM. Zaktualizowany schemat ma mniej parametrów, ale zachowuje te same funkcje co poprzednia wersja.

Stary szablon usługi ARM zostanie wycofany w przyszłości. Od tej pory tylko szablony utworzone za pośrednictwem build --v2 programu będą otrzymywać aktualizacje lub poprawki błędów.

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

Polecenie kompilacji sprawdza składnię słowa kluczowego i generuje szablony usługi 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 usługi ARM przy użyciu ścieżki bezwzględnej lub względnej. Jeśli outputPath nie zostanie określony, szablony zostaną umieszczone w bieżącym 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 został utworzony pomyślnie, zobaczysz dwa pliki JSON utworzone w folderze wyjściowym:

  • Plik szablonu usługi 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.

Wartości domyślne dla wszystkich poświadczeń mają wartość null. Przed wdrożeniem na platformie Azure musisz ustawić wartości.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Aby użyć tożsamości zarządzanej dla usługi Azure Data Lake Store Gen1 jako ujścia danych wyjściowych, przed wdrożeniem na platformie Azure należy podać dostęp do jednostki usługi przy użyciu programu PowerShell. Dowiedz się więcej na temat wdrażania usługi ADLS Gen1 przy użyciu tożsamości zarządzanej przy użyciu szablonu usługi Resource Manager.

Uruchamianie polecenia w środowisku lokalnym

Jeśli projekt określił lokalne pliki wejściowe, możesz uruchomić skrypt usługi Stream Analytics lokalnie przy użyciu localrun polecenia .

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 usługi ARM przy użyciu ścieżki bezwzględnej lub względnej. Jeśli outputPath nie zostanie 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 są używane. 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

Funkcja UDF języka JavaScript działa tylko w systemie Windows.

Test automatyczny

Pakiet npm ciągłej integracji/ciągłego wdrażania umożliwia konfigurowanie i uruchamianie testów automatycznych dla projektu usługi 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 zostanie określony, plik zostanie przeszukany w katalogu \test w bieżącym katalogu pliku asaproj.json z domyślną nazwą pliku testConfig.json. Nowy plik zostanie utworzony, jeśli nie istnieje.

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, do pliku zostanie dodana następująca zawartość. W przeciwnym razie do tablicy TestCases zostanie dodany przypadek testowy. Niezbędne konfiguracje wejściowe są wypełniane automatycznie zgodnie z plikiem konfiguracji wejściowej. Przed uruchomieniem testu należy określić ścieżkę FilePath poszczególnych danych wejściowych i oczekiwanych danych wyjściowych. 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

Możesz użyć następującego polecenia, aby uruchomić wiele przypadków testowych dla projektu. Podsumowanie wyników testów jest generowane w folderze wyjściowym. Proces kończy działanie z kodem 0 dla wszystkich testów, które zostały wykonane; -1 w przypadku wystąpienia wyjątku; -2 dla testów nie powiodło się.

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 zostanie określony, plik zostanie przeszukany w katalogu \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 zostanie określony, pliki wyników wyjściowych zostaną umieszczone 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 przypadki testowe są wykonywane, 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 prowadzących do prawdopodobnie nieudanego testu. Jest to oparte na różnych platformach .NET, które zasilają aparat programu Visual Studio lub Visual Studio oraz aparat przetwarzania testów. Jeśli chcesz upewnić się, że testy są uruchamiane pomyślnie, musisz zmniejszyć dokładność wygenerowanych wartości lub wyrównać wyniki do porównania ręcznie z wygenerowanymi wynikami 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 Wdrażanie przy użyciu pliku szablonu usługi Resource Manager i programu Azure PowerShell.