Intégration continue et déploiement continu sur des appareils Azure IoT Edge (éditeur classique)

S’applique à : Coche IoT Edge 1.4 IoT Edge 1.4

Important

IoT Edge 1.5 LTS et IoT Edge 1.4 sont des versions prises en charge. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.

Azure Pipelines comprend une tâche intégrée Azure IoT Edge qui vous aide à adopter DevOps avec vos applications Azure IoT Edge. Cet article montre comment utiliser les fonctionnalités d’intégration continue et de déploiement continu d’Azure Pipelines pour générer, tester et déployer des applications rapidement et efficacement sur Azure IoT Edge à l’aide de l’ éditeur classique. Vous pouvez également utiliser YAML.

Diagramme des branches d’intégration continue et de développement continu pour le développement et la production.

Dans cet article, vous allez apprendre à utiliser les tâches Azure IoT Edge intégrées pour Azure Pipelines afin de créer des pipelines de build et de mise en production pour votre solution IoT Edge. Chaque tâche Azure IoT Edge ajoutée à votre pipeline implémente l’une des quatre actions suivantes :

Action Description
Générer les images de module Génère les images conteneur à partir du code de votre solution IoT Edge.
Envoyer les images de module Envoie les images de module au registre de conteneurs que vous avez spécifié.
Générer le manifeste de déploiement Génère le fichier final du manifeste de déploiement IoT Edge à partir d’un fichier deployment.template.json et des variables.
Déployer sur des appareils IoT Edge Crée des déploiements IoT Edge sur un ou plusieurs appareils IoT Edge.

Sauf indication contraire, les procédures décrites dans cet article n’explorent pas toutes les fonctionnalités disponibles par le biais des paramètres de tâche. Pour plus d’informations, consultez les ressources suivantes :

Prérequis

  • Référentiel Azure Repos. Si vous n’en avez pas, vous pouvez créer un référentiel Git dans votre projet. Pour cet article, nous avons créé un référentiel appelé IoTEdgeRepo.

  • Solution IoT Edge validée et envoyée (push) vers votre référentiel. Si vous souhaitez créer un exemple de solution pour tester cet article, suivez les étapes décrites dans Développer des modules Azure IoT Edge à l’aide de Visual Studio Code. Pour cet article, nous avons créé dans notre dépôt une solution nommée IoTEdgeSolution qui contient le code d’un module nommé filtermodule.

    Pour cet article, vous avez uniquement besoin du dossier de solution créé par les modèles IoT Edge dans Visual Studio Code ou Visual Studio. Vous n'avez pas à créer, envoyer (push), déployer ou déboguer ce code avant de continuer. Vous configurerez ces processus dans Azure Pipelines.

    Vous devez connaître le chemin du fichier deployment.template.json dans votre solution ; il est utilisé dans plusieurs étapes. Si vous ne connaissez pas bien le rôle du modèle de déploiement, consultez Découvrir comment déployer des modules et établir des routes.

    Conseil

    Si vous créez une solution, commencez par cloner votre référentiel localement. Ensuite, lorsque vous créez la solution, vous pouvez choisir de le faire directement dans le dossier du référentiel. De là, vous pouvez facilement valider et envoyer (push) les nouveaux fichiers.

  • Registre de conteneurs vers lequel envoyer (push) vos images de module. Vous pouvez utiliser Azure Container Registry ou un registre tiers.

  • Un hub IoT Azure actif avec au moins deux appareils IoT Edge à des fins de test distinct des phases de déploiement de test et de production. Vous pouvez suivre les articles de démarrage rapide pour créer un appareil IoT Edge sur Linux ou Windows.

Créer un pipeline de build pour l’intégration continue

Dans cette section, vous créez un pipeline de build. Vous configurez le pipeline de manière à exécuter et à publier automatiquement des journaux de génération chaque fois que vous archivez des changements dans la solution IoT Edge.

  1. Connectez-vous à votre organisation Azure DevOps (https://dev.azure.com/{your organization}), puis ouvrez le projet contenant votre référentiel de solution IoT Edge.

    Capture d’écran montrant comment ouvrir votre projet DevOps.

  2. Dans le menu du volet gauche de votre projet, sélectionnez Pipelines. Sélectionnez Créer un pipeline au centre de la page. Ou, si vous avez déjà des pipelines de build, sélectionnez le bouton Nouveau pipeline en haut à droite.

    Capture d’écran montrant comment créer un pipeline de build.

  3. En bas de la page Où se trouve votre code ?, sélectionnez Utiliser l’éditeur classique. Si vous souhaitez utiliser YAML pour créer les pipelines de build de votre projet, consultez le guide YAML.

    Capture d’écran montrant comment utiliser l’éditeur classique.

  4. Suivez les invites pour créer votre pipeline.

    1. Fournissez les informations sur la source de votre nouveau pipeline de build. Sélectionnez le type de source Azure Repos Git, puis sélectionnez le projet, le référentiel et la branche où se trouve le code de votre solution IoT Edge. Sélectionnez ensuite Continuer.

      Capture d’écran montrant comment sélectionner votre source de pipeline.

    2. Sélectionnez Projet vide plutôt qu'un modèle.

      Capture d’écran montrant comment commencer avec un travail vide pour votre pipeline de build.

  5. Une fois votre pipeline créé, vous accédez à l’éditeur de pipeline. Ici, vous pouvez modifier le nom du pipeline, le pool d’agents et la spécification de l’agent.

    Vous pouvez sélectionner un pool hébergé par Microsoft ou un pool auto-hébergé que vous gérez.

    Dans la description de votre pipeline, sélectionnez la spécification d’agent qui convient en fonction de votre plateforme cible :

    Configurer la spécification de l’agent de build.

  6. Votre pipeline est préconfiguré avec un travail appelé Travail d'agent 1. Sélectionnez le signe plus (+) pour ajouter quatre tâches au travail : Azure IoT Edge deux fois, Copier des fichiers une fois et Publier des artefacts de build une fois. Recherchez chaque tâche et pointez sur le nom de la tâche pour afficher le bouton Ajouter.

    Ajouter une tâche Azure IoT Edge.

    Une fois les quatre tâches ajoutées, le travail de votre agent est semblable à l'exemple suivant :

    Quatre tâches dans le pipeline de build.

  7. Sélectionnez la première tâche Azure IoT Edge pour la modifier. Cette tâche génère tous les modules de la solution avec la plateforme cible que vous spécifiez. Modifiez la tâche avec les valeurs suivantes :

    Paramètre Description
    Nom d’affichage Le nom d’affichage est automatiquement mis à jour lorsque le champ Action change.
    Action Sélectionnez Générer les images de module.
    Fichier .template.json Sélectionnez les points de suspension (... ) et accédez au fichier deployment.template.json du référentiel contenant votre solution IoT Edge.
    Plateforme par défaut Sélectionnez le système d’exploitation approprié pour vos modules en fonction de l’appareil IoT Edge ciblé.
    Variables de sortie Fournissez un nom de référence à associer au chemin où le fichier deployment.json est généré, par exemple edge.

    Pour plus d’informations sur cette tâche et ses paramètres, consultez Tâche Azure IoT Edge.

    Ces configurations utilisent le référentiel et la balise de l’image qui sont définis dans le fichier module.json pour nommer et baliser l’image de module. Générer des images de module permet également de remplacer les variables par la valeur exacte que vous définissez dans le fichier module.json. Dans Visual Studio ou Visual Studio Code, vous spécifiez la valeur réelle dans un fichier .env. Dans Azure Pipelines, vous définissez la valeur sous l’onglet Variables de pipeline. Sélectionnez l’onglet Variables dans le menu de l’éditeur de pipeline et configurez le nom et la valeur comme suit :

    • ACR_ADDRESS : valeur de votre serveur de connexion Azure Container Registry. Vous pouvez trouver la valeur du serveur de connexion sur la page vue d’ensemble du registre de conteneurs dans la Portail Azure.

    Si votre projet contient d’autres variables, vous pouvez spécifier le nom et la valeur dans cet onglet. Générer les images de module reconnaît uniquement les variables qui sont au format ${VARIABLE}. Veillez à utiliser ce format dans vos fichiers **/module.json.

  8. Sélectionnez la seconde tâche Azure IoT Edge pour la modifier. Cette tâche envoie (push) toutes les images de module vers le registre de conteneurs que vous sélectionnez.

    Paramètre Description
    Nom d’affichage Le nom d’affichage est automatiquement mis à jour lorsque le champ Action change.
    Action Sélectionnez Envoyer les images de module.
    Type de registre de conteneurs Utilisez le type par défaut : Azure Container Registry.
    Abonnement Azure Choisissez votre abonnement.
    Azure Container Registry Sélectionnez le type de registre de conteneurs que vous utilisez pour stocker vos images de module. Le formulaire change selon le type de registre que vous sélectionnez. Si vous choisissez Azure Container Registry, utilisez les listes déroulantes pour sélectionner l’abonnement Azure et le nom de votre registre de conteneurs. Si vous choisissez Registre de conteneurs générique, sélectionnez Nouveau pour créer une connexion de service de registre.
    Fichier .template.json Sélectionnez les points de suspension (... ) et accédez au fichier deployment.template.json du référentiel contenant votre solution IoT Edge.
    Plateforme par défaut Sélectionnez le système d’exploitation approprié pour vos modules en fonction de l’appareil IoT Edge ciblé.
    Ajouter les informations d’identification du registre au manifeste de déploiement Spécifiez true pour ajouter les informations d’identification de registre pour l’envoi (push) d’images Docker au manifeste de déploiement.

    Pour plus d’informations sur cette tâche et ses paramètres, consultez Tâche Azure IoT Edge.

    Si vous avez plusieurs registres de conteneurs pour héberger vos images de modules, vous devez dupliquer cette tâche, sélectionner un autre registre de conteneurs et utiliser Ignorer les modules dans les paramètres Avancés pour ignorer les images qui ne concernent pas ce registre spécifique.

  9. Sélectionnez la tâche Copier des fichiers pour la modifier. Utilisez cette tâche pour copier des fichiers dans le répertoire intermédiaire des artefacts.

    Paramètre Description
    Nom d’affichage Utiliser le nom par défaut ou personnaliser
    Dossier source Dossier contenant les fichiers à copier.
    Contenu Ajoutez deux lignes : deployment.template.json et **/module.json. Ces deux fichiers servent d’entrées pour générer le manifeste de déploiement IoT Edge.
    Dossier cible Spécifiez la variable $(Build.ArtifactStagingDirectory). Pour en savoir plus sur la description, consultez Générer des variables.

    Pour plus d’informations sur cette tâche et ses paramètres, consultez Tâche de copie de fichiers.

  10. Sélectionnez la tâche Publier des artefacts de build pour la modifier. Indiquez le chemin du répertoire intermédiaire des artefacts permettant d'accéder à la tâche afin que le chemin puisse être publié dans le pipeline de mise en production.

    Paramètre Description
    Nom d’affichage Utilisez le nom par défaut ou personnalisez.
    Chemin de publication Spécifiez la variable $(Build.ArtifactStagingDirectory). Pour plus d’informations, consultez Variables de build.
    Nom de l’artefact Utiliser le nom par défaut : drop
    Emplacement de publication des artefacts Utiliser l’emplacement par défaut : Azure Pipelines

    Pour plus d’informations sur cette tâche et ses paramètres, consultez Tâche Publier les artefacts de build.

  11. Sélectionnez l’onglet Déclencheurs, puis la case à cocher Activer l'intégration continue. Assurez-vous que la branche qui contient votre code est incluse.

Capture d’écran montrant comment activer le déclencheur d’intégration continue.

  1. Sélectionnez Enregistrer dans la liste déroulante Enregistrer et ajouter à la file d’attente.

Ce pipeline est maintenant configuré pour s’exécuter automatiquement lorsque vous envoyez (push) un nouveau code à votre référentiel. La dernière tâche, publier les artefacts de pipeline, déclenche un pipeline de mise en production. Passez à la section suivante pour générer le pipeline de mise en production.

Créer un pipeline de mise en production pour un déploiement continu

Dans cette section, vous créez un pipeline de mise en production configuré pour s’exécuter automatiquement quand votre pipeline de build supprime des artefacts. Ce pipeline de build affichera les journaux d’activité de déploiement dans Azure Pipelines.

Créer un pipeline et ajouter une nouvelle phase :

  1. Sous l’onglet Mises en production dans Pipelines, choisissez + Nouveau pipeline. Sinon, si vous avez déjà des pipelines de mise en production, choisissez le bouton + Nouveau, puis sélectionnez + Nouveau pipeline de mise en production.

    Ajouter un pipeline de mise en production à l’aide du bouton + Nouveau pipeline

  2. Lorsque vous êtes invité à sélectionner un modèle, optez pour une Tâche vide.

    Démarrer avec un travail vide pour votre pipeline de mise en production

  3. Votre nouveau pipeline de mise en production s'initialise avec une seule phase appelée Phase 1. Renommez la phase 1 en développement et traitez-la comme un pipeline de déploiement continu pour votre environnement de développement. En règle générale, les pipelines de déploiement continu présentent plusieurs phases, notamment le développement, la préproduction et la production. Vous pouvez changer les noms de ces phases ou en créer davantage selon votre pratique DevOps. Fermez la fenêtre de détails de la phase une fois cette dernière renommée.

    Vous pouvez également renommer votre pipeline de mise en production en sélectionnant le texte « Nouveau pipeline de mise en production » en haut.

  4. Liez la mise en production aux artefacts de build publiés par le pipeline de build. Cliquez sur Ajouter dans la zone des artefacts.

    Cliquer sur Ajouter dans la zone des artefacts de l’interface

  5. Dans la page Ajouter un artefact, sélectionnez Build comme Type source. Choisissez le projet et le pipeline de build que vous avez créés. Si vous le souhaitez, remplacez l’Alias source par un nom plus descriptif. Ensuite, cliquez sur Ajouter.

    Dans la page Ajouter un artefact, sélectionner Ajouter pour créer l’artefact

  6. Ouvrez les déclencheurs d’artefact, puis sélectionnez le bouton bascule pour activer le déclencheur de déploiement continu. Désormais, une mise en production est créée chaque fois qu’une nouvelle build est disponible.

    Ouvrir les déclencheurs d’artefact et activer le déclencheur de déploiement continu

  7. La phase dev est préconfigurée avec un travail, mais aucune tâche. Dans le menu de pipeline, sélectionnez Tâches, puis la phase dev. Sélectionnez le Travail de l’agent et changez son Nom d’affichage en AQ. Vous pouvez définir les détails du travail de l’agent, mais la tâche de déploiement n’étant pas propre à la plateforme, vous pouvez utiliser n’importe quelle Spécification de l’agent dans le Pool d’agents choisi.

    Examiner les tâches de votre phase de développement sous l’onglet Tâches

  8. Sur le travail AQ, sélectionnez le signe plus (+) pour ajouter deux tâches. Recherchez et ajoutez Azure IoT Edge deux fois.

  9. Sélectionnez la première tâche Azure IoT Edge et configurez-la avec les valeurs suivantes :

    Paramètre Description
    Nom d’affichage Le nom d’affichage est automatiquement mis à jour lorsque le champ Action change.
    Action Sélectionnez Generate deployment manifest.
    Fichier .template.json Indiquez le chemin : $(System.DefaultWorkingDirectory)/Drop/drop/deployment.template.json. Le chemin est publié à partir du pipeline de build.
    Plateforme par défaut Sélectionnez le système d’exploitation approprié pour vos modules en fonction de l’appareil IoT Edge ciblé.
    Chemin de sortie Placez le chemin $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json. Ce chemin est le fichier final du manifeste de déploiement IoT Edge.

    Ces configurations permettent de remplacer les URL des images de module dans le fichier deployment.template.json. Générer le manifeste de déploiement permet également de remplacer les variables par la valeur exacte que vous avez définie dans le fichier deployment.template.json. Dans Visual Studio/Visual Studio Code, vous spécifiez la valeur réelle dans un fichier .env. Dans Azure Pipelines, vous définissez la valeur sous l'onglet Variables du pipeline de mise en production. Accédez à l'onglet Variables et définissez le nom et la valeur comme suit :

    • ACR_ADDRESS : valeur de votre serveur de connexion Azure Container Registry. Vous pouvez récupérer le serveur de connexion à partir de la page Vue d’ensemble de votre registre de conteneurs dans le portail Azure.
    • ACR_PASSWORD : votre mot de passe Azure Container Registry.
    • ACR_USER : votre nom d’utilisateur Azure Container Registry.

    Si votre projet contient d’autres variables, vous pouvez spécifier le nom et la valeur dans cet onglet. Générer le manifeste de déploiement ne reconnaît que les variables de type ${VARIABLE}. Par conséquent, veillez à utiliser ce type dans vos fichiers *.template.json.

    "registryCredentials": {
      "<ACR name>": { // Your Azure Container Registry **Registry name** value
        "username": "${ACR_USER}",
        "password": "${ACR_PASSWORD}",
        "address": "${ACR_ADDRESS}"
      }
    }
    

    Configurer les variables pour votre pipeline de mise en production sous l’onglet Variables

  10. Sélectionnez la deuxième tâche Azure IoT Edge et configurez-la avec les valeurs suivantes :

    Paramètre Description
    Nom d’affichage Le nom d’affichage est automatiquement mis à jour lorsque le champ Action change.
    Action Sélectionnez Deploy to IoT Edge devices.
    Fichier de déploiement Placez le chemin $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json. Ce chemin est le fichier du manifeste de déploiement IoT Edge.
    Abonnement Azure Sélectionnez l’abonnement contenant votre IoT Hub.
    Nom de l’IoT Hub Sélectionnez votre hub IoT.
    Choisir un ou plusieurs appareils Indiquez si vous souhaitez que le pipeline de mise en production soit déployé sur un ou plusieurs appareils. Si vous le déployez sur un seul appareil, entrez l'ID d’appareil IoT Edge. Si vous le déployez sur plusieurs appareils, spécifiez la condition cible des appareils. La condition cible est un filtre qui correspond à un ensemble d'appareils IoT Edge dans IoT Hub. Pour utiliser les étiquettes d’appareils comme condition, vous devez mettre à jour les étiquettes d’appareils correspondantes avec le jumeau d’appareil IoT Hub. Mettez à jour l'ID de déploiement IoT Edge et la priorité de déploiement IoT Edge dans les paramètres avancés. Pour plus d’informations sur la création d’un déploiement pour plusieurs appareils, consultez Comprendre les déploiements automatiques IoT Edge.
    ID d’appareil ou condition cible Selon la sélection précédente, spécifiez un ID d’appareil ou une condition cible pour le déploiement sur plusieurs appareils.
    Avancé Pour l’ID de déploiement IoT Edge, spécifiez $(System.TeamProject)-$(Release.EnvironmentName). Cette variable mappe le projet et le nom de la version avec votre ID de déploiement IoT Edge.

    Si votre tâche implique l’utilisation d’une image qui réside dans un registre de confiance Docker privé et qui n’est pas visible dans le cloud public, vous pouvez définir la variable d’environnement SKIP_MODULE_IMAGE_VALIDATION sur true pour ignorer la validation de l’image.

    Ajouter des tâches Azure IoT Edge pour votre phase de développement

  11. Sélectionnez Enregistrer pour enregistrer vos modifications dans le nouveau pipeline de mise en production. Pour revenir à la vue du pipeline, sélectionnez l’onglet Pipeline dans le menu.

Remarque

Les déploiements en couches ne sont pas encore pris en charge dans les tâches Azure IoT Edge dans Azure DevOps.

Toutefois, vous pouvez utiliser une tâche Azure CLI dans Azure DevOps pour créer votre déploiement en tant que déploiement en couches. Pour la valeur Script inline, vous pouvez utiliser la commande az iot edge deployment create :

az iot edge deployment create -d {deployment_name} -n {hub_name} --content modules_content.json --layered true

Vérifier les fonctionnalités CI/CD IoT Edge avec les pipelines de build et de mise en production

Pour déclencher un travail de build, envoyez (push) une validation dans le dépôt de code source, ou déclenchez-le manuellement. Dans cette section, vous déclenchez manuellement le pipeline CI/CD pour tester son fonctionnement. Vérifiez ensuite que le déploiement a abouti.

  1. Dans le menu du volet de gauche, sélectionnez Pipelines et ouvrez le pipeline de build que vous avez créé au début de cet article.

  2. Vous pouvez déclencher un travail de build dans votre pipeline de build en sélectionnant le bouton Exécuter le pipeline en haut à droite.

    Déclencher manuellement votre pipeline de build à l’aide du bouton Exécuter le pipeline

  3. Vérifiez les paramètres Exécuter le pipeline. Ensuite, sélectionnez Exécuter.

    Spécifier les options d’exécution du pipeline et sélectionner Exécuter

  4. Sélectionnez Travail de l’agent 1 pour observer la progression de l’exécution. Vous pouvez examiner les journaux de la sortie du travail en sélectionnant le travail.

    Examiner la sortie du journal du travail

  5. Si le pipeline de build s'achève correctement, il déclenche une mise en production en phase dev. La mise en production dev réussie crée un déploiement IoT Edge sur les appareils IoT Edge cibles.

    Mise en production en phase dev

  6. Cliquez sur la phase dev pour afficher les journaux de mise en production.

    Journaux d'activité de mise en production

  7. Si votre pipeline échoue, commencez par examiner les journaux. Vous pouvez afficher les journaux en accédant au résumé de l’exécution du pipeline et en sélectionnant le travail et la tâche. Si une tâche donnée échoue, vérifiez les journaux de cette tâche. Pour obtenir des instructions détaillées sur la configuration et l’utilisation des journaux, consultez l’article Consulter les journaux pour diagnostiquer les problèmes de pipeline.

Étapes suivantes