Automatiser les builds, les tests et les déploiements d’un projet Stream Analytics

Le package npm CI/CD (ASA) Azure Stream Analytics vous aide à générer, tester et déployer automatiquement vos projets Stream Analytics. Cet article explique comment utiliser le package npm avec n’importe quel système CI/CD. Pour configurer un pipeline à l’aide de Azure DevOps, consultez Utilisez Azure DevOps pour créer un pipeline CI/CD pour un travail Stream Analytics.

Si vous n’avez pas de projet Stream Analytics, créez-en un à l’aide de Visual Studio Code ou exportez-en un existant à partir du Portail Azure.

Installation

Vous pouvez télécharger le package à partir du site npm ou exécuter la commande suivante dans votre terminal.

npm install -g azure-streamanalytics-cicd

Génération du projet

Note

Utilisez l’option --v2 pour le schéma de modèle ARM mis à jour. Le schéma mis à jour a moins de paramètres, mais conserve la même fonctionnalité que la version précédente.

L’ancien modèle ARM est déconseillé. Seuls les modèles créés via build --v2 reçoivent des mises à jour ou des correctifs de bogues.

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

La commande build effectue une vérification de syntaxe de mot clé et génère des modèles Azure Resource Manager (ARM).

Argument Description
--project Spécifiez le fichier asaproj.json à l’aide d’un chemin absolu ou relatif.
--outputPath Spécifiez le dossier de sortie pour stocker des modèles ARM à l’aide d’un chemin absolu ou relatif. Si vous ne spécifiez outputPathpas, les modèles vont dans le répertoire actif.

Exemple :

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

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

Si le projet s’génère correctement, vous voyez deux fichiers JSON créés sous le dossier de sortie :

  • Fichier de modèle ARM : [ProjectName].JobTemplate.json
  • Fichier de paramètres Azure Resource Manager : [ProjectName].JobTemplate.parameters.json

Les valeurs par défaut du fichier parameters.json proviennent des paramètres de votre projet. Si vous voulez effectuer un déploiement vers un autre environnement, remplacez les valeurs en conséquence.

Les valeurs par défaut de toutes les informations d’identification sont null. Définissez les valeurs avant de déployer sur Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Pour utiliser Managed Identity pour Azure Data Lake Store Gen1 comme récepteur de sortie, vous devez fournir l’accès au principal du service à l’aide de PowerShell avant de déployer sur Azure. Pour plus d’informations, consultez déployer ADLS Gen1 avec Managed Identity à l'aide d'un modèle de Resource Manager.

Exécution locale

Si votre projet inclut des fichiers d’entrée locaux, utilisez la localrun commande pour exécuter un script Stream Analytics localement.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argument Description
--project Spécifiez le fichier asaproj.json à l’aide du chemin d’accès relatif ou absolu.
--outputPath Spécifiez le dossier de sortie pour le stockage de modèles ARM à l’aide du chemin d’accès relatif ou absolu. Si outputPath n’est pas spécifié, les modèles sont placés dans le répertoire actif.
--customCodeZipFilePath Chemin d’accès du fichier zip pour du code personnalisé C#, comme une fonction UDF ou un désérialiseur, si vous les utilisez. Regroupez les DLL dans un fichier zip et indiquez ce chemin.

Exemple :

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

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

Note

Les fonctions UDF JavaScript fonctionnent uniquement sur Windows.

Test automatisé

Utilisez le package npm CI/CD pour configurer et exécuter des tests automatisés pour votre projet Stream Analytics.

Ajouter un cas de test

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

Vous trouverez les cas de test dans le fichier de configuration du test.

Argument Description
--project Spécifiez le fichier asaproj.json à l’aide du chemin d’accès relatif ou absolu.
--testConfigPath Chemin d'accès du fichier de configuration de test. Si vous ne spécifiez pas cet argument, l’outil recherche le fichier dans \test sous le répertoire actif du fichier asaproj.json , avec le nom de fichier par défaut testConfig.json. Si le fichier n’existe pas, l’outil crée un fichier.

Exemple :

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

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

Si le fichier de configuration de test est vide, ajoutez le contenu suivant au fichier. Sinon, ajoutez un cas de test à un tableau TestCases . L’outil remplit automatiquement les configurations d’entrée nécessaires en fonction du fichier de configuration d’entrée. Vous devez spécifier FilePath pour chaque entrée et sortie attendue avant d’exécuter le test. Vous pouvez modifier cette configuration manuellement.

Si vous souhaitez que la validation de test ignore une sortie donnée, définissez le champ obligatoire de cette sortie attendue sur 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
        }
      ]
    }
  ]
}

Exécution d’un test unitaire

Utilisez la commande suivante pour exécuter plusieurs cas de test pour votre projet. Le processus génère un résumé des résultats de test dans le dossier de sortie. Le processus se termine par le code 0 si tous les tests réussissent, -1 si une exception se produit et -2 si les tests échouent.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argument Description
--project Chemin d’accès du fichier asaproj.json.
--testConfigPath Chemin d'accès au fichier de configuration de test. Si vous ne spécifiez pas cet argument, le processus recherche le fichier dans \test sous le répertoire actif du fichier asaproj.json , avec le nom de fichier par défaut testConfig.json.
--outputPath Chemin d’accès au dossier de sortie des résultats des tests. Si vous ne spécifiez pas cet argument, le processus place les fichiers de résultats de sortie dans le répertoire actif.
--customCodeZipFilePath Chemin d'accès du fichier zip pour le code personnalisé, tel qu'un UDF ou un désérialiseur, si ceux-ci sont utilisés. Vous devez compresser les DLLs dans un fichier zip et spécifier le chemin.

Si vous exécutez des cas de test, vous trouverez un fichier testResultSummary.json généré dans le dossier de sortie.

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

Note

Si les résultats de la requête contiennent des valeurs float, vous pouvez rencontrer de légères différences dans les valeurs produites qui entraînent un test probablement ayant échoué. Cette différence repose sur les différentes versions du framework .NET qui alimentent l'outil Visual Studio et le moteur de traitement des tests. Pour vous assurer que les tests s’exécutent correctement, réduisez la précision de vos valeurs produites ou alignez les résultats à comparer manuellement aux résultats des tests générés.

Déployer dans Azure

Pour déployer votre projet Stream Analytics à l’aide de modèles ARM, procédez comme suit :

  1. Connectez-vous à votre compte Azure :

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Déployez votre projet 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
    

Pour plus d’informations sur le déploiement de ressources à l’aide de modèles ARM, consultez Deploy avec un fichier de modèle Resource Manager et Azure PowerShell.