Sdílet prostřednictvím


definice resources.webhooks.webhook

Prostředek webhooku umožňuje integrovat kanál s externí službou a automatizovat tak pracovní postup.

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.

Definice, které odkazují na tuto definici: resources.webhooks

Vlastnosti

webhook Řetězec. Požadováno jako první vlastnost.
Název webhooku Přijatelné hodnoty: [-_A-Za-z0-9]*.

connection Řetězec. Povinná hodnota.
Název připojení. V případě offline webhooku se jedná o typ příchozího webhooku, jinak se jedná o typ rozšíření webhooku.

type Řetězec.
Název rozšíření webhooku Pokud se jedná o offline webhook, nechte toto pole prázdné.

filtersresources.webhooks.webhook.filters.
Seznam filtrů triggerů

Příklady

Základní příklad

Kanál můžete definovat následujícím způsobem.

resources:
  webhooks:
    - webhook: WebHook
      connection: IncomingWH

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

Pokud chcete aktivovat kanál pomocí webhooku, musíte vytvořit POST žádost na https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<webhook_connection_name>?api-version=6.0-previewadresu . Tento koncový bod je veřejně dostupný a nevyžaduje se žádná autorizace. Požadavek by měl mít následující text.

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

Při přístupu k datům z textu požadavku webhooku mějte na paměti, že to může vést k nesprávnému kódu YAML. Pokud například v předchozím kanálu bude váš krok číst - script: echo ${{ parameters.WebHook.resource.message }}a kanál aktivujete prostřednictvím webhooku, kanál se nespustí. Je to proto, že v procesu nahrazení ${{ parameters.WebHook.resource.message.title }}messageza , který obsahuje následující JSON, se vygenerovaný YAML stane neplatným.

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

Vzhledem k tomu, že se vygenerovaný soubor YAML stane neplatným, není v odpovědi zařazeno do fronty žádné spuštění kanálu.

Zabránění neoprávněným spuštěním kanálu

Webhooky umožňují, aby váš kanál aktivovali všichni, pokud znají názvy vaší organizace a připojení služby webhooku.

Neoprávněným spuštěním kanálu můžete zabránit definováním tajného kódu při vytváření připojení služby příchozího webhooku. Musíte také zadat název hlavičky HTTP, která obsahuje kontrolní součet SHA-1 těla webhooku.

K ověření autorizace příchozího volání rozhraní REST API webhooku azure Pipelines vypočítá kontrolní součet SHA-1 těla požadavku pomocí tajného klíče jako klíče. Pak ho porovná s kontrolním součtem předaný v hlavičce požadavku. Tímto způsobem volající prokáže, že zná tajemství.

Podívejme se na příklad. Řekněme, že jste nakonfigurovali připojení služby příchozích webhooků s názvem IncomingWH, zadali jste tajný klíč secreta kontrolní součet se odešle v hlavičce PROTOKOLU HTTP s názvem X-WH-Checksum. Představte si, že máte kanál, který definuje prostředek webhooku.

Řekněme, že chcete aktivovat kanál pomocí následujícího textu požadavku:

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

K tomu je potřeba vytvořit POST požadavek na https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview adresu a přidat hlavičku X-WH-Checksum s hodnotou 750D33212D3AD4932CC390819050734831A0A94F. Nemusíte zadávat žádné uživatelské jméno & heslo ani jiný typ ověřovacích informací.

Azure Pipelines nezávisle vypočítá kontrolní součet SHA-1 těla pomocí příkazu secret jako klíč a vygeneruje stejnou 750D33212D3AD4932CC390819050734831A0A94F hodnotu. Vzhledem k tomu, že se hodnoty shodují, je volání autorizováno a kanál se zasadí do fronty.

Hodnotu hlavičky v pseudokódu X-WH-Checksum vypočítáte jako SHA1(secret).ComputeHash(requestBody). Můžete použít . System.Security.Cryptography.HMACSHA1 NET pro tento účel.

Pokud chcete zabránit selhání ověřování kvůli novým řádkům nebo prázdným znakům, doporučujeme odeslat text v minimalizované podobě. To znamená odeslat

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

Namísto

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

I když dva výše uvedené objekty JSON představují stejný objekt, generují různé kontrolní součty SHA-1. Důvodem je to, že SHA-1 se počítá na základě řetězcové reprezentace, která se liší.

Viz také