Creare un webhook in Azure DevOps

di Matteo Tumiati, in DevOps,

# Scrivi una introduzione di una riga su cosa siano i webhook e perché sono utili
I webhook sono un meccanismo piuttosto noto e comune ormai per inviare notifiche automatiche a un URL specifico quando si verifica un evento specifico. Sono utili per integrare sistemi e automatizzare processi esterni. Ad esempio, può essere comodo farci inviare una notifica ogni qualvolta che una build si è completata con successo o che un commit è stato effettuato su un repository Git, così che possiamo essere informati in tempo reale.

Per configurarlo, è necessario creare un webhook nel servizio che vuole inviare le notifiche e specificare l'URL del servizio che riceverà le notifiche. In questo caso, utilizzeremo Azure DevOps per inviare una notifica a un servizio esterno quando un commit viene effettuato su un repository Git. Poiché in Azure DevOps è probabile che avremo più progetti e più repository su cui abilitare i webhook, vediamo come farlo sfruttando la CLI e le API.

Per prima cosa dobbiamo recuperare le informazioni riguardo l'id del progetto e del repository nel quale vogliamo abilitare i webhook, oltre che l'endpoint alla quale inviare le notifiche. Se ne abbiamo più di uno, allora ci basterà eseguire gli stessi passaggi all'interno di un loop.

$projectId = az devops project show --project <project-name> --query "id" --output tsv
$repositoryId = az repos list --project <project-name> --query "[?name=='<repository-name>'].id" --output tsv
$url = "<tbd>"

Una volta ottenuti i valori di projectId e repositoryId, possiamo creare il payload JSON per il webhook-

$json = @"
{
  "consumerActionId": "httpRequest",
  "consumerId": "webHooks",
  "consumerInputs": {
    "url": "$url"
  },
  "eventType": "git.push",
  "publisherId": "tfs",
  "publisherInputs": {
    "repository": "$repositoryId",
    "branch": "main",
    "pushedBy": "",
    "projectId": "$projectId"
  },
  "resourceVersion": "1.0",
  "scope": 1
}
"@

Infine, possiamo inviare la richiesta all'API di Azure DevOps per creare il webhook.

$url = "https://dev.azure.com/<organization>/_apis/hooks/subscriptions?api-version=7.1"
$token = "<your-personal-access-token>"
$authHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($token)")) }

# Send the request to the Azure DevOps API
Invoke-RestMethod -Uri $url -Method Post -Headers $authHeader -Body $json -ContentType "application/json"

Se è tutto andato a buon fine, possiamo entrare nel portale di Azure DevOps ed eseguire un primo test di connessione per verificare che il webhook sia stato configurato correttamente. Se tutto è andato a buon fine, dovremmo ricevere una notifica nel servizio esterno che abbiamo configurato. A questo punto, quindi, per ogni commit fatto nel branch main, verrà inviata la notifica automaticamente al nostro sistema.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi