Azure DevOps-Aufgabe für Azure Data Explorer

Azure DevOps Services bietet Tools für die Entwicklungszusammenarbeit wie leistungsstarke Pipelines, kostenlose private Git-Repositorys, konfigurierbare Kanban-Boards und umfangreiche automatisierte und kontinuierliche Testfunktionen. Azure Pipelines ist eine Azure DevOps-Funktion, die es Ihnen ermöglicht, CI/CD zu verwalten, um Ihren Code mit leistungsstarken Pipelines bereitzustellen, die mit jeder Sprache, Plattform und Cloud funktionieren. Azure Data Explorer – Pipeline Tools ist die Azure Pipelines-Aufgabe, mit der Sie Releasepipelines erstellen und Ihre Datenbankänderungen in Ihren Azure Data Explorer-Datenbanken bereitstellen können. Diese finden Sie kostenlos im Visual Studio Marketplace. Diese Erweiterung umfasst drei grundlegende Aufgaben:

  • Azure Data Explorer-Befehl: Ausführen von Administratorbefehlen für einen Azure Data Explorer-Cluster

  • Azure Data Explorer-Abfrage: Ausführen von Abfragen für einen Azure Data Explorer-Cluster und Analysieren der Ergebnisse

  • Azure Data Explorer-Abfrageservergate: Aufgabe ohne Agent zur Einrichtung eines Gates für Releases je nach Abfrageergebnis

    Aufgabentypen

In diesem Dokument wird ein einfaches Beispiel für die Verwendung der Aufgabe Azure Data Explorer – Pipeline Tools zum Bereitstellen Ihrer Schemaänderungen in Ihrer Datenbank beschrieben. Vollständige CI/CD-Pipelines finden Sie unter Azure DevOps-Dokumentation.

Voraussetzungen

Vorbereiten Ihrer Inhalte für das Release

Es gibt drei Möglichkeiten zum Ausführen von Administratorbefehlen für den Cluster in einer Aufgabe.

Optionen zur Quellcodeverwaltung für Befehle

  • Verwenden eines Suchmusters zum Abrufen von mehreren Befehlsdateien aus einem lokalen Agent-Ordner (Buildquellen oder Releaseartefakte)

    Option „Lokaler Ordner“

  • Inline-Schreiben von Befehlen

    Option für Inline-Befehle

  • Angeben eines Dateipfads, um Befehlsdateien direkt aus der Git-Quellcodeverwaltung abzurufen (empfohlen)

    Option für Git-Dateien

    Erstellen Sie die folgenden Beispielordner (Funktionen, Richtlinien, Tabellen) in Ihrem Git-Repository. Kopieren Sie die Dateien von hier in die entsprechenden Ordner wie unten gezeigt, und übertragen Sie die Änderungen. Die Beispieldateien werden zur Verfügung gestellt, um den folgenden Workflow auszuführen.

    Erstellen von Ordnern für das Repository

    Tipp

    Bei der Erstellung eines eigenen Workflows empfehlen wir, den Code idempotent zu gestalten. Verwenden Sie beispielsweise .create-merge table anstelle von .create table und die Funktion .create-or-alter anstelle der Funktion .create.

Erstellen einer Releasepipeline

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an.

  2. Wählen Sie Pipelines>Releases aus, und wählen im linken Menü Neue Pipeline.

    Neue Pipeline

  3. Das Fenster Neue Releasepipeline wird geöffnet. Wählen Sie auf der Registerkarte Pipelines im Bereich Eine Vorlage auswählen die Option Leerer Auftrag aus.

    Wählen Sie eine Vorlage aus.

  4. Klicken Sie auf die Schaltfläche Stufe. Fügen Sie im Bereich Stufe den Namen der Stufe hinzu. Klicken Sie auf Speichern, um Ihre Pipeline zu speichern.

    Benennen der Stufe

  5. Klicken Sie auf die Schaltfläche Artefakt hinzufügen. Wählen Sie im Bereich Artefakt hinzufügen das Repository aus, in dem sich Ihr Code befindet, geben Sie die relevanten Informationen ein, und klicken Sie auf Hinzufügen. Klicken Sie auf Speichern, um Ihre Pipeline zu speichern.

    Fügen Sie ein Artefakt hinzu.

  6. Wählen Sie auf der Registerkarte Variablen+ Hinzufügen, um eine Variable für Endpunkt-URL zu erstellen, die in der Aufgabe verwendet wird. Geben Sie den Namen und den Wert des Endpunkts ein. Klicken Sie auf Speichern, um Ihre Pipeline zu speichern.

    Erstellen Sie eine Variable.

    Um Ihre Endpoint_URL zu finden, enthält die Übersichtsseite Ihres Azure Data Explorer-Cluster im Azure-Portal die URI des Azure Data Explorer-Cluster. Erstellen Sie den URI im folgenden Format https://<Azure Data Explorer cluster URI>?DatabaseName=<DBName>. Zum Beispiel, https://kustodocs.westus.kusto.windows.net?DatabaseName=SampleDB

    URI des Azure Data Explorer-Clusters

Erstellen von Aufgaben zum Bereitstellen der Ordner

  1. Klicken Sie auf der Registerkarte Pipeline auf 1 Auftrag, 0 Aufgabe, um Aufgaben hinzuzufügen.

    Fügen Sie Aufgaben hinzu.

  2. Wiederholen Sie die folgenden Schritte, um Befehlsaufgaben zum Bereitstellen von Dateien aus den Ordnern für Tabellen, Funktionen und Richtlinien zu erstellen:

    Hinzufügen von Administratorbefehlen

    1. Wählen Sie auf der Registerkarte Aufgaben das Pluszeichen ( + ) für Agentauftrag aus, und suchen Sie nach Azure Data Explorer.

    2. Wählen Sie unter Azure Data Explorer-Befehl ausführen die Option Hinzufügen aus.

    3. Wählen Sie Kusto-Befehl aus, und aktualisieren Sie die Aufgabe mit den folgenden Informationen:

      • Anzeigename: Der Name der Aufgabe. Ein Beispiel hierfür ist Deploy <FOLDER> , wobei <FOLDER> der Name des Ordners für die von Ihnen erstellte Bereitstellungsaufgabe ist.

      • Dateipfad: Geben Sie für jeden Ordner den Pfad in der Form */<FOLDER>/*.csl an, wobei <FOLDER> der relevante Ordner für die Aufgabe ist.

      • Endpunkt-URL: Geben Sie die im vorherigen Schritt erstellte Variable EndPoint URL an.

      • Dienstendpunkt verwenden: Wählen Sie diese Option aus.

      • Dienstendpunkt: Wählen Sie einen vorhandenen Dienstendpunkt aus, oder erstellen Sie einen neuen ( + Neu), indem Sie im Fenster Azure Data Explorer-Dienstverbindung hinzufügen die folgenden Informationen angeben:

        Einstellung Vorgeschlagener Wert
        Verbindungsname Geben Sie den Namen zum Identifizieren dieses Dienstendpunkts ein.
        Cluster-URL Den Wert finden Sie im Übersichtsbereich Ihres Azure Data Explorer-Clusters im Azure-Portal.
        Dienstprinzipal-ID Geben Sie die Microsoft Entra-App-ID ein (als Voraussetzung erstellt)
        Dienstprinzipal-App-Schlüssel Geben Sie den Microsoft Entra App Key (als Voraussetzung erstellt) ein.
        Microsoft Entra Mandanten-ID Geben Sie Ihren Microsoft Entra Mandanten ein (z. B. microsoft.com oder contoso.com).

      Aktivieren Sie das Kontrollkästchen Nutzung dieser Verbindung für alle Pipelines erlauben, und wählen Sie anschließend OK aus.

      Hinzufügen einer Dienstverbindung

  3. Wählen Sie Speichern aus, und überprüfen Sie auf der Registerkarte Aufgaben, ob drei Aufgaben vorhanden sind: Deploy Tables (Tabellen bereitstellen), Deploy Functions (Funktionen bereitstellen) und Deploy Policies (Richtlinien bereitstellen).

    Bereitstellen aller Ordner

Erstellen einer Abfrageaufgabe

Erstellen Sie bei Bedarf eine Aufgabe, um für den Cluster eine Abfrage auszuführen. Das Ausführen von Abfragen in einer Build- oder Releasepipeline kann verwendet werden, um ein Dataset zu überprüfen und basierend auf den Abfrageergebnissen einen Schritt erfolgreich auszuführen oder einen Fehler zu erzielen. Die Erfolgskriterien für Aufgaben können auf einem Schwellenwert für die Zeilenanzahl oder einem einzelnen Wert basieren. Dies hängt davon ab, was von der Abfrage zurückgegeben wird.

  1. Wählen Sie auf der Registerkarte Aufgaben das Pluszeichen ( + ) für Agentauftrag aus, und suchen Sie nach Azure Data Explorer.

  2. Wählen Sie unter Azure Data Explorer-Abfrage ausführen die Option Hinzufügen aus.

  3. Wählen Sie Kusto-Abfrage aus, und aktualisieren Sie die Aufgabe mit den folgenden Informationen:

    • Anzeigename: Der Name der Aufgabe. Beispiel: Abfragecluster.
    • Typ: Wählen Sie Inline aus.
    • Abfrage: Geben Sie die Abfrage ein, die Sie ausführen möchten.
    • Endpunkt-URL: Geben Sie die zuvor erstellte Variable EndPoint URL an.
    • Dienstendpunkt verwenden: Wählen Sie diese Option aus.
    • Dienstendpunkt: Wählen Sie einen Dienstendpunkt aus.

    Abfrageaufgabe

  4. Wählen Sie unter „Aufgabenergebnisse“ die Erfolgskriterien der Aufgabe je nach den Ergebnissen Ihrer Abfrage wie folgt aus:

    • Wenn von Ihrer Abfrage Zeilen zurückgegeben werden, wählen Sie die Option Zeilenanzahl aus und geben die erforderlichen Kriterien an.

      Zeilenanzahl für Abfrageaufgabe

    • Wenn von Ihrer Abfrage ein Wert zurückgegeben wird, wählen Sie Einzelwert aus und geben das erwartete Ergebnis an.

      Einzelwert für Abfrageaufgabe

Erstellen einer Aufgabe für ein Abfrageservergate

Erstellen Sie bei Bedarf eine Aufgabe zum Ausführen einer Abfrage für einen Cluster, und richten Sie ein Gate für den Releaseprozess in Abhängigkeit der Zeilenanzahl in den Abfrageergebnissen ein. Die Aufgabe für ein Abfrageservergate ist ein Auftrag ohne Agent. Dies bedeutet, dass die Abfrage direkt in Azure DevOps Server ausgeführt wird.

  1. Wählen Sie auf der Registerkarte Aufgaben das Pluszeichen ( + ) für Auftrag ohne Agent aus, und suchen Sie nach Azure Data Explorer.

  2. Wählen Sie unter Run Azure Data Explorer Query Server Gate (Azure Data Explorer-Abfrageservergate ausführen) die Option Hinzufügen aus.

  3. Wählen Sie die Option Kusto Query Server Gate (Kusto-Abfrageservergate) und dann Server Gate Test (Servergatetest) aus.

    Auswählen der Servergateaufgabe

  4. Konfigurieren Sie die Aufgabe, indem Sie die folgenden Informationen angeben:

    • Anzeigename: Der Name des Gates.
    • Dienstendpunkt: Wählen Sie einen Dienstendpunkt aus.
    • Datenbankname: Geben Sie den Namen der Datenbank an.
    • Typ: Wählen Sie Inline query (Inline-Abfrage) aus.
    • Abfrage: Geben Sie die Abfrage ein, die Sie ausführen möchten.
    • Maximum threshold (Maximaler Schwellenwert): Geben Sie die maximale Zeilenanzahl für die Erfolgskriterien der Abfrage an.

    Konfigurieren der Servergateaufgabe

Hinweis

Beim Ausführen des Release sollten Ergebnisse der folgenden Art angezeigt werden.

Abfragegateaufgabe

Ausführen des Release

  1. Wählen Sie + Release>Release erstellen, um ein Release zu erstellen.

    Erstellen Sie ein Release.

  2. Überprüfen Sie auf der Registerkarte Protokolle, ob die Bereitstellung erfolgreich war.

    Bereitstellung erfolgreich

Sie haben nun die Erstellung einer Releasepipeline für die Bereitstellung in der Präproduktion abgeschlossen.

Konfiguration der YAML-Pipeline

Die Aufgaben können sowohl über die Azure DevOps-Weboberfläche (wie oben gezeigt) als auch über YAML-Code innerhalb des Pipelineschemas konfiguriert werden.

Beispiel für die Verwendung eines Administratorbefehls

steps:
- task: Azure-Kusto.PublishToADX.PublishToADX.PublishToADX@1
  displayName: '<Task Name>'
  inputs:
    script: '<inline Script>'
    waitForOperation: true
    kustoUrls: '$(CONNECTIONSTRING):443?DatabaseName=""'
    customAuth: true
    connectedServiceName: '<Service Endpoint Name>'
    serialDelay: 1000
  continueOnError: true
  condition: ne(variables['ProductVersion'], '') ## Custom condition Sample

Beispiel für die Verwendung einer Abfrage

steps:
- task: Azure-Kusto.PublishToADX.ADXQuery.ADXQuery@1
  displayName: '<Task Display Name>'
  inputs:
    script: |  
     let badVer=
     RunnersLogs | where Timestamp > ago(30m)
         | where EventText startswith "$$runnerresult" and Source has "ShowDiagnostics"
         | extend State = extract(@"Status='(.*)', Duration.*",1, EventText)
         | where State == "Unhealthy"
         | extend Reason = extract(@'"NotHealthyReason":"(.*)","IsAttentionRequired.*',1, EventText)
         | extend Cluster = extract(@'Kusto.(Engine|DM|CM|ArmResourceProvider).(.*).ShowDiagnostics',2, Source)
         | where Reason != "Merge success rate past 60min is < 90%"
         | where Reason != "Ingestion success rate past 5min is < 90%"
         | where Reason != "Ingestion success rate past 5min is < 90%, Merge success rate past 60min is < 90%"
         | where isnotempty(Cluster)
         | summarize max(Timestamp) by Cluster,Reason 
         | order by  max_Timestamp desc      
         | where Reason startswith "Differe"
         | summarize by Cluster
     ;   
      DimClusters | where Cluster in (badVer)
     | summarize by Cluster , CmConnectionString , ServiceConnectionString ,DeploymentRing
     | extend ServiceConnectionString = strcat("#connect ", ServiceConnectionString)
     | where DeploymentRing == "$(DeploymentRing)"
    kustoUrls: 'https://<ClusterName>.kusto.windows.net?DatabaseName=<DataBaneName>'
    customAuth: true
    connectedServiceName: '<Service Endpoint Name>'
  continueOnError: true