Continuando sul tema work item introdotto negli script precedenti, vediamo ora un altro scenario interessante, ovvero la possibilità di taggare automaticamente dei membri del team. Questo può risultare molto importante per tenere traccia dei progressi su attività ricorrenti, per impostare dei reminder, per avere auto-responder in caso di out of office o situazioni simili.
Per poter taggare una persona, abbiamo però bisogno di conoscere la sua identità all'interno di Azure DevOps. Questa operazione può essere fatta nuovamente tramite le API REST chiamando l'endpoint di identity:
$identity = "my.email@domain.com" $url = "https://vssps.dev.azure.com/$(Organization)/_apis/identities?searchFilter=General&filterValue=$identity&queryMembership=None&api-version=6.0" Invoke-RestMethod $url -Method GET -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN);}
L'oggetto che otteremo in risposta, corrispondente all'indirizzo mail (o altri parametri tipo DisplayName, per esempio), se trovato, sarà formato all'incirca in questo modo:
{ "count": 1, "value": [ { "id": "00000000-0000-0000-0000-000000000000", "descriptor": "Microsoft.IdentityModel.Claims.ClaimsIdentity;xxx\\my.fake@domain.com", "subjectDescriptor": "aad.xxxx", "providerDisplayName": "Matteo Tumiati", "isActive": true, "members": [], "memberOf": [], "memberIds": [], "properties": { "Description": { }, "Domain": { }, "Account": { }, "Mail": { }, "DirectoryAlias": { } }, "resourceVersion": 2, "metaTypeId": 0 } ] }
Ovviamente le property sono state volutamente semplificate ed oscurate per concentrarci sui valori fondamentali a cui siamo interessati. Fra questi, possiamo assicurarci che l'utente trovato sia quello ricercato tramite la sua mail, il suo display name, piuttosto che tramite l'alias di dominio. Una volta confermato l'utente, ci salviamo il GUID rappresentante il suo ID.
Questo GUID, infatti, deve essere passato in input come messaggio del testo da inviare come commento al work item (o alla sua description, piuttosto che ai repro steps di un bug):
$message = "<a href='#' data-vss-mention='version:2.0,00000000-0000-0000-0000-000000000000'>Matteo Tumiati</a> questo è un messaggio per te"
Poiché il contenuto di un campo di testo per un work item è solitamente HTML (con un po' di margine per markdown), possiamo taggare una persona facendo riferimento all'HTML standard per fare link di contenuti. Creato il messaggio, non ci resta che postarlo. In questo caso, procediamo tramite l'apposita REST API per inviare un commento sul work item desiderato:
$url = "https://dev.azure.com/$(Organization)/$(Project)/_apis/wit/workItems/$workItemId/comments?api-version=6.0-preview.3" $body = @( @{ text = "$message" } ) $data = ConvertTo-Json $body Invoke-RestMethod $url -Method POST -Body $data -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN);} -ContentType "application/json"
Il risultato finale sarà simile al seguente:
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire i worklow di GitHub su runner potenziati
Generare token per autenicarsi sulle API di GitHub
Triggerare una pipeline su un altro repository di Azure DevOps
Code scanning e advanced security con Azure DevOps
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Creare una libreria CSS universale: i bottoni
Usare una container image come runner di GitHub Actions
Implementare l'infinite scroll con QuickGrid in Blazor Server
Sostituire la GitHub Action di login su private registry
Paginare i risultati con QuickGrid in Blazor
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Utilizzare un service principal per accedere a Azure Container Registry