resources.webhooks.webhook definition
Um recurso de webhook permite-lhe integrar o pipeline num 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 referenciam esta definição: resources.webhooks
Propriedades
webhook
cadeia. Necessário como primeira propriedade.
Nome do webhook. Valores aceitáveis: [-_A-Za-z0-9]*.
connection
cadeia. Obrigatório.
Nome da ligação. No caso do webhook offline, este será o tipo de Webhook de Entrada, caso contrário, será o tipo de extensão do webhook.
type
cadeia.
Nome da extensão do webhook. Deixe isto vazio se for um webhook offline.
filters
resources.webhooks.webhook.filters.
Lista de filtros de acionador.
Exemplos
Exemplo básico
Pode definir o pipeline da seguinte forma.
resources:
webhooks:
- webhook: WebHook
connection: IncomingWH
steps:
- script: echo ${{ parameters.WebHook.resource.message.title }}
Para acionar o pipeline com o webhook, tem de fazer um POST
pedido para https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<webhook_connection_name>?api-version=6.0-preview
. Este ponto final está disponível publicamente e não é necessária autorização. O pedido deve ter o seguinte corpo.
{
"resource": {
"message": {
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
}
}
Quando aceder aos dados a partir do corpo do pedido do webhook, tenha em atenção que pode levar a YAML incorreto. Por exemplo, se no pipeline anterior, o seu passo ler - script: echo ${{ parameters.WebHook.resource.message }}
e acionar o pipeline através de um webhook, o pipeline não é executado. Isto acontece porque, no processo de substituição ${{ parameters.WebHook.resource.message.title }}
por message
, que contém o seguinte JSON, o YAML gerado torna-se inválido.
{
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
Uma vez que o YAML gerado se torna inválido, nenhuma execução de pipeline é em fila de espera em resposta.
Impedir execuções de pipelines não autorizados
Os webhooks permitem que qualquer pessoa acione o seu pipeline, desde que conheça os nomes da sua organização e da ligação do serviço webhook.
Pode impedir execuções de pipelines não autorizados ao definir um segredo ao criar uma ligação de serviço Webhook de Entrada. Também tem de 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 de webhook de entrada está autorizada, o Azure Pipelines calcula a soma de verificação SHA-1 do corpo do pedido com o segredo como chave. Em seguida, compara-a com a soma de verificação transmitida no cabeçalho do pedido. Desta forma, o chamador prova que sabe o segredo.
Vejamos um exemplo. Digamos que configurou uma ligação de serviço de Webhook recebido com o nome IncomingWH
, especificou que o segredo é secret
, e que a soma de verificação é enviada no cabeçalho HTTP com o nome X-WH-Checksum
. Imagine que tem um pipeline que define um recurso do Webhook.
Digamos que pretende acionar o pipeline com o seguinte corpo do pedido:
{"resource":{"message":{"title":"Hello, world!","subtitle":"I'm using WebHooks!"}}}
Para tal, tem de fazer um POST
pedido e https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview
adicionar o X-WH-Checksum
cabeçalho com o valor de 750D33212D3AD4932CC390819050734831A0A94F
. Não precisa de especificar qualquer nome de utilizador & palavra-passe ou qualquer outro tipo de informação de autenticação.
Os Pipelines do Azure calcularão de forma independente a soma de verificação SHA-1 do corpo utilizando secret
como chave e gerarão o mesmo 750D33212D3AD4932CC390819050734831A0A94F
valor. Uma vez que os valores correspondem, a chamada é autorizada e a fila de pipelines continua.
Calcula o valor do X-WH-Checksum
cabeçalho, no pseudocódigo, como SHA1(secret).ComputeHash(requestBody)
. Pode utilizar . A classe net System.Security.Cryptography.HMACSHA1
para este fim.
Para evitar falhas de validação devido a novas linhas ou espaços em branco, recomendamos que 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, geram somas de verificação SHA-1 diferentes. Isto deve-se ao facto de SHA-1 ser calculado na representação da cadeia de carateres, o que é diferente.