Përdorimi i variablave në tubacionet Azure DevOps

Ne vazhdojmë rishikimin tonë të një mjeti të mrekullueshëm për zhvillim për Windows dhe më shumë, Azure DevOps. Këtë herë, pasi kam vuajtur shumë me variablat e mjedisit, vendosa ta vendos të gjithë përvojën në një artikull.

Duke u nisur nga fakti se ato kanë sintaksë të ndryshme për çdo mjedis ekzekutimi, duke përfunduar me mungesën e një aftësie standarde për të transferuar variabla nga një fazë e tubacionit në tjetrin.

Do të bëj një rezervë që shembujt kryesorë do të jenë në Release Pipelines, sepse YAML nuk ka arritur ende atje, dhe kam nevojë për funksionalitetin e shumë fazave dhe shumë objekteve. Kjo, me sa duket, është bërë e disponueshme në tubacionet e rregullta, gjë që praktikisht i barazon ato në funksionalitet. Në Pipelines YAML, ne shtuam një këshillë të vogël grafike në paraqitjen e tekstit me parametra që mund të vendosen. Është shumë i përshtatshëm; nuk duhet të kaloni dokumentacionin për secilin modul. Por unë do ta përshkruaj këtë në artikullin tjetër, por tani për tani këtu është një fotografi e vetë inovacionit.

Përdorimi i variablave në tubacionet Azure DevOps

Ruajtja dhe përdorimi

Le të fillojmë me faktin se ne kemi variabla të paracaktuar në sistem. Ato fillojnë, në varësi të origjinës së tyre, me fjalët Release, System, etj. Lista e plotë (siç rezulton, jo), është në dispozicion në dokumentacionin. E gjithë skizofrenia me sintaksë ilustrohet me një shembull nga dokumentacioni më poshtë. E njëjta variabël ka tre paraqitje, në varësi të vendit ku e quajmë.

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)

Nëse vendosni një ndryshore në agjentin në të cilin ekzekutohet detyra, ajo është $(System.AccessToken). Nëse dëshironi ta përdorni brenda një skripti powershell në të njëjtin agjent, ai tashmë do të jetë $env:SYSTEM_ACCESSTOKEN. Nëse, Zoti na ruajt, dëshironi ta përdorni këtë variabël në ndonjë host të largët duke përdorur detyrën PowerShell në makineritë e synuara, duhet ta kaloni këtë përmes një argumenti në skript duke përdorur paratë e mia. Me bash është më e thjeshtë, thjesht mund ta kaloni brenda duke përdorur argumentin dhe sintaksën $SYSTEM_ACCESSTOKEN.

Të njëjtat ligje nuk vlejnë për variablat tuaja; këtu ju jeni tashmë përgjegjës për sintaksën. Variablat mund të vendosen në nivel lokal në secilën detyrë.

Përdorimi i variablave në tubacionet Azure DevOps

Ose globalisht në dyqanin e ndryshueshëm dhe më pas lidhini ato nga dyqani. Shumë komode.

Përdorimi i variablave në tubacionet Azure DevOps

Si bonus, nëse variablat janë shumë sekrete, ato mund të ruhen në renë Azure në një ruajtje të quajtur Azure Vault; ju mund ta lidhni Vault me ​​projektin në Bibliotekë.

Përdorimi i variablave në tubacionet Azure DevOps

Në përgjithësi, gjithçka është e qartë me variablat; në tubacione ato ende mund të vendosen manualisht për çdo nisje; në lëshim nuk ka një funksionalitet të tillë. Ju mund të shihni se çfarë po transferoni në tubacion përsëri në regjistrat e inicializimit të agjentit, por mbani në mend se ato janë tashmë atje në formë të konvertuar.

Përdorimi i variablave në tubacionet Azure DevOps

Variablat dinamikë

Argëtimi fillon kur duam të marrim një vlerë në një fazë dhe ta kalojmë atë në tjetrën.

Përdorimi i variablave në tubacionet Azure DevOps

Nuk na është ofruar një funksionalitet i tillë. Por duart tona nuk janë për mërzi dhe me ndihmën e Google u gjet një zgjidhje. Faleminderit Zotit, Azure DevOps ka një API që na lejon të bëjmë pak më shumë se sa përshkruhej në ndërfaqe.

Pra, do të na duhet një thirrje për të përditësuar variablat globale, të cilën do ta bëjmë direkt nga brenda tubacionit. Adresa është marrë nga variablat e mjedisit, të njëjtat për të cilat nuk ka asnjë fjalë në dokumentacion, siç u përmend më herët. Mund t'i vendosni vetë ose, për më tepër, t'i kodoni ato nëse mbyllin dyqanin.

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

Vendosëm vlerën boshe të ndryshores që duam të transferojmë, vendosim Scope - Release

Përdorimi i variablave në tubacionet Azure DevOps

Për shembull, ne bëjmë një gjenerator të vlerave të rastësishme. Kushtojini vëmendje sintaksës së deklarimit të një ndryshoreje brenda kësaj faze; ky funksionalitet u prezantua.

Përdorimi i variablave në tubacionet Azure DevOps

Në hapin tjetër, ne ia kalojmë variablin skriptit, po, po, nuk është e mundur drejtpërdrejt, duhet të jetë përmes një argumenti.

Përdorimi i variablave në tubacionet Azure DevOps

Skript nën 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

ose

Përplas

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

Me pak fjalë, skripti ynë merr variablin myVar si hyrje dhe përdor API për të vendosur vlerën e kësaj ndryshore në stageVar. Në hapin tjetër, duke përdorur sintaksën e variablave të sistemit, ne mund ta shikojmë atë.

Përdorimi i variablave në tubacionet Azure DevOps

Shembulli është mjaft i thjeshtë, por funksionaliteti na hap mundësi të mira, përveç të mëparshmes sime artikull, kur mund të krijojmë një makinë virtuale në fazën e parë të testimit, të kryejmë disa manipulime të mëtejshme me të dhe disa paralelisht. Dhe faza e fundit është ta shkatërroni atë. Tani ne kryejmë autoteste të produktit çdo herë në makina të reja virtuale. Duke marrë parasysh që jetojnë rreth 10 minuta, kushton një qindarkë.

Në artikullin tjetër, nëse është e nevojshme, do të flas për tubacionet YAML; kohët e fundit ka pasur mjaft risi interesante atje.

Burimi: www.habr.com

Shto një koment