Azure DevOps, come una qualsiasi applicazione web moderna e scalabile, è un enorme sistema basato ad eventi. Infatti, è possibile registrarsi per ricevere notifiche su eventi specifici, come ad esempio quando viene eseguita o completata una build, quando viene creato o completato un work item, piuttosto che eseguito un push su un repository Git. Queste notifiche possono essere inviate ad uno dei tanti servizi previsti di default da Azure DevOps, come Trello, Slack, Teams, Office365, oppure ad un URL specificato, che può essere utilizzato per attivare azioni in sistemi di terze parti (per esempio un internal developer portal).
Per configurare automaticamente un webhook, dobbiamo avere a disposizione l'indirizzo alla quale l'evento verrà inviato e le informazioni di base sul progetto e repository che vogliamo tracciare:
CONSUMER_URL="https://my-website.com/webhook" PROJECT_ID=$(az devops project show --project "<project>" --organization "<organization>" --query "id" -o tsv || true) REPOSITORY_ID=$(az repos show --repository "<repository>" --project "<project>" --organization "<organization>" --query "id" -o tsv || true)
A questo punto assicuriamoci che non sia già registrato un altro webhook sullo stesso repository e URL, altrimenti in Azure DevOps verrà registrato doppio (e di conseguenza anche le nodifiche arriveranno più volte):
URL="https://dev.azure.com/<organization>/_apis/hooks/subscriptions?api-version=7.1&eventType=git.push&consumerId=webHooks&consumerActionId=httpRequest&publisherId=tfs" SERVICE_HOOK_ID=$(curl -u ":<pat-token>" "$URL" -H "Content-Type: application/json" | jq --arg PROJECT "$PROJECT_ID" --arg REPO "$REPOSITORY_ID" --arg URL "$CONSUMER_URL" -r '.value[] | select(.publisherInputs.projectId == $PROJECT and .publisherInputs.repository == $REPO and .consumerInputs.url == $URL) | .id' || true)
Adesso è solo questione di valutare con uno statement condizionale se il webhook è già stato configurato oppure no. Se il valore di SERVICE_HOOK_ID non è una stringa vuota, possiamo eseguire diverse azioni come eliminare il webhook (per poi ricrearlo), oppure modificare l'URL dell'endpoint che riceverà le notiche o altro, in base alle nostre esigenze. Altrimenti, possiamo sicuramente creare il webhook.
cat <<-EOF > body.json
{
"publisherId": "tfs",
"eventType": "git.push",
"resourceVersion": "1.0",
"consumerId": "webHooks",
"consumerActionId": "httpRequest",
"publisherInputs": {
"projectId": "$PROJECT_ID",
"repository": "$REPOSITORY_ID",
"branch": ""
},
"consumerInputs": {
"url": "$CONSUMER_URL",
"resourceDetailsToSend": "all",
"messagesToSend": "all"
}
}
EOF
curl -u ":<pat-token>" -s -X POST "$URL" -H "Content-Type: application/json" -d @body.json | jqBuona parte della configurazione è standard per registrare questo genere di evento, invece l'altro dipende appunto dall'endpoint che riceverà le notifiche e dal project/repository di riferimento. Possiamo aggiungere, eventualmente, la specifica sul branch che verrà monitorato, altrimenti avremo informazioni su qualsiasi change che viene fatta all'interno del repository stesso.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare le regular expression in SQL Server 2025: la funzione REGEXP_LIKE
Eseguire i pre-commit hook di git con dependabot
Gestione dei codeowners in GitHub
Modificare lo stile in una QuickGrid Blazor
Come automatizzare il download dei report di billing da GitHub Enterprise
Evitare la compressione degli artefatti in un workflow di GitHub
Migrare applicazioni legacy nel cloud con Azure App Service Managed Instance
Gestione dei prompt file a livello di organizzazione aziendale in GitHub
Utilizzo delle stepped value functions nel CSS
Enterprise Live Migrations - Migrare da Azure DevOps a GitHub
Creare una UI per i tool MCP con resource e Azure Functions
Ciclo di vita risorse con .NET Aspire
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Utilizzare un DataContext specifico per la modalità design time di Blend e Visual Studio nei controlli Silverlight
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0
- Esaminare documenti con namespace con LINQ e XDocument
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE


