La definizione della versione di aggiornamento tramite l'API REST di Azure DevOps non riesce con la vecchia copia
Sto cercando di sfruttare l'API DevOps per aggiornare una nuova definizione di rilascio. Alla fine, aggiungerò un nuovo ambiente alla definizione del rilascio, ma per ora sto solo cercando di far funzionare il metodo di aggiornamento (PUT).
Ho fatto riferimento a questo post per informazioni.
Il codice seguente ottiene una definizione di rilascio esistente (id = 15), ignora la revisione, rimuove la proprietà lastRelease e quindi apporta una modifica alla descrizione solo per cambiare qualcosa.
function getreleasedefinitionrequest($definitionid, $org, $project) { $requestpath = "/_apis/release/definitions/" + $definitionid + "?api-version=6.0-preview.4" $tokeninfo = az account get-access-token | convertfrom-json
$token = $tokeninfo.accessToken
$uribase = "https://vsrm.dev.azure.com/" + $org + "/" + $project $uri = $uribase+$requestpath
$authheader = "Authorization=Bearer " + $token
$result = az rest --uri $uri --headers $authheader | convertfrom-json return $result
}
function putreleasedefinitionrequest($bodyfile, $org, $project) { $requestpath = "/_apis/release/definitions?api-version=6.0-preview.4"
$tokeninfo = az account get-access-token | convertfrom-json $token = $tokeninfo.accessToken $uribase = "https://vsrm.dev.azure.com/" + $org + "/" + $project
$uri = $uribase+$requestpath $authheader = "Authorization=Bearer " + $token $result = az rest --method put --uri $uri --headers "Content-Type=application/json" $authheader --body @$bodyfile | convertfrom-json return $result
}
$definition15 = getreleasedefinitionrequest "15" {org} {project} | select -Last 1 #bump the revision and delete the lastRelease property $rev = [int] $definition15.revision $rev++
$definition15.revision = $rev
$definition15.PSObject.properties.remove('lastRelease') $definition15.description = "make up a change to the description"
$bodyfile = ".\body.json" $body = $definition15 | convertto-json -Depth 100 | Set-Content -Path $bodyfile
#upate release definition
$putresult = putreleasedefinitionrequest $bodyfile {org} {project} | select -Last 1
L'az rest --method put genera un codice di errore che si lamenta del fatto che la versione è una vecchia copia. Ho estratto la richiesta dalla stessa versione dell'API e ho apportato le modifiche come descritto sopra. Quindi penso che questa nuova revisione sia una nuova versione della pipeline.
az: Bad Request ({"$ id": "1", "innerException": null, "message": "Stai usando una vecchia copia della pipeline di rilascio. Aggiorna la tua copia e riprova.", "typeName": "Microsoft.VisualStudio.Services.ReleaseManagement.Data.Exceptions.InvalidRequestException, Microsoft.VisualStudio.Services.ReleaseManagement2.Data", "typeKey": "InvalidRequestException", "errorCode": 0, "eventId": 3000})
Sono necessarie altre modifiche per eseguire correttamente l'aggiornamento?
Risposte
Rimuovere il $rev++
, non lo facciamo e non dovremmo modificare il valore di revision
manualmente.
Nota: se leggi attentamente il post, vedrai I set the revision number to be the number it is currently on and it works now
. Quindi in realtà non è necessario modificarlo, l'errore You are using an old copy of the release pipeline
risulta sempre dal cambio di revision
.