Comparteix a través de


Automatización de compilaciones, pruebas e implementaciones de un proyecto de Stream Analytics

El paquete npm CI/CD de Azure Stream Analytics (ASA) le permite compilar, probar e implementar automáticamente sus proyectos de Stream Analytics. En este artículo se muestra cómo usar el paquete npm con cualquier sistema de CI/CD. Para configurar una canalización con Azure DevOps, vea Uso de Azure DevOps para crear una canalización CI/CD para un trabajo de Stream Analytics.

Si no tiene un proyecto de Stream Analytics, cree uno mediante Visual Studio Code o exporte uno existente desde Azure Portal.

Instalación

Puede descargar el paquete desde el sitio de npm o ejecutar el siguiente comando en el terminal.

npm install -g azure-streamanalytics-cicd

Compilación del proyecto

Nota

Se recomienda encarecidamente usar la opción --v2 para el esquema de plantilla de Resource Manager actualizado. El esquema actualizado tiene menos parámetros, pero conserva la misma funcionalidad que la versión anterior.

La plantilla de Resource Manager anterior quedará en desuso en el futuro. A partir de ahora, solo recibirán actualizaciones o correcciones de errores las plantillas que se hayan creado mediante build --v2.

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

El comando build realiza una comprobación de sintaxis de la palabras clave y genera la plantilla de Azure Resource Manager (ARM).

Argumento Descripción
--project Especifique el archivo asaproj.json mediante la ruta de acceso absoluta o relativa.
--outputPath Especifique la carpeta de salida para almacenar plantillas de ARM mediante una ruta de acceso absoluta o relativa. Si outputPath no se especifica, las plantillas se colocan en el directorio actual.

Ejemplo:

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

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

Si el proyecto se ha compilado correctamente, verá dos archivos JSON creados en la carpeta de salida:

  • Archivo de plantilla de ARM: [ProjectName].JobTemplate.json
  • Archivo de parámetros de ARM: [ProjectName].JobTemplate.parameters.json

Los valores predeterminados para el archivo parameters.json proceden de la configuración del proyecto. Si quiere implementar en otro entorno, reemplace los valores según corresponda.

Los valores predeterminados de todas las credenciales son null. Se le pide que establezca los valores antes realizar la implementación en Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Para usar la identidad administrada para Azure Data Lake Store Gen1 como receptor de salida, deberá proporcionar acceso a la entidad de servicio con PowerShell antes de la implementación en Azure. Más información acerca de cómo implementar ADLS Gen1 con identidad administrada con la plantilla de Resource Manager.

Ejecución en modo local

Si el proyecto ha especificado archivos de entrada locales, puede ejecutar un script de Stream Analytics en local mediante el comando localrun.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argumento Descripción
--project Especifique el archivo asaproj.json mediante la ruta de acceso absoluta o relativa.
--outputPath Especifique la carpeta de salida para almacenar plantillas de ARM mediante una ruta de acceso absoluta o relativa. Si outputPath no se especifica, las plantillas se colocan en el directorio actual.
--customCodeZipFilePath La ruta del archivo ZIP en el caso del código personalizado de C#, como una UDF o un deserializador, si se usan. Empaquete las DLL en un archivo zip y especifique esta ruta.

Ejemplo:

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

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

Nota

Las UDF de JavaScript solo funcionan en Windows.

Prueba automatizada

Puede usar el paquete npm de CI/CD para configurar y ejecutar pruebas automatizadas del proyecto de Stream Analytics.

Incorporación de un caso de prueba

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

Puede encontrar los casos de prueba en el archivo de configuración de prueba.

Argumento Descripción
--project Especifique el archivo asaproj.json mediante la ruta de acceso absoluta o relativa.
--testConfigPath La ruta del archivo de configuración de prueba. Si no se especifica, el archivo se busca en \test en el directorio actual del archivo asaproj.json, con el nombre de archivo predeterminado testConfig.json. Se crea un nuevo archivo si no existe.

Ejemplo:

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

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

Si el archivo de configuración de prueba está vacío, se agrega el siguiente contenido en el archivo. De lo contrario, se agrega un caso de prueba a una matriz TestCases. Las configuraciones de entrada necesarias se rellenan automáticamente según los archivos de configuración de entrada. Se debe especificar el elemento FilePath de cada entrada y salida esperada antes de ejecutar la prueba. Se puede cambiar esta configuración manualmente.

Si quiere que la validación de la prueba omita una determinada salida, establezca el campo Requerido de esa salida esperada en 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
        }
      ]
    }
  ]
}

Ejecutar pruebas unitarias

Puede usar el siguiente comando para ejecutar varios casos de prueba para el proyecto. Se genera un resumen de los resultados de prueba en la carpeta de salida. El proceso sale con el código 0 para todas las pruebas correctas; -1 para las excepciones; -2 para las pruebas erróneas.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argumento Descripción
--project Ruta de acceso del archivo asaproj.json.
--testConfigPath La ruta del archivo de configuración de prueba. Si no se especifica, el archivo se busca en \test en el directorio actual del archivo asaproj.json, con el nombre de archivo predeterminado testConfig.json.
--outputPath La ruta de la carpeta de salida del resultado de la prueba. Si no se especifica, los archivos de resultados de salida se colocan en el directorio actual.
--customCodeZipFilePath La ruta del archivo ZIP en el caso del código personalizado, como una UDF o un deserializador, si se usan. Debe empaquetar los archivos DLL en el archivo ZIP y especificar la ruta de acceso.

Si se ejecutan casos de prueba, puede encontrar un archivo testResultSummary.json generado en la carpeta de salida.

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

Nota:

Si los resultados de la consulta contienen valores float, es posible que experimente pequeñas diferencias en los valores generados que conducen a una prueba probablemente con errores. Esto se basa en los distintos marcos de .NET que potencian el motor de Visual Studio o Visual Studio y el motor de procesamiento de pruebas. Si desea asegurarse de que la serie de pruebas se ejecuta correctamente, tendrá que reducir la precisión de los valores generados o alinear los resultados para compararlos manualmente con los resultados de las pruebas generados.

Implementar en Azure

Para implementar el proyecto de Stream Analytics mediante plantillas de ARM, siga estos pasos:

  1. Conexión a la cuenta de Azure:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Implemente un proyecto de 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
    

Para más información sobre la implementación de recursos con plantillas de ARM, consulte Implementación de recursos con un archivo de plantillas de Resource Manager y Azure PowerShell.

Pasos siguientes