# 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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Paginare i risultati con QuickGrid in Blazor
Ottenere un token di accesso per una GitHub App
Loggare le query più lente con Entity Framework
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Gestione degli eventi nei Web component HTML
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Triggerare una pipeline su un altro repository di Azure DevOps
Eseguire i worklow di GitHub su runner potenziati
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Estrarre dati randomici da una lista di oggetti in C#
Ottimizzazione dei block template in Angular 17