Azure DevOps-uppgift för Azure Data Explorer

Azure DevOps Services tillhandahåller samarbetsverktyg för utveckling, till exempel pipelines med höga prestanda, kostnadsfria privata Git-lagringsplatsen, konfigurerbara Kanban-tavlor och omfattande funktioner för automatiserad och kontinuerlig testning. Azure Pipelines är en Azure DevOps-funktion som gör att du kan hantera CI/CD för att distribuera din kod med högpresterande pipelines som fungerar med alla språk, plattformar och moln. Azure Data Explorer – Pipeline Tools är Azure Pipelines-uppgiften som gör att du kan skapa lanseringspipelines och distribuera dina databasändringar till dina Azure Data Explorer databaser. Det är tillgängligt kostnadsfritt på Visual Studio Marketplace. Det här tillägget innehåller tre grundläggande uppgifter:

  • Azure Data Explorer – Kör administratörskommandon mot ett Azure Data Explorer kluster

  • Azure Data Explorer fråga – köra frågor mot ett Azure Data Explorer kluster och parsa resultaten

  • Azure Data Explorer Query Server Gate – Agentlös uppgift till gate-versioner beroende på frågeresultatet

    Uppgiftstyper.

Det här dokumentet beskriver ett enkelt exempel på hur du använder uppgiften Azure Data Explorer - Pipeline Tools för att distribuera schemaändringarna till databasen. Fullständiga CI/CD-pipelines finns i Azure DevOps-dokumentationen.

Förutsättningar

Förbered ditt innehåll för lansering

det finns tre sätt att köra administratörskommandon mot kluster i en uppgift.

Kontrollalternativ för kommandokälla.

  • Använd ett sökmönster för att hämta flera kommandofiler från en lokal agentmapp (build-källor eller frisläpp artefakter)

    Alternativet Lokal mapp.

  • Skriva kommandon infogade

    Infogade kommandoalternativ.

  • Ange en filsökväg för att hämta kommandofiler direkt från git-källkontroll (rekommenderas)

    Alternativet Git-filer.

    Skapa följande exempelmappar (Functions,Principer,Tabeller ) Git-lagringsplatsen. Kopiera filerna härifrån till respektive mappar enligt nedan och genomför ändringarna. Exempelfilerna tillhandahålls för att köra följande arbetsflöde.

    Skapa mappar för lagringsplatsen.

    Tips

    När du skapar ett eget arbetsflöde rekommenderar vi att du gör koden idempotent. Använd till exempel i .create-merge table stället för och funktionen i stället för funktionen .create table.create-or-alter.create .

Skapa en versionspipeline

  1. Logga in på din Azure DevOps-organisation.

  2. Välj PipelinesReleases (Versioner av pipelines) på den vänstra menyn och välj New pipeline (Ny pipeline).

    Ny pipeline.

  3. Fönstret Ny lanseringspipeline öppnas. På fliken Pipelines går du till fönstret Välj en mall och väljer Tomt jobb.

    Välj en mall.

  4. Välj knappen Fas. I fönstret Fas lägger du till fasnamnet. Välj Spara för att spara din pipeline.

    Namnge fasen.

  5. Välj knappen Lägg till en artefakt. I fönstret Lägg till en artefakt väljer du den lagringsplats där koden finns, fyller i relevant information och klickar på Lägg till. Välj Spara för att spara din pipeline.

    Lägg till en artefakt.

  6. På fliken Variabler väljer du + Lägg till för att skapa en variabel för Slutpunkts-URL som ska användas i uppgiften. Skriv Namn och Värde för slutpunkten. Välj Spara för att spara din pipeline.

    Skapa variabel.

    För att hitta Endpoint_URL innehåller översiktssidan för ditt Azure Data Explorer kluster i Azure Portal den Azure Data Explorer kluster-URI:en. Skapa URI:en i följande https://<Azure Data Explorer cluster URI>?DatabaseName=<DBName> format. Till exempel https://kustodocs.westus.kusto.windows.net?DatabaseName=SampleDB

    Azure Data Explorer kluster-URI.

Skapa uppgifter för att distribuera mapparna

  1. På fliken Pipeline klickar du på 1 jobb, 0 uppgift för att lägga till aktiviteter.

    Lägg till uppgifter.

  2. Upprepa följande steg för att skapa kommandoaktiviteter för att distribuera filer från mapparna Tabeller,Funktioneroch Principer:

    Lägg till administratörskommandon.

    1. På fliken Uppgifter väljer du efter agentjobb och söker efter Azure Data Explorer.

    2. Under Kör Azure Data Explorer kommando väljerdu Lägg till.

    3. Välj Kusto-kommando och uppdatera uppgiften med följande information:

      • Visningsnamn:Namnet på aktiviteten. Till Deploy <FOLDER> exempel, där <FOLDER> är namnet på mappen för den distributionsuppgift som du skapar.

      • Filsökväg:För varje mapp anger du sökvägen som var är relevant mapp för <FOLDER> uppgiften.

      • Slutpunkts-URL:Ange variabeln som skapades i föregående steg.

      • Använd Tjänstslutpunkt:Välj det här alternativet.

      • Tjänstslutpunkt:Välj en befintlig tjänstslutpunkt eller skapa en ny (+ Ny) med följande information i fönstret Lägg till Azure Data Explorer tjänstanslutning:

        Inställning Föreslaget värde
        Anslutningsnamn Ange ett namn för att identifiera den här tjänstslutpunkten
        Kluster-URL Värdet finns i översiktsavsnittet för ditt Azure Data Explorer kluster i Azure Portal
        Id för tjänstens huvudnamn Ange AAD app-ID (skapas som förutsättning)
        Appnyckel för tjänstens huvudnamn Ange AAD appnyckel (skapad som förutsättning)
        AAD klientorganisations-ID Ange din AAD (till exempel microsoft.com eller contoso.com)

      Markera kryssrutan Tillåt att alla pipelines använder den här anslutningen och välj sedan OK.

      Lägg till tjänstanslutning.

  3. Välj Spara och kontrollera på fliken Uppgifter att det finns tre uppgifter: Distribuera tabeller,Distribuera funktioneroch Distribuera principer.

    Distribuera alla mappar.

Skapa en frågeuppgift

Om det behövs skapar du en uppgift för att köra en fråga mot klustret. Att köra frågor i en bygg- eller lanseringspipeline kan användas för att verifiera en datauppsättning och få ett steg att lyckas eller misslyckas baserat på frågeresultatet. Framgångskriterierna för aktiviteterna kan baseras på ett tröskelvärde för radantal eller ett enskilt värde beroende på vad frågan returnerar.

  1. På fliken Uppgifter väljer du efter agentjobb och söker efter Azure Data Explorer.

  2. Under Kör Azure Data Explorer frågaväljer du Lägg till.

  3. Välj Kusto-fråga och uppdatera uppgiften med följande information:

    • Visningsnamn:Namnet på aktiviteten. Till exempel Frågekluster.
    • Skriv: Välj Infogade.
    • Fråga:Ange den fråga som du vill köra.
    • Slutpunkts-URL:Ange variabeln som skapades tidigare.
    • Använd Tjänstslutpunkt:Välj det här alternativet.
    • Tjänstslutpunkt:Välj en tjänstslutpunkt.

    Frågeuppgift.

  4. Under Uppgiftsresultat väljer du uppgiftens framgångskriterier baserat på resultatet av din fråga enligt följande:

    • Om frågan returnerar rader väljer du Radantal och anger de kriterier som du behöver.

      Antal frågeaktivitetsrad.

    • Om frågan returnerar ett värde väljer du Enskilt värde och anger det förväntade resultatet.

      Frågeuppgiftens enskilda värde.

Skapa en Query Server Gate-uppgift

Om det behövs skapar du en uppgift för att köra en fråga mot ett kluster och gater lanseringsförloppet som väntar på radantal frågeresultat. Server Query Gate-uppgiften är ett agentlöst jobb, vilket innebär att frågan körs direkt på Azure DevOps Server.

  1. På fliken Uppgifter väljer du efter Agentlös jobb och söker efter Azure Data Explorer.

  2. Under Kör Azure Data Explorer Query Server Gate väljerdu Lägg till.

  3. Välj Kusto Query Server Gate och välj sedan Server Gate Test.

    Välj ServerPortaktivitet.

  4. Konfigurera uppgiften med följande information:

    • Visningsnamn:Namnet på grinden.
    • Tjänstslutpunkt:Välj en tjänstslutpunkt.
    • Databasnamn:Ange databasnamnet.
    • Skriv: Välj Den infogade frågan.
    • Fråga:Ange den fråga som du vill köra.
    • Högsta tröskelvärde:Ange det maximala radantalet för frågans lyckade villkor.

    Konfigurera serverportens uppgift.

Anteckning

Du bör se resultat som liknar följande när du kör versionen.

Query Gate-uppgift.

Kör versionen

  1. Välj + Skapa versionför att skapa en version.

    Skapa en version.

  2. På fliken Loggar kontrollerar du att distributionsstatusen har lyckats.

    Distributionen har lyckats.

Nu har du skapat en lanseringspipeline för distribution till förproduktion.

Konfiguration av Yaml-pipeline

Uppgifterna kan konfigureras både via Azure DevOps Web UI (som visas ovan) och via Yaml-kod i pipelineschemat

Exempelanvändning för administratörskommando

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

Användning av frågeexempel

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