Compartilhar via


definição de resources.webhooks.webhook

Um recurso de webhook permite que você integre seu pipeline a um serviço externo para automatizar o fluxo de trabalho.

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.

Definições que fazem referência a essa definição: resources.webhooks

Propriedades

webhook cadeia de caracteres. Obrigatório como primeira propriedade.
Nome do webhook. Valores aceitáveis: [-_A-Za-z0-9]*. Para o webhook do Azure DevOps, webhook deve ser sempre um WebHook.

connection cadeia de caracteres. Obrigatório
Nome da conexão. No caso de webhook offline, esse será o tipo de Webhook de entrada, caso contrário, ele será o tipo da extensão de webhook.

type cadeia de caracteres.
Nome da extensão do webhook. Deixe isso vazio se for um webhook offline.

filters resources.webhooks.webhook.filters.
Lista de filtros de gatilho.

Exemplos

Exemplo básico

Você pode definir o pipeline da seguinte maneira.

resources:
  webhooks:
    - webhook: WebHook
      connection: IncomingWH

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

Para disparar o pipeline usando o webhook, você precisa fazer uma solicitação POST para https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<WebHook Name>?api-version=6.0-preview. O Nome do WebHook deve corresponder ao da Conexão de Serviço WebHook de entrada. Esse ponto de extremidade está disponível publicamente e nenhuma autorização é necessária. A solicitação deve ter o corpo a seguir.

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

Ao acessar dados do corpo da solicitação do webhook, lembre-se de que isso pode levar a YAML incorreto. Por exemplo, se no pipeline anterior, sua etapa ler - script: echo ${{ parameters.WebHook.resource.message }}e você disparar o pipeline por meio de um webhook, o pipeline não será executado. Isso ocorre porque, no processo de substituição ${{ parameters.WebHook.resource.message.title }}messagepor , que contém o JSON a seguir, o YAML gerado torna-se inválido.

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

Como o YAML gerado se torna inválido, nenhuma execução de pipeline é enfileirada em resposta.

Impedir execuções de pipeline não autorizadas

Os webhooks permitem que qualquer pessoa dispare seu pipeline, desde que eles saibam os nomes da sua organização e da conexão de serviço de webhook.

Você pode impedir que o pipeline não autorizado seja executado definindo um segredo ao criar uma conexão de serviço de Webhook de entrada. Você também precisa especificar o nome do cabeçalho HTTP que contém a soma de verificação SHA-1 do corpo do webhook.

Para verificar se uma chamada à API REST do webhook de entrada está autorizada, o Azure Pipelines calcula a soma de verificação SHA-1 do corpo da solicitação usando o segredo como chave. Em seguida, ele o compara à soma de verificação passada no cabeçalho da solicitação. Dessa forma, o chamador prova que sabe o segredo.

Vejamos um exemplo. Digamos que você configurou uma conexão de serviço de Webhook de entrada chamada IncomingWH, especificou o segredo secrete que a soma de verificação é enviada no cabeçalho HTTP chamado X-WH-Checksum. Imagine que você tenha um pipeline que defina um recurso do Webhook.

Digamos que você queira disparar o pipeline usando o seguinte corpo da solicitação:

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

Para fazer isso, você precisa fazer uma solicitação POSThttps://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview e adicionar o X-WH-Checksum cabeçalho com o valor de 750D33212D3AD4932CC390819050734831A0A94F. Você não precisa especificar nenhum nome de usuário e senha ou qualquer outro tipo de informação de autenticação.

O Azure Pipelines calculará independentemente a soma de verificação SHA-1 do corpo usando secret como chave e gerará o mesmo 750D33212D3AD4932CC390819050734831A0A94F valor. Como os valores correspondem, a chamada é autorizada e a fila de pipeline continua.

Você calcula o valor do X-WH-Checksum cabeçalho, em pseudocódigo, como SHA1(secret).ComputeHash(requestBody). Você pode usar . Classe do System.Security.Cryptography.HMACSHA1 NET para essa finalidade.

Para evitar falhas de validação devido a novas linhas ou espaços em branco, recomendamos que você envie o corpo de forma minimizada. Ou seja, enviar

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

Em vez de

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

Embora os dois objetos JSON acima representem o mesmo objeto, eles geram somas de verificação SHA-1 diferentes. Isso ocorre porque SHA-1 é computado em sua representação de cadeia de caracteres, o que é diferente.

Consulte também