Condividi tramite


definizione resources.webhooks.webhook

Una risorsa webhook consente di integrare la pipeline con un servizio esterno per automatizzare il flusso di lavoro.

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.

Definizioni che fanno riferimento a questa definizione: resources.webhooks

Proprietà

webhook stringa. Obbligatorio come prima proprietà.
Nome del webhook. Valori accettabili: [-_A-Za-z0-9]*. Per il webhook di Azure DevOps, webhook deve essere sempre .WebHook

connection stringa. Obbligatorio.
Nome della connessione. In caso di webhook offline, questo sarà il tipo di webhook in ingresso; in caso contrario, sarà il tipo dell'estensione webhook.

type stringa.
Nome dell'estensione webhook. Lasciare vuoto questo valore se si tratta di un webhook offline.

filters resources.webhooks.webhook.filters.
Elenco di filtri trigger.

Esempi

Esempio di base

È possibile definire la pipeline come indicato di seguito.

resources:
  webhooks:
    - webhook: WebHook
      connection: IncomingWH

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

Per attivare la pipeline usando il webhook, è necessario effettuare una POST richiesta a https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<WebHook Name>?api-version=6.0-preview. Il nome del webhook deve corrispondere a quello della connessione al servizio Webhook in ingresso. Questo endpoint è disponibile pubblicamente e non è necessaria alcuna autorizzazione. La richiesta deve avere il corpo seguente.

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

Quando si accede ai dati dal corpo della richiesta del webhook, tenere presente che potrebbe causare un YAML errato. Ad esempio, se nella pipeline precedente il passaggio legge - script: echo ${{ parameters.WebHook.resource.message }}e si attiva la pipeline tramite un webhook, la pipeline non viene eseguita. Ciò è dovuto al fatto che nel processo di sostituzione ${{ parameters.WebHook.resource.message.title }} con message, che contiene il codice JSON seguente, il file YAML generato non è valido.

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

Poiché il codice YAML generato non è valido, non viene accodata alcuna esecuzione della pipeline in risposta.

Impedire esecuzioni di pipeline non autorizzate

I webhook consentono a chiunque di attivare la pipeline, purché conoscano i nomi dell'organizzazione e della connessione al servizio webhook.

È possibile impedire esecuzioni di pipeline non autorizzate definendo un segreto durante la creazione di una connessione al servizio Webhook in ingresso. È anche necessario specificare il nome dell'intestazione HTTP che contiene il checksum SHA-1 del corpo del webhook.

Per verificare che una chiamata API REST webhook in ingresso sia autorizzata, Azure Pipelines calcola il checksum SHA-1 del corpo della richiesta usando il segreto come chiave. Viene quindi confrontato con il checksum passato nell'intestazione della richiesta. In questo modo, il chiamante dimostra di conoscere il segreto.

Di seguito è descritto un esempio. Si supponga di aver configurato una connessione al servizio Webhook in ingresso denominata IncomingWH, specificato che il segreto è secrete che il checksum venga inviato nell'intestazione HTTP denominata X-WH-Checksum. Si supponga di avere una pipeline che definisce una risorsa webhook.

Si supponga di voler attivare la pipeline usando il corpo della richiesta seguente:

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

A tale scopo, è necessario effettuare una POST richiesta a https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview e aggiungere l'intestazione X-WH-Checksum con il valore di 750D33212D3AD4932CC390819050734831A0A94F. Non è necessario specificare alcun nome utente e password o qualsiasi altro tipo di informazioni di autenticazione.

Azure Pipelines calcola in modo indipendente il checksum SHA-1 del corpo usando secret come chiave e genera lo stesso 750D33212D3AD4932CC390819050734831A0A94F valore. Poiché i valori corrispondono, la chiamata è autorizzata e la coda della pipeline procede.

Il valore dell'intestazione X-WH-Checksum , in pseudocodice, viene calcolato come SHA1(secret).ComputeHash(requestBody). È possibile usare . Classe di System.Security.Cryptography.HMACSHA1 NET a questo scopo.

Per evitare errori di convalida dovuti a nuove righe o spazi vuoti, è consigliabile inviare il corpo in un formato ridotto a icona. Vale a dire, inviare

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

Invece di

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

Anche se i due oggetti JSON precedenti rappresentano lo stesso oggetto, generano checksum SHA-1 diversi. Ciò è dovuto al fatto che SHA-1 viene calcolato sulla relativa rappresentazione di stringa, che è diversa.

Vedere anche