Mengotomatiskan build, pengujian, dan penyebaran proyek Azure Stream Analytics

Paket npm CI/CD Azure Stream Analytics (ASA) memungkinkan Anda membuat, menguji, dan menyebarkan proyek Azure Stream Analytics secara otomatis. Artikel ini menunjukkan cara menggunakan paket npm dengan sistem CI/CD apa pun. Untuk menyiapkan alur dengan Azure DevOps, lihat Menggunakan Azure DevOps untuk membuat alur CI/CD untuk pekerjaan Azure Stream Analytics.

Jika Anda tidak memiliki proyek Azure Stream Analytics, buat proyek menggunakan Visual Studio Code atau ekspor proyek yang sudah ada dari portal Azure.

Penginstalan

Anda dapat mengunduh paket dari situs npm, atau menjalankan perintah berikut di terminal Anda.

npm install -g azure-streamanalytics-cicd

Membuat proyek

Catatan

Kami sangat menyarankan Anda menggunakan --v2 opsi untuk skema templat ARM yang diperbarui. Skema yang diperbarui memiliki lebih sedikit parameter namun mempertahankan fungsionalitas yang sama dengan versi sebelumnya.

Templat ARM lama tidak akan digunakan lagi di masa mendatang. Mulai sekarang, hanya templat yang dibuat melalui build --v2 yang akan menerima pembaruan atau perbaikan bug.

azure-streamanalytics-cicd build --v2 --project <projectFullPath> [--outputPath <outputPath>]

Perintah build melakukan pemeriksaan sintaks kata kunci dan menghasilkan templat Azure Resource Manager (ARM).

Argumen Deskripsi
--project Tentukan file asaproj.json menggunakan jalur absolut atau relatif.
--outputPath Tentukan folder output untuk menyimpan Templat ARM menggunakan jalur absolut atau relatif. Jika outputPath tidak ditentukan, templat ditempatkan di direktori saat ini.

Contoh:

# Go to the project directory
cd <path-to-the-project>

# Build project
azure-streamanalytics-cicd build --v2 --project ./asaproj.json --outputPath ./Deploy

Jika proyek berhasil dibangun, Anda akan melihat dua file JSON yang dibuat di bawah folder output:

  • File templat ARM: [ProjectName].JobTemplate.json
  • File parameter ARM: [ProjectName].JobTemplate.parameters.json

Nilai default untuk file parameters.json berasal dari pengaturan proyek Anda. Jika Anda ingin menyebarkan ke lingkungan lain, ganti nilai yang sesuai.

Nilai default untuk semua info masuk adalah null. Anda diharuskan untuk mengatur nilai sebelum menyebarkan ke Azure.

"Input_EntryStream_sharedAccessPolicyKey": {
  "value": null
}

Untuk menggunakan identitas terkelola untuk Azure Data Lake Store Gen1 sebagai sink output, Anda perlu menyediakan Akses ke perwakilan layanan menggunakan PowerShell sebelum menyebarkan Azure. Pelajari selengkapnya tentang cara menyebarkan ADLS Gen1 dengan Identitas Terkelola dengan templat Azure Resource Manager.

Jalankan secara lokal

Jika proyek Anda telah menetapkan file input lokal, Anda dapat menjalankan skrip Analisis Aliran di lingkungan lokal menggunakan perintah localrun.

azure-streamanalytics-cicd localrun -project <projectFullPath> [-outputPath <outputPath>] [-customCodeZipFilePath <zipFilePath>]
Argumen Deskripsi
--project Tentukan file asaproj.json menggunakan jalur absolut atau relatif.
--outputPath Tentukan folder output untuk menyimpan Templat ARM menggunakan jalur absolut atau relatif. Jika outputPath tidak ditentukan, templat ditempatkan di direktori saat ini.
--customCodeZipFilePath Jalur file zip untuk kode kustom C#, seperti UDF atau deserializer, jika digunakan. Masukkan DLL ke dalam file zip dan tentukan jalur ini.

Contoh:

# Go to the project directory
cd <path-to-the-project>

# Run project locally
azure-streamanalytics-cicd localrun --project ./asaproj.json"

Catatan

JavaScript UDF hanya berfungsi pada Windows.

Pengujian otomatis

Anda dapat menggunakan paket npm CI/CD untuk mengonfigurasi dan menjalankan pengujian otomatis untuk proyek Azure Stream Analytics Anda.

Menambahkan kasus pengujian

azure-streamanalytics-cicd addtestcase --project <projectFullPath> [-testConfigPath <testConfigFileFullPath>]

Anda dapat menemukan kasus pengujian dalam file konfigurasi pengujian.

Argumen Deskripsi
--project Tentukan file asaproj.json menggunakan jalur absolut atau relatif.
--testConfigPath Jalur file konfigurasi pengujian. Jika tidak ditentukan, file dicari di \test di bawah direktori file asaproj.json saat ini, dengan nama file default testConfig.json. File baru dibuat jika tidak ada.

Contoh:

# Go to the project directory
cd <path-to-the-project>

# Add a test case
azure-streamanalytics-cicd addtestcase --project ./asaproj.json

Jika file konfigurasi pengujian kosong, konten berikut ditambahkan ke file. Jika tidak, kasus pengujian ditambahkan ke array TestCases . Konfigurasi input yang diperlukan secara otomatis diisi sesuai dengan file konfigurasi input. FilePath dari setiap input dan output yang diharapkan harus ditentukan sebelum menjalankan pengujian. Anda dapat mengubah konfigurasi ini secara manual.

Jika Anda ingin validasi pengujian mengabaikan output tertentu, atur bidang Diperlukan dari output yang diharapkan ke false.

{
  "Script": [Absolute path of your script],
  "TestCases": [
    {
      "Name": "Case 1",
      "Inputs": [
        {
          "InputAlias": [Input alias string],
          "Type": "Data Stream",
          "Format": "JSON",
          "FilePath": [Required],
          "ScriptType": "InputMock"
        }
      ],
      "ExpectedOutputs": [
        {
          "OutputAlias": [Output alias string],
          "FilePath": [Required],
          "IgnoreFields": [Fields to ignore for test validation, e.g., ["col1", "col2"]],
          "Required": true
        }
      ]
    }
  ]
}

Jalankan pengujian unit

Anda bisa menggunakan perintah berikut untuk menjalankan beberapa kasus pengujian untuk proyek Anda. Ringkasan hasil pengujian dibuat di folder output. Proses keluar dengan kode 0 untuk semua pengujian yang lulus; -1 untuk pengecualian yang terjadi; -2 untuk pengujian gagal.

azure-streamanalytics-cicd test --project <projectFullPath> [--testConfigPath <testConfigFileFullPath>] [--outputPath <outputPath>] [--customCodeZipFilePath <zipFilePath>]
Argumen Deskripsi
--project Jalur file asaproj.json .
--testConfigPath Jalur ke file konfigurasi pengujian. Jika tidak ditentukan, file dicari di \test di bawah direktori file asaproj.json saat ini, dengan nama file default testConfig.json.
--outputPath Jalur folder output hasil pengujian. Jika tidak ditentukan, file hasil output ditempatkan di direktori saat ini.
--customCodeZipFilePath Jalur file zip untuk kode kustom seperti UDF atau deserializer, jika digunakan. Anda perlu mengemas DLL ke file zip dan menentukan jalurnya.

Jika kasus pengujian dijalankan, Anda dapat menemukan file testResultSummary.json yang dihasilkan di folder output.

{
  "Total": (integer) total_number_of_test_cases,
  "Passed": (integer) number_of_passed_test_cases,
  "Failed": (integer) number_of_failed_test_cases,
  "Script": (string) absolute_path_to_asaql_file,
  "Results": [ (array) detailed_results_of_test_cases
    {
      "Name": (string) name_of_test_case,
      "Status": (integer) 0(passed)_or_1(failed),
      "Time": (string) time_span_of_running_test_case,
      "OutputMatched": [ (array) records_of_actual_outputs_equal_to_expected_outputs
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": (string) path_to_the_expected_output_file,
          "Output": (string) path_to_the_actual_output_file
        }
      ],
      "OutputNotEqual": [ (array) records_of_actual_outputs_not_equal_to_expected_outputs
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": (string) path_to_the_expected_output_file,
          "Output": (string) path_to_the_actual_output_file
        }
      ],
      "OutputMissing": [ (array) records_of_actual_outputs_missing
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": (string) path_to_the_expected_output_file,
          "Output": ""
        }
      ],
      "OutputUnexpected": [ (array) records_of_actual_outputs_unexpected
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": "",
          "Output": (string) path_to_the_actual_output_file
        }
      ],
      "OutputUnrequired": [ (array) records_of_actual_outputs_unrequired_to_be_checked
        {
          "OutputAlias": (string) output_alias,
          "ExpectedOutput": (string) path_to_the_expected_output_file,
          "Output": (string) path_to_the_actual_output_file
        }
      ]
    }
  ],
  "Time": (string) time_span_of_running_all_test_cases,
}

Catatan

Jika hasil kueri berisi nilai float, Anda mungkin mengalami sedikit perbedaan dalam nilai yang dihasilkan yang mengarah ke pengujian yang mungkin gagal. Ini didasarkan pada berbagai kerangka kerja .NET yang mendukung mesin Visual Studio atau Visual Studio dan mesin pemrosesan pengujian. Jika Anda ingin memastikan bahwa pengujian berhasil dijalankan, Anda harus mengurangi presisi nilai yang dihasilkan atau menyelaraskan hasilnya untuk dibandingkan secara manual dengan hasil pengujian yang dihasilkan.

Sebarkan ke Azure

Untuk menyebarkan proyek Azure Stream Analytics menggunakan templat ARM, ikuti langkah-langkah berikut:

  1. Sambungkan ke akun Azure Anda:

    # Connect to Azure
    Connect-AzAccount
    # Set the Azure subscription
    Set-AzContext [SubscriptionID/SubscriptionName]
    
  2. Sebarkan proyek Azure Stream Analytics Anda:

    $templateFile = ".\Deploy\ClickStream-Filter.JobTemplate.json"
    $parameterFile = ".\Deploy\ClickStream-Filter.JobTemplate.parameters.json"
    New-AzResourceGroupDeployment `
      -Name devenvironment `
      -ResourceGroupName myResourceGroupDev `
      -TemplateFile $templateFile `
      -TemplateParameterFile $parameterFile
    

Untuk informasi selengkapnya tentang menyebarkan sumber daya dengan templat ARM, lihat Menyebarkan dengan file templat Resource Manager dan Azure PowerShell.

Langkah berikutnya