Tugas Azure DevOps untuk Azure Data Explorer

Layanan Azure DevOps menyediakan alat kolaborasi pengembangan seperti alur berkinerja tinggi, repositori Git privat gratis, papan Kanban yang dapat dikonfigurasi, dan kemampuan pengujian otomatis dan berkelanjutan yang luas. Azure Pipelines adalah kemampuan Azure DevOps yang memungkinkan Anda mengelola CI/CD untuk menyebarkan kode Anda dengan alur berkinerja tinggi yang berfungsi dengan bahasa, platform, dan cloud apa pun. Azure Data Explorer - Alat Alur adalah tugas Azure Pipelines yang memungkinkan Anda membuat alur rilis dan menyebarkan perubahan database Anda ke database Azure Data Explorer Anda. Ini tersedia secara gratis di Visual Studio Marketplace. Ekstensi ini mencakup 3 tugas dasar:

  • Perintah Azure Data Explorer - Jalankan Perintah Admin terhadap kluster Azure Data Explorer

  • Azure Data Explorer Query - Jalankan Kueri terhadap kluster Azure Data Explorer dan uraikan hasilnya

  • Azure Data Explorer Query Server Gate - Tugas tanpa agen ke rilis Gate bergantung pada hasil kueri

    Jenis Tugas.

Dokumen ini menjelaskan contoh sederhana tentang penggunaan tugas Azure Data Explorer - Pipeline Tools untuk menyebarkan perubahan skema Anda ke database Anda. Untuk alur CI/CD lengkap, lihat dokumentasi Azure DevOps.

Prasyarat

Menyiapkan konten Anda untuk rilis

adalah tiga cara untuk menjalankan perintah admin terhadap kluster dalam tugas.

Opsi kontrol sumber perintah.

  • Gunakan pola pencarian untuk mendapatkan beberapa file perintah dari folder agen lokal (Sumber build atau Artefak rilis)

    Opsi folder lokal.

  • Menulis perintah sebaris

    Opsi perintah sebaris.

  • Tentukan jalur file untuk mendapatkan file perintah langsung dari kontrol sumber git (disarankan)

    Opsi file Git.

    Buat folder sampel berikut (Fungsi, Kebijakan, Tabel) di repositori Git Anda. Salin file dari sini ke folder masing-masing seperti yang terlihat di bawah ini dan terapkan perubahan. File sampel disediakan untuk menjalankan alur kerja berikut.

    Buat folder untuk repositori.

    Tip

    Saat membuat alur kerja Anda sendiri, sebaiknya buat kode Anda idempotensi. Misalnya, gunakan .create-merge table alih-alih .create table, dan gunakan .create-or-alter fungsi alih-alih .create fungsi.

Membuat alur pipa rilis

  1. Masuk ke Organisasi Azure DevOps Anda.

  2. PilihRilis>Alurdari menu sebelah kiri dan pilih Alur baru.

    Alur baru.

  3. Jendela Alur rilis baru terbuka. Di tab Alur , di panel Pilih templat , pilih Pekerjaan kosong.

    Pilih templat.

  4. Pilih tombol Tahap . Di panel Tahap , tambahkan Nama tahap. Pilih Simpan untuk menyimpan alur Anda.

    Beri nama panggung.

  5. Pilih tombol Tambahkan artefak . Di panel Tambahkan artefak , pilih repositori tempat kode Anda ada, isi informasi yang relevan, dan klik Tambahkan. Pilih Simpan untuk menyimpan alur Anda.

    Tambahkan artefak.

  6. Di tab Variabel , pilih + Tambahkan untuk membuat variabel untuk URL Titik Akhir yang akan digunakan dalam tugas. Tulis Nama dan Nilai titik akhir. Pilih Simpan untuk menyimpan alur Anda.

    Buat variabel.

    Untuk menemukan Endpoint_URL Anda, halaman gambaran umum Kluster Azure Data Explorer Anda di portal Azure berisi URI kluster Azure Data Explorer. Buat URI dalam format https://<Azure Data Explorer cluster URI>?DatabaseName=<DBName>berikut. Misalnya, https://kustodocs.westus.kusto.windows.net?DatabaseName=SampleDB

    URI kluster Azure Data Explorer.

Membuat tugas untuk menyebarkan folder

  1. Di tab Alur , klik 1 pekerjaan, 0 tugas untuk menambahkan tugas.

    Tambahkan tugas.

  2. Ulangi langkah-langkah berikut untuk membuat tugas perintah untuk menyebarkan file dari folder Tabel, Fungsi, dan Kebijakan :

    Tambahkan perintah admin.

    1. Di tab Tugas, pilih + menurut Pekerjaan agen dan cari Azure Data Explorer.

    2. Di bawah Jalankan Perintah azure Data Explorer, pilih Tambahkan.

    3. Pilih Perintah Kusto dan perbarui tugas dengan informasi berikut:

      • Nama tampilan: Nama tugas. Misalnya, Deploy <FOLDER> di mana <FOLDER> adalah nama folder untuk tugas penyebaran yang Anda buat.

      • Jalur file: Untuk setiap folder, tentukan jalur sebagai */<FOLDER>/*.csl tempat <FOLDER> folder yang relevan untuk tugas tersebut.

      • URL Titik Akhir: Tentukan variabel yang EndPoint URL dibuat pada langkah sebelumnya.

      • Gunakan Titik Akhir Layanan: Pilih opsi ini.

      • Titik Akhir Layanan: Pilih titik akhir layanan yang sudah ada atau buat yang baru (+ Baru) yang menyediakan informasi berikut di jendela Tambahkan koneksi layanan Azure Data Explorer:

        Pengaturan Nilai yang disarankan
        Nama Koneksi Masukkan nama untuk mengidentifikasi titik akhir layanan ini
        Url Kluster Nilai dapat ditemukan di bagian gambaran umum Kluster Azure Data Explorer Anda di portal Azure
        Id Perwakilan Layanan Masukkan ID Aplikasi Microsoft Entra (dibuat sebagai prasyarat)
        Kunci Aplikasi Perwakilan Layanan Masukkan Kunci Aplikasi Microsoft Entra (dibuat sebagai prasyarat)
        ID penyewa Microsoft Entra Masukkan penyewa Microsoft Entra Anda (seperti microsoft.com atau contoso.com)

      Pilih kotak centang Perbolehkan semua alur untuk menggunakan koneksi ini lalu pilih OK.

      Tambahkan koneksi layanan.

  3. Pilih Simpan lalu di tab Tugas , verifikasi bahwa ada tiga tugas: Sebarkan Tabel, Sebarkan Fungsi, dan Sebarkan Kebijakan.

    Sebarkan semua folder.

Membuat tugas Kueri

Jika diperlukan, buat tugas untuk menjalankan kueri terhadap kluster. Menjalankan kueri dalam alur Build atau Release dapat digunakan untuk memvalidasi himpunan data dan membuat langkah berhasil atau gagal berdasarkan hasil kueri. Kriteria keberhasilan tugas dapat didasarkan pada ambang batas jumlah baris atau nilai tunggal tergantung pada apa yang dikembalikan kueri.

  1. Di tab Tugas, pilih + menurut Pekerjaan agen dan cari Azure Data Explorer.

  2. Di bawah Jalankan Azure Data Explorer Query, pilih Tambahkan.

  3. Pilih Kueri Kusto dan perbarui tugas dengan informasi berikut:

    • Nama tampilan: Nama tugas. Misalnya, Kluster kueri.
    • Jenis: Pilih Sebaris.
    • Kueri: Masukkan kueri yang ingin Anda jalankan.
    • URL Titik Akhir: Tentukan variabel yang EndPoint URL dibuat sebelumnya.
    • Gunakan Titik Akhir Layanan: Pilih opsi ini.
    • Titik Akhir Layanan: Pilih titik akhir layanan.

    Tugas kueri.

  4. Di bawah Hasil Tugas, pilih kriteria keberhasilan tugas berdasarkan hasil kueri Anda, sebagai berikut:

    • Jika kueri Anda mengembalikan baris, pilih Jumlah Baris dan berikan kriteria yang Anda butuhkan.

      Jumlah baris tugas kueri.

    • Jika kueri Anda mengembalikan nilai, pilih Nilai Tunggal dan berikan hasil yang diharapkan.

      Mengkueri nilai tunggal tugas.

Membuat tugas Gerbang Server Kueri

Jika diperlukan, buat tugas untuk menjalankan kueri terhadap kluster dan gabungkan kemajuan rilis yang menunggu Jumlah Baris Hasil Kueri. Tugas Gerbang Kueri Server adalah pekerjaan tanpa agen, yang berarti bahwa kueri berjalan langsung di Azure DevOps Server.

  1. Di tab Tugas, pilih + menurut Pekerjaan tanpa agen dan cari Azure Data Explorer.

  2. Di bawah Jalankan Gerbang Server Kueri Azure Data Explorer, pilih Tambahkan.

  3. Pilih Gerbang Server Kueri Kusto lalu pilih Uji Gerbang Server.

    Pilih Tugas Gerbang Server.

  4. Konfigurasikan tugas yang memberikan informasi berikut:

    • Nama tampilan: Nama gerbang.
    • Titik Akhir Layanan: Pilih titik akhir layanan.
    • Nama database: Tentukan nama database.
    • Jenis: Pilih Kueri sebaris.
    • Kueri: Masukkan kueri yang ingin Anda jalankan.
    • Ambang batas maksimum: Tentukan jumlah baris maksimum untuk kriteria keberhasilan kueri.

    Mengonfigurasi Tugas Gerbang Server.

Catatan

Anda akan melihat hasil seperti berikut Ini Saat menjalankan rilis.

Tugas Gerbang Kueri.

Jalankan rilis

  1. Pilih + Rilis>Buat rilis untuk membuat rilis.

    Buat rilis.

  2. Di tab Log , periksa status penyebaran berhasil.

    Penyebaran berhasil.

Anda sekarang telah menyelesaikan pembuatan alur rilis untuk penyebaran ke pra-produksi.

Konfigurasi Yaml Pipeline

Tugas dapat dikonfigurasi baik melalui Azure DevOps Web UI (seperti yang ditunjukkan di atas) dan melalui kode Yaml dalam skema alur

Penggunaan Sampel Perintah Admin

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

Penggunaan Sampel Kueri

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