Автоматизация сборок, тестов и развертываний проекта Stream Analytics

Пакет azure Stream Analytics (ASA) CI/CD npm позволяет автоматически создавать, тестировать и развертывать проекты Stream Analytics. В этой статье показано, как использовать пакет npm с любой системой CI/CD. Сведения о настройке конвейера с помощью Azure DevOps см. в статье Использование Azure DevOps для создания конвейера CI/CD для задания Stream Analytics.

Если у вас нет проекта Stream Analytics, создайте его с помощью Visual Studio Code или экспортируйте существующий из портал Azure.

Установка

Вы можете скачать пакет с сайта npm или выполнить следующую команду в терминале.

npm install -g azure-streamanalytics-cicd

сборка проекта;

Примечание

Мы настоятельно рекомендуем использовать --v2 параметр для обновленной схемы шаблона ARM. Обновленная схема имеет меньше параметров, но сохраняет те же функциональные возможности, что и предыдущая версия.

Старый шаблон ARM будет нерекомендуем в будущем. С этого момента обновления или исправления ошибок будут получать только шаблоны, созданные с помощью build --v2 .

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

Команда сборки выполняет ключевое слово синтаксис проверка и создает шаблоны Azure Resource Manager (ARM).

Аргумент Описание
--project Укажите файл asaproj.json , используя абсолютный или относительный путь.
--outputPath Укажите выходную папку для хранения шаблонов ARM, используя абсолютный или относительный путь. Если outputPath параметр не указан, шаблоны помещаются в текущий каталог.

Пример:

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

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

Если проект успешно построен, в выходной папке будут созданы два JSON-файла:

  • Файл шаблона ARM: [ProjectName].JobTemplate.json
  • Файл параметров ARM: [ProjectName].JobTemplate.parameters.json

Значения по умолчанию для файла parameters.json поступают из параметров проекта. Если вы хотите выполнить развертывание в другой среде, замените значения соответствующим образом.

Значения по умолчанию для всех учетных данных — NULL. Необходимо задать значения перед развертыванием в Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Чтобы в качестве приемника выходных данных использовать управляемое удостоверение для Azure Data Lake Storage 1-го поколения, предоставите доступ субъекту-службе с помощью PowerShell перед развертыванием в Azure. Дополнительные сведения см. в разделе о развертывании ADLS 1-го поколения с управляемым удостоверением с помощью шаблона Resource Manager.

Локальный запуск

Если проект содержит указанные локальные входные файлы, можно запустить скрипт Stream Analytics локально с помощью команды localrun.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Аргумент Описание
--project Укажите файл asaproj.json , используя абсолютный или относительный путь.
--outputPath Укажите выходную папку для хранения шаблонов ARM, используя абсолютный или относительный путь. Если outputPath параметр не указан, шаблоны помещаются в текущий каталог.
--customCodeZipFilePath Путь к ZIP-файлу для пользовательского кода C#, например определяемой пользователем функции или десериализатора, если они используются. Упакуйте библиотеки DLL в ZIP-файл и укажите этот путь.

Пример:

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

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

Примечание

Определяемая пользователем функция JavaScript работает только в Windows.

Автоматический тест

Пакет npm CI/CD можно использовать для настройки и запуска автоматических тестов для проекта Stream Analytics.

Добавление тестового случая

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

Тестовые случаи можно найти в файле конфигурации теста.

Аргумент Описание
--project Укажите файл asaproj.json , используя абсолютный или относительный путь.
--testConfigPath Путь к файлу конфигурации теста. Если он не указан, поиск файла выполняется в каталоге \test в текущем каталоге файла asaproj.json с именем файла по умолчанию testConfig.json. Если файл не существует, создается новый файл.

Пример:

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

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

Если файл конфигурации теста пуст, в файл добавляется следующее содержимое. В противном случае в массив TestCases добавляется тестовый случай. Необходимые входные конфигурации автоматически заполняются в соответствии с файлом входной конфигурации. Перед выполнением теста необходимо указать значение FilePath для каждого входного и ожидаемого выходного файла. Эту конфигурацию можно изменить вручную.

Если вы хотите, чтобы проверка теста проигнорировала определенные выходные данные, задайте для поля Required этих ожидаемых выходных данных значение 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
        }
      ]
    }
  ]
}

Запуск модульного теста

Чтобы запустить несколько тестовых случаев для проекта, можно использовать следующую команду. Сводка с результатами теста создается в выходной папке. Процесс завершается с кодом 0, если пройдены все тесты, -1 в случае исключения и -2, если тесты не пройдены.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Аргумент Описание
--project Путь к файлу asaproj.json .
--testConfigPath Путь к файлу конфигурации теста. Если он не указан, поиск файла выполняется в каталоге \test в текущем каталоге файла asaproj.json с именем файла по умолчанию testConfig.json.
--outputPath Путь к выходной папке результатов теста. Если он не указан, выходные файлы результатов помещаются в текущий каталог.
--customCodeZipFilePath Путь к ZIP-файлу для пользовательского кода, например определяемой пользователем функции или десериализатора, если они используются. Необходимо упаковать библиотеки DLL в ZIP-файл и указать путь.

При выполнении тестовых случаев в выходной папке можно найти файл testResultSummary.json .

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

Примечание

Если результаты запроса содержат значения с плавающей точкой, могут возникнуть небольшие различия в полученных значениях, что может привести к сбою теста. Она основана на различных платформах .NET, которые питают подсистему Visual Studio или Visual Studio и подсистему обработки тестов. Если вы хотите убедиться, что тесты выполняются успешно, необходимо уменьшить точность полученных значений или выровнять результаты для сравнения вручную с созданными результатами теста.

Развернуть в Azure

Чтобы развернуть проект Stream Analytics с помощью шаблонов ARM, выполните следующие действия.

  1. Подключитесь к учетной записи Azure:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Разверните проект 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
    

Дополнительные сведения о развертывании ресурсов с помощью шаблонов ARM см. в статье Развертывание с помощью файла шаблона Resource Manager и Azure PowerShell.

Дальнейшие действия