Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps

di Matteo Tumiati, in DevOps,

Scrivere le note di rilascio è sempre problematico per diversi motivi: se è una persona a doverle calcolare, questa potrebbe dimenticarsi determinate change, se, al contrario, è un sistema automatico, questo potrebbe essere troppo preciso. Come sempre, serve un mix giusto di entrambe le cose, ovvero un sistema automatico che è in grado di estrapolare le informazioni necessarie al recupero delle note di rilascio ed una review manuale per essere sicuri di rendere comprensibili tutti i valori calcolati dal sistema a persone "di business". All'interno di questa mini-serie di script vedremo come realizzare questo sistema.

Diamo per scontato che useremo i tag per determinare le versioni rilasciate. Il primo passaggio che dobbiamo fare è quello di recuperare, quindi, la data di creazione di un tag per capire quando è stata fatta una certa release di prodotto.
Per farlo, ci è sufficiente chiamare le REST API di Azure DevOps tramite uno script di PowerShell integrato in una pipeline YAML, per recuperare tutta la lista di tag disponibili:

$url = "https://dev.azure.com/$(OrganizationName)/$(TeamProject)/_apis/git/repositories/$(Repository)/refs?filter=tags&api-version=6.0-preview.1"
$tags = Invoke-RestMethod $url -Method GET -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN)}

Successivamente possiamo quindi filtrare tutti i tag forniti da Azure DevOps per cercare quello relativo al rilascio in corso:

$tag = $tags.value | Where-Object { $_.name -eq "1.0.0" }

Ed infine, grazie all'identificativo del tag corrispondente alla release, recuperare le annotation:

$url = "https://dev.azure.com/$(OrganizationName)/$(TeamProject)/_apis/git/repositories/$(Repository)/annotatedtags/$($tag.objectId)/?api-version=6.0-preview.1"
$annotatedTag = Invoke-RestMethod $url -Method GET -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN)}

L'oggetto ritornato sarà un JSON con un payload simile al seguente:

{
  "name": "refs/tags/1.0.0",
  "objectId": "69080710948ac8ba63e44eca2daf0b30f38c428d",
  "taggedObject": {
    "objectId": "c60be62ebf0e86b5aa01dbb98657b4b7e5905234",
    "objectType": "commit"
  },
  "taggedBy": {
    "name": "Matteo Tumiati",
    "email": "matteot@aspitalia.com",
    "date": "2021-02-04T09:00:00"
  },
  "message": "First release",
  "url": "https://dev.azure.com/fabrikam/c34d5807-1734-4541-ad1c-d16e9ac1faca/_apis/git/repositories/ca93c3a5-87bb-4b5b-a62f-1f971d677c79/annotatedTags/69080710948ac8ba63e44eca2daf0b30f38c428d"
}

La data di creazione sarà quindi facilmente recuperabile tramite la sua property date:

return $tag.taggedBy.date

Nei prossimi script continueremo ad approfondire l'argomento e vedremo meglio a quale scopo servono questi tag.

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