Utilizà variabili in i pipeline Azure DevOps

Cuntinuemu a nostra rivista di una maravigliosa strumentu per u sviluppu per Windows è più, Azure DevOps. Questa volta, avè patitu assai cù variabili di l'ambienti, decisu di mette tutta l'esperienza in un articulu.

Partendu da u fattu chì anu una sintassi differente per ogni ambiente di esecutivu, finiscinu cù a mancanza di una capacità standard per trasfiriri variabili da una tappa di u pipeline à l'altru.

Fararaghju una riservazione chì l'esempii principali seranu nantu à Release Pipelines, perchè YAML ùn hè micca ghjuntu ancu, è aghju bisognu di a funziunalità di parechje tappe è parechji artefatti. Questu, pare, hè diventatu dispunibile in Pipelines regularmente, chì praticamenti uguali in funziunalità. In Pipelines YAML, avemu aghjustatu un picculu tooltip graficu à a rapprisintazioni di testu cù paràmetri chì ponu esse stabiliti. Hè assai còmuda; ùn avete micca bisognu di passà a documentazione per ogni modulu. Ma descriveraghju questu in u prossimu articulu, ma per avà quì hè una stampa di l'innuvazione stessu.

Utilizà variabili in i pipeline Azure DevOps

U almacenamentu è l'usu

Cuminciamu cù u fattu chì avemu variabili predeterminati in u sistema. Cumincianu, sicondu a so origine, cù e parolle Release, System, etc. A lista completa (cum'è risulta, micca), hè dispunibule à ducumentazione. Tutte e schizofrenia cù sintassi hè illustrata da un esempiu da a documentazione sottu. A listessa variàbile hà trè rapprisintazioni, secondu induve a chjamemu.

steps:
 - bash: echo This script could use $SYSTEM_ACCESSTOKEN
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  - powershell: Write-Host "This is a script that could use $env:SYSTEM_ACCESSTOKEN"
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)

Se stabilisce una variabile nantu à l'agente nantu à quale u compitu hè eseguitu, hè $ (System.AccessToken). Se vulete usà in un script powershell nantu à u listessu agente, serà digià $env:SYSTEM_ACCESSTOKEN. Sè vo, Diu ùn ci vole, vulete usà sta variabile nantu à un òspite remotu utilizendu u PowerShell nantu à e macchine di destinazione, avete bisognu di passà questu per un argumentu à u script usendu i mo soldi. Cù bash hè più simplice, pudete semplicemente passà in l'internu usendu l'argumentu è a sintassi $SYSTEM_ACCESSTOKEN.

E stesse liggi ùn s'applicanu micca à e vostre variabili; quì site digià rispunsevuli di a sintassi. E variabili ponu esse stabilite in u locu in ogni attività.

Utilizà variabili in i pipeline Azure DevOps

O in u mondu à a tenda variabile, è poi liate da a tenda. Assai cunfortu.

Utilizà variabili in i pipeline Azure DevOps

Comu bonus, se i variàbili sò assai sicreti, ponu esse guardati in u nuvulu Azure in un almacenamentu chjamatu Azure Vault; pudete ligà Vault à u prugettu in a Biblioteca.

Utilizà variabili in i pipeline Azure DevOps

In generale, tuttu hè chjaru cù variabili; in i pipelines ponu sempre esse stallati manualmente per ogni lanciamentu; in liberazione ùn ci hè micca una tale funziunalità. Pudete vede ciò chì vi sò trasfiriri à u pipeline di novu in i logs d'inizializazione di l'agente, ma tenite in mente chì sò digià in forma cunvertita.

Utilizà variabili in i pipeline Azure DevOps

Variabili dinamichi

U divertimentu principia quandu vulemu riceve qualchì valore in una tappa è passà à u prossimu.

Utilizà variabili in i pipeline Azure DevOps

Ùn avemu micca furnitu tali funziunalità. Ma e nostre mani ùn sò micca per noia è cù l'aiutu di Google una suluzione hè stata trovata. Grazie à Diu, Azure DevOps hà una API chì ci permette di fà un pocu più di ciò chì era raffiguratu in l'interfaccia.

Dunque, avemu bisognu di una chjamata per aghjurnà e variabili glubale, chì faremu direttamente da u pipeline. L'indirizzu hè pigliatu da variabili di l'ambienti, i stessi chì ùn ci hè micca una parolla nantu à a ducumentazione, cum'è dettu prima. Pudete stabilisce elli stessu o, in più, codificalli si chjude a buttrega.

$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID)  )

Fixemu u valore viotu di a variàbile chì vulemu trasfiriri, stabilisce Scope - Release

Utilizà variabili in i pipeline Azure DevOps

Per esempiu, facemu qualchì generatore di valore aleatoriu. Prestate attenzione à a sintassi di dichjarà una variabile in questa tappa; sta funziunalità hè statu introduttu.

Utilizà variabili in i pipeline Azure DevOps

In u prossimu passu, passemu a variàbile à u script, sì, sì, ùn hè micca pussibule direttamente, deve esse attraversu un argumentu.

Utilizà variabili in i pipeline Azure DevOps

Scrittura sottu spoiler

PowerShell

#Script requires stageVar variable in release variables set to Release scope

param ( [string] $expVar )
#region variables
$ReleaseVariableName = 'StageVar'
$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID)  )
#endregion


#region Get Release Definition
Write-Host "URL: $releaseurl"
$Release = Invoke-RestMethod -Uri $releaseurl -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
#endregion

#region Output current Release Pipeline
Write-Output ('Release Pipeline variables output: {0}' -f $($Release.variables | ConvertTo-Json -Depth 10))
#endregion


#region Update StageVar with new value
$release.variables.($ReleaseVariableName).value = "$expVar"
#endregion

#region update release pipeline
Write-Output ('Updating Release Definition')
$json = @($release) | ConvertTo-Json -Depth 99
Invoke-RestMethod -Uri $releaseurl -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
#endregion

#region Get updated Release Definition
Write-Output ('Get updated Release Definition')
Write-Host "URL: $releaseurl"
$Release = Invoke-RestMethod -Uri $releaseurl -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
#endregion

#region Output Updated Release Pipeline
Write-Output ('Updated Release Pipeline variables output: {0}' -f $($Release.variables | ConvertTo-Json -Depth 10))
#endregion

Or

Bash

INPUT_VAR=$1
RELEASE_VAR=$2

echo Test ID: ${INPUT_VAR}

RELEASE_URL="${SYSTEM_TEAMFOUNDATIONSERVERURI}${SYSTEM_TEAMPROJECTID}/_apis/release/releases/${RELEASE_RELEASEID}?api-version=5.0"

echo release url: $RELEASE_URL

RELEASE_JSON=$(curl -H "Authorization: Bearer $SYSTEM_ACCESSTOKEN" $RELEASE_URL)

OUTPUT=`jq ''.variables.${RELEASE_VAR}.value' = '"${INPUT_VAR}"'' <<< $RELEASE_JSON`

curl -H "Authorization: Bearer $SYSTEM_ACCESSTOKEN" -H "Content-Type: application/json" -X PUT -d "$OUTPUT" $RELEASE_URL

In poche parole, u nostru script piglia a variabile myVar cum'è input è usa l'API per mette u valore di sta variabile in stageVar. In u prossimu passu, utilizendu a sintassi di variabile di u sistema, pudemu vede.

Utilizà variabili in i pipeline Azure DevOps

L'esempiu hè abbastanza simplice, ma a funziunalità apre boni opportunità per noi, in più di u mo precedente articulu, Quandu pudemu creà una macchina virtuale in a prima tappa di a prova, eseguisce alcune manipulazioni più cun ellu, è parechji in parallelu. È a tappa finale hè di distrughjillu. Avà eseguimu autotest di u pruduttu ogni volta nantu à e macchine virtuali fresche. Cunsiderendu chì campanu per circa 10 minuti, custa un centesimu.

In u prossimu articulu, se ne necessariu, parleraghju di i pipelines YAML; ci sò state assai innovazioni interessanti in l'ultimi tempi.

Source: www.habr.com

Add a comment