Continuous Integration und Continuous Deployment für Azure IoT Edge-Geräte

Gilt für:IoT Edge 1.4 Häkchen IoT Edge 1.4

Wichtig

IoT Edge Version 1.4 wird unterstützt. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von IoT Edge.

Sie können DevOps mit den integrierten Azure IoT Edge-Aufgaben in Azure Pipelines ganz einfach in Ihren Azure IoT Edge-Anwendungen übernehmen. In diesem Artikel wird gezeigt, wie Sie Azure Pipelines zum Erstellen, Testen und Bereitstellen von Azure IoT Edge-Modulen mithilfe von YAML verwenden können. Alternativ können Sie den klassischen Editor verwenden.

Diagramm der Continuous Integration (CI)- und Continuous Deployment (CD)-Branches für die Entwicklung und Produktion.

In diesem Artikel erfahren Sie, wie Sie mithilfe der integrierten Azure IoT Edge-Aufgaben für Azure Pipelines Build- und Releasepipelines für Ihre IoT Edge-Projektmappe erstellen können. Jede Azure IoT Edge-Aufgabe, die Ihrer Pipeline hinzugefügt wird, implementiert eine der folgenden vier Aktionen:

Aktion Beschreibung
Erstellen von Modulimages Erstellt aus Ihrem IoT Edge-Projektmappencode die Containerimages.
Pushen von Modulimages Pusht Modulimages in die angegebene Containerregistrierung.
Generieren des Bereitstellungsmanifests Generiert aus einer „deployment.template.json“-Datei und den zugehörigen Variablen die finale Manifestdatei für eine IoT Edge-Bereitstellung.
Bereitstellen auf IoT Edge-Geräten Erstellt IoT Edge-Bereitstellungen auf einem oder mehreren IoT Edge-Geräten.

Sofern nicht anders angegeben, untersuchen die Prozeduren in diesem Artikel nicht die gesamte Funktionalität, die über Aufgabenparameter zur Verfügung steht. Weitere Informationen finden Sie in den folgenden Ressourcen:

Voraussetzungen

  • Ein Azure Repos-Repository. Wenn Sie keines besitzen, können Sie ein neues Git-Repository in Ihrem Projekt erstellen. Für diesen Artikel haben wir ein Repository namens IoTEdgeRepo erstellt.

  • Eine per Push an Ihr Repository committete IoT Edge-Lösung. Wenn Sie eine neue Beispiellösung für die Tests in diesem Artikel erstellen möchten, führen Sie die Schritte unter Entwickeln von Azure IoT Edge-Modulen mithilfe von Visual Studio Code aus. Für diesen Artikel haben wir in unserem Repository die Projektmappe IoTEdgeSolution erstellt, die den Code für das Modul filtermodule enthält.

    In diesem Artikel benötigen Sie lediglich den von den IoT Edge-Vorlagen in Visual Studio Code oder Visual Studio erstellten Projektmappenordner. Sie müssen diesen Code nicht erstellen, pushen, bereitstellen oder debuggen, bevor Sie fortfahren. Sie werden diese Prozesse in Azure Pipelines einrichten.

    Sie müssen den Pfad zur Datei deployment.template.json in Ihrer Projektmappe kennen, der in verschiedenen Schritten verwendet wird. Wenn Sie mit der Rolle der Bereitstellungsvorlage nicht vertraut sind, finden Sie weitere Informationen unter Bereitstellen von Modulen und Einrichten von Routen in IoT Edge.

    Tipp

    Wenn Sie eine neue Projektmappe erstellen, klonen Sie zunächst das lokale Repository. Dann können Sie die Projektmappe wahlweise direkt im Repositoryordner erstellen. Sie können die neuen Dateien von dort problemlos committen und pushen.

  • Eine Containerregistrierung, in die Sie Modulimages per Push übertragen können. Sie können Azure Container Registry oder eine Drittanbieterregistrierung verwenden.

  • Eine aktive Azure IoT Hub-Instanz mit mindestens zwei IoT Edge-Geräten zum Testen der separaten Test- und Produktionsbereitstellungsstufen. Sie können die Schnellstartartikel zum Erstellen eines IoT Edge-Geräts auf Linux oder Windows befolgen.

Weitere Informationen zur Verwendung von Azure Repos finden Sie unter Freigeben von Code mit Visual Studio und Azure-Repositorys.

Erstellen einer Buildpipeline für Continuous Integration

In diesem Abschnitt erstellen Sie eine neue Buildpipeline. Sie konfigurieren die Pipeline so, dass sie automatisch ausgeführt wird, wenn Sie Änderungen an der IoT Edge-Beispielprojektmappe einchecken und Buildprotokolle veröffentlichen.

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an (https://dev.azure.com/{your organization}), und öffnen Sie das Projekt, das Ihr IoT Edge-Projektmappenrepository enthält.

    Screenshot: Öffnen des DevOps-Projekts.

  2. Wählen Sie im Menü im linken Bereich Ihres Projekts Pipelinesaus. Wählen Sie in der Mitte der Seite Pipeline erstellen aus. Wenn Sie aber bereits Buildpipelines haben, wählen Sie oben rechts die Schaltfläche Neue Pipeline aus.

    Screenshot: Erstellen einer neuen Buildpipeline über die Schaltfläche „Neue Pipeline“.

  3. Wählen Sie auf der Seite Wo befindet sich Ihr Code? die Option Azure Repos GitYAML aus. Wenn Sie zum Erstellen der Buildpipelines für Ihr Projekt den klassischen Editor verwenden möchten, finden Sie Informationen dazu im classic editor guide (Leitfaden zum klassischen Editor).

  4. Wählen Sie das Repository aus, für das Sie eine Pipeline erstellen.

    Screenshot: Auswählen des Repositorys für Ihre Buildpipeline.

  5. Wählen Sie auf der Seite Pipeline konfigurieren die Option Starterpipeline aus. Wenn Sie bereits eine YAML-Datei für Azure Pipelines haben, die Sie zum Erstellen dieser Pipeline verwenden möchten, können Sie Vorhandene Azure Pipelines-YAML-Datei auswählen sowie den Branch und Pfad im Repository für die Datei angeben.

    Zum Beginnen Ihrer Buildpipeline „Starterpipeline“ oder „Vorhandene Azure Pipelines-YAML-Datei“ auswählen

  6. Auf der Seite Pipeline-YAML überprüfen können Sie den Standardnamen azure-pipelines.yml auswählen, um die Konfigurationsdatei Ihrer Pipeline umzubenennen.

    Wählen Sie Assistent anzeigen aus, um die Palette Aufgaben zu öffnen.

    Screenshot: Auswählen von „Assistent anzeigen“ zum Öffnen der Palette „Aufgaben“.

  7. Wenn Sie eine Aufgabe hinzufügen möchten, setzen Sie den Cursor an das Ende der YAML oder an jede beliebige Stelle, an der die Anweisungen für Ihre Aufgabe hinzugefügt werden sollen. Suchen Sie nach der Aufgabe Azure IoT Edge, und wählen Sie sie aus. Füllen Sie die Parameter der Aufgabe folgendermaßen aus. Klicken Sie anschließend auf Hinzufügen.

    Parameter BESCHREIBUNG
    Aktion Auswählen von Modulimages erstellen.
    „template.json“-Datei Geben Sie den Pfad zur Datei deployment.template.json in dem Repository an, das Ihre IoT Edge-Projektmappe enthält.
    Standardplattform Wählen Sie das entsprechende Betriebssystem für Ihre Module, basierend auf Ihrem IoT Edge-Zielgerät, aus.

    Weitere Informationen zu dieser Aufgabe und den zugehörigen Parametern finden Sie unter Azure IoT Edge-Aufgabe.

    Screenshot: Verwenden der Palette „Aufgaben“ und Hinzufügen von Aufgaben zur Pipeline.

    Tipp

    Nachdem jede Aufgabe hinzugefügt wurde, werden die hinzugefügten Zeilen vom Editor automatisch hervorgehoben. Wenn Sie ein versehentliches Überschreiben verhindern möchten, deaktivieren Sie die Zeilen, und geben Sie einen neuen Bereich für Ihre nächste Aufgabe an, bevor Sie weitere Aufgaben hinzufügen.

  8. Wiederholen Sie diesen Vorgang zum Hinzufügen von drei weiteren Aufgaben mit den folgenden Parametern:

    • Aufgabe: Azure IoT Edge

      Parameter BESCHREIBUNG
      Aktion Wählen Sie Modulimages pushen aus.
      Containerregistrierungstyp Verwenden Sie den Standardtyp: Azure Container Registry.
      Azure-Abonnement Wählen Sie Ihr Abonnementaus.
      Azure Container Registry Wählen Sie die Registrierung aus, die Sie für die Pipeline verwenden möchten.
      „template.json“-Datei Geben Sie den Pfad zur Datei deployment.template.json in dem Repository an, das Ihre IoT Edge-Projektmappe enthält.
      Standardplattform Wählen Sie das entsprechende Betriebssystem für Ihre Module, basierend auf Ihrem IoT Edge-Zielgerät, aus.

      Weitere Informationen zu dieser Aufgabe und den zugehörigen Parametern finden Sie unter Azure IoT Edge-Aufgabe.

    • Aufgabe: Dateien kopieren

      Parameter Beschreibung
      Quellordner Der Quellordner, aus dem kopiert werden soll. „Empty“ ist der Stamm des Repositorys. Verwenden Sie Variablen, wenn keine Dateien im Repository sind. Beispiel: $(agent.builddirectory).
      Contents Fügen Sie zwei Zeilen hinzu: deployment.template.json und **/module.json.
      Zielordner Geben Sie die Variable $(Build.ArtifactStagingDirectory) an. Eine Beschreibung finden Sie unter Buildvariablen.

      Weitere Informationen zu dieser Aufgabe und den zugehörigen Parametern finden Sie unter Aufgabe zum Kopieren von Dateien.

    • Aufgabe: Buildartefakte veröffentlichen

      Parameter Beschreibung
      Pfad für Veröffentlichung Geben Sie die Variable $(Build.ArtifactStagingDirectory) an. Eine Beschreibung finden Sie unter Buildvariablen.
      Artefaktname Geben Sie den Standardnamen an: drop.
      Veröffentlichungsort für Artefakte Verwenden Sie den Standardort: Azure Pipelines.

      Weitere Informationen zu dieser Aufgabe und den zugehörigen Parametern finden Sie unter Aufgabe zum Veröffentlichen von Buildartefakten.

  9. Wählen Sie oben rechts in der Dropdownliste Speichern und ausführen die Option Speichern aus.

  10. Der Trigger für Continuous Integration ist bei Ihrer YAML-Pipeline standardmäßig aktiviert. Wenn Sie diese Einstellungen bearbeiten möchten, wählen Sie Ihre Pipeline und dann oben rechts die Option Bearbeiten aus. Wählen Sie neben der Schaltfläche Ausführen oben rechts Weitere Aktionen aus, und wechseln Sie zu Trigger. Unter dem Namen ihrer Pipeline wird Continuous Integration als aktiviert angezeigt. Wenn Sie die Details zum Trigger anzeigen möchten, aktivieren Sie das Kontrollkästchen YAML-Continuous Integration-Trigger von hier aus überschreiben.

Screenshot: Überprüfen der Triggereinstellungen der Pipeline im Menü „Trigger“ unter „Weitere Aktionen“.

Fortfahren Sie mit dem nächsten Abschnitt fort, um die Releasepipeline zu erstellen.

Erstellen einer Releasepipeline für kontinuierliche Bereitstellung (Continuous Deployment)

In diesem Abschnitt erstellen Sie eine Releasepipeline, die so konfiguriert ist, dass sie beim Ablegen von Artefakten durch Ihre Buildpipeline automatisch ausgeführt wird und Bereitstellungsprotokolle in Azure Pipelines anzeigt.

So erstellen Sie eine neue Pipeline und fügen eine neue Stufe hinzu:

  1. Wählen Sie auf der Registerkarte Releases unter Pipelines die Schaltfläche + Neue Pipeline aus. Wenn Sie bereits über Releasepipelines verfügen, wählen Sie die Schaltfläche + Neu und dann + Neue Releasepipeline aus.

    Hinzufügen einer Releasepipeline über die Schaltfläche „+ Neue Pipeline“

  2. Wenn Sie aufgefordert werden, eine Vorlage auszuwählen, wählen Sie für den Einstieg Leerer Auftrag aus.

    Starten mit einem leeren Auftrag für Ihre Releasepipeline

  3. Ihre neue Releasepipeline wird mit einer Stufe namens Stage 1 initialisiert. Benennen Sie „Stage 1“ in dev um, und behandeln Sie sie als Continuous Deployment-Pipeline für Ihre Entwicklungsumgebung. Continuous Deployment-Pipelines haben normalerweise mehrere Stages: dev, staging und prod. Sie können unterschiedliche Namen verwenden und je nach Ihrer DevOps-Methode weitere erstellen. Schließen Sie das Stufendetailsfenster nach der Umbenennung.

    Sie können Ihre Releasepipeline auch umbenennen, indem Sie oben den Text „Neue Releasepipeline“ auswählen.

  4. Verknüpfen Sie das Release mit den Buildartefakten, die von der Buildpipeline veröffentlicht werden. Klicken Sie im Artefaktbereich auf Hinzufügen.

    Im Artefaktbereich der Schnittstelle auf „Hinzufügen“ klicken

  5. Wählen Sie auf der Seite Artefakt hinzufügen die Option Build als Quelltyp aus. Wählen Sie das Projekt und die erstellte Buildpipeline aus. Wenn Sie möchten, können Sie den Quellalias in einen aussagekräftigeren Namen ändern. Klicken Sie anschließend auf Hinzufügen.

    Auf der Seite „Artefakt hinzufügen“ die Option „Hinzufügen“ auswählen, um das Artefakt zu erstellen

  6. Öffnen Sie die Artefakttrigger, und wählen Sie die Umschaltfläche aus, um die Continuous Deployment-Trigger zu aktivieren. Nun wird immer dann ein neues Release erstellt, wenn ein neuer Build verfügbar ist.

    Die Artefakttrigger öffnen, und die Umschaltfläche zum Aktivieren des Continuous Deployment-Triggers auswählen

  7. Die Stage dev ist mit einem Auftrag und null (0) Aufgaben vorkonfiguriert. Wählen Sie im Pipelinemenü Aufgaben und dann die Stage dev aus. Wählen Sie den Agentauftrag aus, und ändern Sie dessen Anzeigenamen in QA. Sie können Details zum Agentauftrag konfigurieren, aber die Bereitstellungsaufgabe ist plattformunabhängig, sodass Sie im ausgewählten Agentpool jede beliebige Agentspezifikation verwenden können.

    Anzeigen der Aufgaben für Ihre Stage „dev“ auf der Registerkarte „Aufgaben“

  8. Wählen Sie im Auftrag „QA“ das Pluszeichen (+) aus, um zwei Aufgaben hinzuzufügen. Suchen Sie nach Azure IoT Edge, und fügen Sie die Aufgabe zweimal hinzu.

  9. Wählen Sie die erste Azure IoT Edge-Aufgabe aus, und konfigurieren Sie sie mit den folgenden Werten:

    Parameter Beschreibung
    Anzeigename Der Anzeigename wird bei einer Änderung des Felds „Aktion“ automatisch aktualisiert.
    Aktion Wählen Sie Generate deployment manifest aus.
    „template.json“-Datei Geben Sie den Pfad „$(System.DefaultWorkingDirectory)/Drop/drop/deployment.template.json“ an. Der Pfad wird aus der Buildpipeline veröffentlicht.
    Standardplattform Wählen Sie das entsprechende Betriebssystem für Ihre Module, basierend auf Ihrem IoT Edge-Zielgerät, aus.
    Ausgabepfad Geben Sie den Pfad $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json an. Dieser Pfad ist die finale Datei mit dem IoT Edge-Bereitstellungsmanifest.

    Diese Konfigurationen unterstützen das Ersetzen der Modulimage-URLs in der Datei deployment.template.json. Die Aufgabe Bereitstellungsmanifest generieren hilft auch dabei, die Variablen durch die exakten Werte zu ersetzen, die Sie in der Datei deployment.template.json definiert haben. In Visual Studio/Visual Studio Code geben Sie den tatsächlichen Wert in einer .env-Datei an. In Azure Pipelines legen Sie den Wert auf der Registerkarte Releasepipelinevariablen fest. Wechseln Sie zur Registerkarte Variablen, und konfigurieren Sie den Namen und Wert wie folgt:

    • ACR_ADDRESS: Der Wert Anmeldeserver für Ihre Azure Container Registry-Instanz. Den Anmeldeserver können Sie im Azure-Portal auf der Übersichtsseite Ihrer Containerregistrierung ermitteln.
    • ACR_PASSWORD: Ihr Kennwort für Azure Container Registry.
    • ACR_USER: Ihr Benutzername für Azure Container Registry.

    Wenn Ihr Projekt weitere Variablen enthält, können Sie die Namen und Werte auf dieser Registerkarte angeben. Bereitstellungsmanifest generieren kann nur erkennen, dass die Variablen in der Variante ${VARIABLE} vorliegen. Sorgen Sie dafür, dass Sie diese Variante in Ihren *.template.json-Dateien verwenden.

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

    Konfigurieren der Variablen für Ihre Releasepipeline auf der Registerkarte „Variablen“

  10. Wählen Sie die zweite Azure IoT Edge-Aufgabe aus, und konfigurieren Sie sie mit den folgenden Werten:

    Parameter Beschreibung
    Anzeigename Der Anzeigename wird bei einer Änderung des Felds „Aktion“ automatisch aktualisiert.
    Aktion Wählen Sie Deploy to IoT Edge devices aus.
    Bereitstellungsdatei Geben Sie den Pfad $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json an. Dieser Pfad ist die Datei mit dem IoT Edge-Bereitstellungsmanifest.
    Azure-Abonnement Wählen Sie das Abonnement aus, das Ihre IoT Hub-Instanz enthält.
    IoT Hub-Name Wählen Sie Ihren IoT Hub aus.
    Einzelgerät/mehrere Geräte auswählen Wählen Sie aus, ob die Releasepipeline auf einem oder mehreren Geräten bereitgestellt werden soll. Geben Sie bei Bereitstellung auf einem einzelnen Gerät die IoT Edge-Geräte-ID ein. Geben Sie bei einer Bereitstellung auf mehreren Geräten die Zielbedingung des Geräts an. Die Zielbedingung ist ein Filter für den Abgleich mit einem Satz von IoT Edge-Geräten in IoT Hub. Wenn Sie Gerätetags als Bedingung verwenden möchten, müssen Sie Ihre entsprechenden Tags mit einem IoT Hub-Gerätezwilling aktualisieren. Aktualisieren Sie die IoT Edge-Bereitstellungs-ID und IoT Edge-Bereitstellungspriorität in den erweiterten Einstellungen. Weitere Informationen zum Erstellen einer Bereitstellung für mehrere Geräte finden Sie unter Grundlegendes zu automatischen IoT Edge-Bereitstellungen für einzelne Geräte oder nach Bedarf.
    Geräte-ID oder Zielbedingung Geben Sie je nach der vorherigen Auswahl eine Geräte-ID oder Zielbedingung an, die auf mehreren Geräten bereitgestellt werden soll.
    Erweitert Geben Sie für die IoT Edge-Bereitstellungs-ID $(System.TeamProject)-$(Release.EnvironmentName) an. Diese Variable ordnet den Projekt- und Releasenamen Ihrer IoT Edge-Bereitstellungs-ID zu.

    Wenn Ihre Aufgabe die Verwendung eines Images enthält, das sich in einer privaten vertrauenswürdigen Docker-Registrierung befindet, die für die öffentliche Cloud nicht sichtbar ist, können Sie die Umgebungsvariable SKIP_MODULE_IMAGE_VALIDATION auf true festlegen, um die Imagevalidierung zu überspringen.

    Hinzufügen von Azure IoT Edge-Aufgaben für Ihre Stage „dev“

  11. Wählen Sie Speichern zum Speichern der Änderungen auf der neuen Releasepipeline aus. Kehren Sie zur Pipelineansicht zurück, indem Sie im Menü die Registerkarte Pipeline auswählen.

Überprüfen von CI/CD in IoT Edge mit den Build- und Releasepipelines

Um einen Buildauftrag auszulösen, können Sie einen Commit in das Quellcoderepository pushen oder manuell auslösen. In diesem Abschnitt lösen Sie manuell die CI/CD-Pipeline aus, um die Funktionsweise zu testen. Anschließend überprüfen Sie, ob die Bereitstellung erfolgreich ausgeführt wird.

  1. Wählen Sie im Menü auf der linken Seite Pipelines aus, und öffnen Sie die Buildpipeline, die Sie am Anfang dieses Artikels erstellt haben.

  2. Sie können einen Buildauftrag in ihrer Buildpipeline auslösen, indem Sie oben rechts die Schaltfläche Pipeline ausführen auswählen.

    Manuelles Auslösen Ihrer Buildpipeline über die Schaltfläche „Pipeline ausführen“

  3. Überprüfen Sie die Einstellungen für Pipeline ausführen. Wählen Sie dann Ausführen aus.

    Optionen für „Pipeline ausführen“ angeben und „Ausführen“ auswählen

  4. Wählen Sie Agentauftrag 1 aus, um den Fortschritt der Ausführung zu überwachen. Durch Auswählen des Auftrags können Sie die Protokolle der Auftragsausgabe überprüfen.

    Protokollausgabe des Auftrags überprüfen

  5. Wenn die Buildpipeline erfolgreich abgeschlossen ist, löst sie eine Releasepipeline zur dev-Stage aus. Das erfolgreiche dev-Release erstellt eine IoT Edge-Bereitstellung für IoT Edge-Geräte.

    Release für dev

  6. Klicken Sie auf die Stage dev, um die Releaseprotokolle anzuzeigen.

    Releaseprotokolle

  7. Wenn bei Ihrer Pipeline ein Fehler aufgetreten ist, sehen Sie sich zuerst die Protokolle an. Sie können Protokolle anzeigen, indem Sie zur Zusammenfassung der Pipelineausführung navigieren und dann den Auftrag und die Aufgabe auswählen. Wenn eine bestimmte Aufgabe fehlschlägt, überprüfen Sie die Protokolle dafür. Ausführliche Anleitungen zum Konfigurieren und Verwenden von Protokollen finden Sie unter Überprüfen von Protokollen zum Diagnostizieren von Pipelineproblemen.

Nächste Schritte