Bagikan melalui


definisi resources.webhooks.webhook

Sumber daya webhook memungkinkan Anda mengintegrasikan alur Anda dengan layanan eksternal untuk mengotomatiskan alur kerja.

webhooks:
- webhook: string # Required as first property. Name of the webhook.
  connection: string # Required. Name of the connection. In case of offline webhook this will be the type of Incoming Webhook otherwise it will be the type of the webhook extension.
  type: string # Name of the webhook extension. Leave this empty if it is an offline webhook.
  filters: [ filter ] # List of trigger filters.

Definisi yang mereferensikan definisi ini: resources.webhooks

Properti

webhook String. Diperlukan sebagai properti pertama.
Nama webhook. Nilai yang dapat diterima: [-_A-Za-z0-9]*.

connection String. Wajib diisi.
Nama koneksi. Dalam kasus webhook offline, ini akan menjadi jenis Webhook Masuk jika tidak, itu akan menjadi jenis ekstensi webhook.

type String.
Nama ekstensi webhook. Biarkan kosong ini jika webhook offline.

filtersresources.webhooks.webhook.filters.
Daftar filter pemicu.

Contoh

Contoh dasar

Anda dapat menentukan alur Anda sebagai berikut.

resources:
  webhooks:
    - webhook: WebHook
      connection: IncomingWH

steps:  
- script: echo ${{ parameters.WebHook.resource.message.title }}

Untuk memicu alur Anda menggunakan webhook, Anda perlu membuat POST permintaan ke https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<webhook_connection_name>?api-version=6.0-preview. Titik akhir ini tersedia untuk umum, dan tidak diperlukan otorisasi. Permintaan harus memiliki isi berikut.

{
    "resource": {
        "message": {
            "title": "Hello, world!",
            "subtitle": "I'm using WebHooks!"
        }
    }
}

Saat Anda mengakses data dari isi permintaan webhook, perhatikan bahwa data tersebut dapat menyebabkan YAML yang salah. Misalnya, jika di alur sebelumnya, langkah Anda membaca - script: echo ${{ parameters.WebHook.resource.message }}, dan Anda memicu alur melalui webhook, alur tidak berjalan. Ini karena dalam proses mengganti ${{ parameters.WebHook.resource.message.title }} dengan message, yang berisi JSON berikut, YAML yang dihasilkan menjadi tidak valid.

{
  "title": "Hello, world!",
  "subtitle": "I'm using WebHooks!"
}

Karena YAML yang dihasilkan menjadi tidak valid, tidak ada eksekusi alur yang diantrekan sebagai respons.

Mencegah eksekusi alur yang tidak sah

Webhook memungkinkan siapa pun untuk memicu alur Anda, selama mereka mengetahui nama-nama koneksi layanan organisasi dan webhook Anda.

Anda dapat mencegah eksekusi alur yang tidak sah dengan menentukan rahasia saat membuat koneksi layanan Webhook Masuk. Anda juga perlu menentukan nama header HTTP yang berisi checksum SHA-1 dari isi webhook.

Untuk memverifikasi bahwa panggilan REST API webhook masuk diotorisasi, Azure Pipelines menghitung checksum SHA-1 dari isi permintaan menggunakan rahasia sebagai kunci. Kemudian membandingkannya dengan checksum yang diteruskan di header permintaan. Dengan cara ini, penelepon membuktikan mereka tahu rahasianya.

Mari kita lihat contohnya. Katakanlah Anda mengonfigurasi koneksi layanan Webhook Masuk bernama IncomingWH, yang ditentukan rahasianya adalah secret, dan bahwa checksum dikirim di header HTTP bernama X-WH-Checksum. Bayangkan Anda memiliki alur yang menentukan sumber daya Webhook.

Katakanlah Anda ingin memicu alur menggunakan isi permintaan berikut:

{"resource":{"message":{"title":"Hello, world!","subtitle":"I'm using WebHooks!"}}}

Untuk melakukan ini, Anda perlu membuat POST permintaan ke https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview dan menambahkan X-WH-Checksum header dengan nilai 750D33212D3AD4932CC390819050734831A0A94F. Anda tidak perlu menentukan nama pengguna apa pun & kata sandi atau jenis informasi autentikasi lainnya.

Azure Pipelines akan secara independen menghitung checksum SHA-1 isi menggunakan secret sebagai kunci dan akan menghasilkan nilai yang sama 750D33212D3AD4932CC390819050734831A0A94F . Karena nilai cocok, panggilan diotorisasi, dan antrean alur berlanjut.

Anda menghitung nilai X-WH-Checksum header, dalam pseudocode, sebagai SHA1(secret).ComputeHash(requestBody). Anda dapat menggunakan . System.Security.Cryptography.HMACSHA1 Kelas NET untuk tujuan ini.

Untuk mencegah kegagalan validasi karena baris atau spasi kosong baru, kami sarankan Anda mengirim isi dalam bentuk yang diminimalkan. Artinya, kirim

{"resource":{"message":{"title":"Hello, world!","subtitle":"I'm using WebHooks!"}}}

Melainkan

{
    "resource": {
        "message": {
            "title": "Hello, world!",
            "subtitle": "I'm using WebHooks!"
        }
    }
}

Meskipun dua objek JSON di atas mewakili objek yang sama, objek tersebut menghasilkan checksum SHA-1 yang berbeda. Ini karena SHA-1 dihitung pada representasi string mereka, yang berbeda.

Lihat juga