Cara menggunakan variabel dan parameter dengan aman di alur Anda

Layanan Azure DevOps | Azure DevOps Server 2022 | Azure DevOps Server 2020

Artikel ini membahas cara menggunakan variabel dan parameter dengan aman untuk mengumpulkan input dari pengguna alur. Jika Anda ingin mempelajari selengkapnya tentang menggunakan variabel dan parameter, lihat:

Berhati-hatilah dengan variabel rahasia. Cara yang disarankan untuk mengatur variabel rahasia ada di UI, dalam grup variabel, dan dalam grup variabel dari Azure Key Vault. Untuk informasi selengkapnya, lihat mengatur variabel rahasia.

Variabel

Variabel dapat menjadi cara mudah untuk mengumpulkan informasi dari pengguna di muka. Anda juga dapat menggunakan variabel untuk meneruskan data dari langkah ke langkah dalam alur.

Tetapi gunakan variabel dengan hati-hati. Variabel yang baru dibuat, baik didefinisikan dalam YAML atau ditulis oleh skrip, dibaca-tulis secara default. Langkah hilir dapat mengubah nilai variabel dengan cara yang tidak Anda harapkan.

Misalnya, skrip Anda membaca:

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

Langkah sebelumnya dapat diatur MyConfig ke Debug & deltree /y c:. Meskipun contoh ini hanya akan menghapus konten agen build Anda, Anda dapat membayangkan bagaimana pengaturan ini dapat dengan mudah menjadi jauh lebih berbahaya.

Anda dapat membuat variabel baca-saja. Variabel sistem seperti Build.SourcesDirectory, variabel output tugas, dan variabel waktu antrean selalu baca-saja. Variabel yang dibuat di YAML atau dibuat pada waktu proses oleh skrip dapat ditetapkan sebagai baca-saja. Saat skrip atau tugas membuat variabel baru, skrip atau tugas dapat meneruskan isReadonly=true bendera dalam perintah pengelogannya untuk membuat variabel baca-saja.

Di YAML, Anda dapat menentukan variabel baca-saja dengan menggunakan kunci tertentu:

variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true

Variabel waktu antrean

Saat menentukan variabel di editor UI Alur, Anda dapat memilih untuk membiarkan pengguna mengambil alih nilainya saat menjalankan alur. Kami menyebut variabel seperti itu sebagai variabel waktu antrean. Variabel waktu antrean selalu didefinisikan di editor UI Alur.

Cuplikan layar menentukan variabel waktu antrean.

Variabel waktu antrean diekspos ke pengguna akhir saat mereka menjalankan alur secara manual, dan mereka dapat mengubah nilainya. Cuplikan layar memperbarui nilai variabel waktu antrean.

Pengguna memerlukan izin edit konfigurasi build antrean pada alur untuk menentukan variabel yang ditetapkan pada waktu antrean.

Batasi variabel yang dapat diatur pada waktu antrean

UI dan REST API yang digunakan untuk menjalankan alur menyediakan sarana bagi pengguna untuk menentukan variabel baru pada waktu antrean.

Cuplikan layar menambahkan variabel waktu antrean tepat sebelum menjalankan alur.

Pada awal-awal Azure Pipelines, fungsionalitas ini memiliki beberapa masalah:

  • Ini memungkinkan pengguna untuk menentukan variabel baru yang tidak secara eksplisit ditentukan oleh penulis alur dalam definisi.
  • Hal ini memungkinkan pengguna untuk mengambil alih variabel sistem.

Untuk memperbaiki masalah ini, kami menentukan pengaturan untuk membatasi variabel yang dapat diatur pada waktu antrean. Dengan mengaktifkan pengaturan ini, hanya variabel yang secara eksplisit ditandai sebagai "Dapat diatur pada waktu antrean" yang dapat diatur. Dengan kata lain, Anda dapat mengatur variabel apa pun pada waktu antrean kecuali jika pengaturan ini diaktifkan.

Pengaturan ini dirancang untuk bekerja di tingkat organisasi dan di tingkat proyek.

  1. Tingkat organisasi. Ketika pengaturan aktif, pengaturan memberlakukan bahwa, untuk semua alur di semua proyek di organisasi, hanya variabel yang secara eksplisit ditandai sebagai "Dapat Diatur pada waktu antrean" yang dapat diatur. Saat pengaturan nonaktif, setiap proyek dapat memilih apakah akan membatasi variabel yang ditetapkan pada waktu antrean atau tidak. Pengaturan adalah tombol di bawah Organisasi Pengaturan -> Alur -> Pengaturan. Hanya Administrator Koleksi Proyek yang dapat mengaktifkan atau menonaktifkannya. Cuplikan layar membatasi variabel yang dapat diatur pada waktu antrean di tingkat organisasi.
  2. Tingkat proyek. Ketika pengaturan aktif, pengaturan memberlakukan bahwa, untuk semua alur dalam proyek, hanya variabel yang secara eksplisit ditandai sebagai "Dapat Diatur pada waktu antrean" yang dapat diatur. Jika pengaturan aktif di tingkat organisasi, pengaturan aktif untuk semua proyek dan tidak dapat dinonaktifkan. Pengaturannya adalah tombol di bawah Project Pengaturan -> Pipelines -> Pengaturan. Hanya Administrator Proyek yang dapat mengaktifkan atau menonaktifkannya. Cuplikan layar membatasi variabel yang dapat diatur pada waktu antrean pada tingkat proyek.

Mari kita lihat contohnya. Katakanlah pengaturan aktif dan alur Anda menentukan variabel bernama my_variable yang tidak dapat diatur pada waktu antrean. Cuplikan layar menentukan variabel dalam alur klasik.

Selanjutnya, asumsikan Anda ingin menjalankan alur. Panel Variabel tidak menampilkan variabel apa pun, dan tombol Tambahkan variabel hilang.

Cuplikan layar panel variabel dengan pengaturan aktif.

Menggunakan Panggilan Builds - Queue dan Runs - Run Pipeline REST API untuk mengantre eksekusi alur dan mengatur nilai my_variable atau variabel baru akan gagal dengan kesalahan yang mirip dengan yang berikut ini.

{
  "$id": "1",
  "innerException": null,
  "message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
  "typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
  "typeKey": "PipelineValidationException",
  "errorCode": 0,
  "eventId": 3000
}

Parameter

Tidak seperti variabel, parameter alur tidak dapat diubah oleh alur saat sedang berjalan. Parameter memiliki jenis data seperti number dan string, dan dapat dibatasi untuk subset nilai. Membatasi parameter berguna ketika bagian alur yang dapat dikonfigurasi pengguna harus mengambil nilai hanya dari daftar yang dibatasi. Penyiapan memastikan bahwa alur tidak akan mengambil data arbitrer.

Mengaktifkan validasi parameter argumen tugas shell

Alur dapat mereferensikan tugas yang dijalankan dalam alur. Beberapa tugas yang disertakan dalam Azure DevOps memiliki parameter argumen yang memungkinkan Anda menentukan lebih banyak opsi untuk tugas tersebut.

Saat pengaturan Aktifkan validasi parameter argumen tugas shell diaktifkan, parameter argumen ditinjau untuk karakter apa pun yang mungkin tidak dijalankan dengan benar oleh shell. Contoh karakter termasuk titik koma, tanda kutip, dan tanda kurung.

Mirip dengan variabel Batas yang dapat diatur pada opsi waktu antrean, Aktifkan validasi parameter argumen tugas shell dapat dikonfigurasi pada tingkat organisasi di Pengaturan> Pipelines> Pengaturan atau di tingkat proyek di Pengaturan> Pipelines Pengaturan>.

Saat diaktifkan, ada masalah validasi yang terdeteksi, pesan kesalahan seperti berikut ini dicatat: Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

Untuk mengatasi masalah ini, sesuaikan argumen dengan melarikan diri karakter khusus seperti yang ditunjukkan dalam pesan kesalahan.

Saat Aktifkan validasi parameter argumen tugas shell diaktifkan, validasi diterapkan ke parameter argumen dalam tugas berikut.

  • PowerShell
  • BatchScript
  • Bash
  • Ssh
  • AzureFileCopy
  • WindowsMachineFileCopy

Langkah berikutnya

Setelah mengamankan input, Anda juga perlu mengamankan infrastruktur bersama Anda.