Partager via


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

Le package npm CI/CD Azure Stream Analytics (ASA) vous permet de générer, test et déployer vos projets Stream Analytics. Cet article explique comment utiliser le package npm avec n’importe quel système CI/CD. Pour configurer un pipeline avec Azure DevOps, consultez Utiliser Azure DevOps pour créer un pipeline CI/CD pour une tâche 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écutez la commande suivante dans votre terminal.

npm install -g azure-streamanalytics-cicd

Génération du projet

Notes

Nous vous recommandons vivement d’utiliser l’option --v2 pour obtenir le schéma de modèle ARM mis à jour. Le schéma mis à jour contient moins de paramètres, mais il conserve les mêmes fonctionnalités que la version précédente.

L’ancien modèle ARM sera déprécié à l’avenir. Désormais, 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 syntaxique 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 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.

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 est correctement généré, vous voyez deux fichiers JSON créés sous le dossier de sortie :

  • Fichier de modèle ARM : [ProjectName].JobTemplate.json
  • Fichier de paramètres ARM : [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. Vous devez définir les valeurs avant le déploiement sur Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Pour utiliser une identité managée pour Azure Data Lake Store Gen1 comme récepteur de sortie, vous devez fournir l’accès au principal de service à l’aide de PowerShell avant de déployer sur Azure. Découvrez plus d’informations sur le déploiement d’ADLS Gen1 avec une identité managée et le modèle Resource Manager.

Exécution locale

Si votre projet a spécifié des fichiers d’entrée locaux, vous pouvez exécuter un script Stream Analytics localement à l’aide de la commande localrun.

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 du code personnalisé C#, tel qu’un fichier UDF ou un désérialiseur, s’ils sont utilisés. 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"

Notes

UDF JavaScript fonctionne uniquement sur Windows.

Test automatisé

Vous pouvez utiliser le package npm CI/CD afin de 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. S’il n’est pas spécifié, le fichier est recherché dans \test sous le répertoire actif du fichier asaproj.json, avec le nom de fichier par défaut testConfig.json. S’il n’existe pas, un fichier est créé.

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, le contenu suivant est ajouté dans le fichier. Sinon, un cas de test est ajouté à un tableau TestCases . Les configurations d’entrée nécessaires sont automatiquement remplies en fonction du fichier de configuration d’entrée. Le chemin d’accès au fichier de chaque entrée et sortie attendue doit être spécifié 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

Vous pouvez utiliser la commande suivante pour exécuter plusieurs cas de test pour votre projet. Un résumé des résultats des tests est généré dans le dossier de sortie. Le processus se termine avec le code 0 pour tous les tests réussis ; -1 pour les exceptions ; -2 pour les tests échoués.

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. S’il n’est pas spécifié, le fichier est recherché 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. S’il n’est pas spécifié, les fichiers des résultats de sortie sont placés dans le répertoire actif.
--customCodeZipFilePath Chemin d’accès du fichier zip du code personnalisé, tel qu’un fichier UDF ou un désérialiseur, s’ils sont utilisés. Vous devez créer un package des DLL dans le fichier zip et spécifier le chemin d’accès.

Si des cas de test sont exécutés, 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,
}

Notes

Si les résultats de la requête contiennent des valeurs flottantes, vous pouvez rencontrer de légères différences dans les valeurs produites qui entraînent probablement un échec du test. Elles reposent sur les différentes infrastructures .NET qui alimentent le moteur Visual Studio ou le moteur Visual Studio et le traitement du test moteur. Si vous souhaitez vérifier la bonne exécution des tests, vous devez diminuer la précision de vos valeurs produites ou aligner manuellement les résultats à comparer aux résultats des tests générés.

Déployer dans Azure

Pour déployer votre projet Stream Analytics en utilisant des 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 en tirant parti des modèles ARM, consultez Effectuer un déploiement avec un fichier de modèle Resource Manager et Azure PowerShell.

Étapes suivantes