Përdorimi i variablave në pipeline-t e Azure DevOps

Vazhdoni me shqyrtimin e mjetit të shkëlqyer për zhvillimin për Windows dhe më shumë, Azure DevOps. Këtë herë, pasi u përballa me variablat e mjedisit, vendosa të përmbledh tërë përvojën në një artikull.

Duke filluar nga fakti që për çdo mjedis ekzekutimi ata kanë sintaksë të ndryshme, deri te mungesa e mundësisë standarde për të transferuar variablat nga një fazë e pipeline-it në një tjetër.

Këtu do të përmend se shembujt kryesorë do të jenë në Release Pipelines, sepse YAML ende nuk ka arritur atje, dhe unë kam nevojë për funksionalitetin e disa fazave dhe disa artefakteve. Duket se kjo është bërë e aksesueshme në Pipeline-t e zakonshme, çka praktikisht i ka barazuar ato në funksionalitet. Në Pipeline-t YAML janë bërë përmirësime dhe janë shtuar një sugjerim grafik të vogël me parametrat që mund të vendosen. Shumë e përshtatshme, nuk ka nevojë të hidhesh në dokumentacion për çdo modul. Por këtë do ta përshkruaj në artikullin e ardhshëm, ndërsa për tani ja një pamje e risisë.

Përdorimi i variablave në pipeline-t e Azure DevOps

Ruajtja dhe përdorimi

Të fillojmë me faktin se në sistemin tonë kemi variabla me default. Ato fillojnë, varësisht nga origjina, me fjalët Release, System, etj. Lista e plotë (siç duket, nuk ekziston) është e disponueshme në dokumentacionin. Të gjithë këtë çmenduri me sintaksën e ilustron shembulli nga dokumentacioni më poshtë. Një variabël e njëjtë ka tre përfaqësime, varësisht nga vendi ku e thërrasim.

steps:
 - bash: echo Ky skript mund të përdorë $SYSTEM_ACCESSTOKEN
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  - powershell: Write-Host "Ky është një skript që mund të përdorë $env:SYSTEM_ACCESSTOKEN"
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)

Nëse vendosni një variabël në agjentin ku ekzekutohet detyra, kjo është $(System.AccessToken). Nëse dëshironi ta përdorni atë brenda skriptit powershell në të njëjtin agjent, kjo do të jetë $env:SYSTEM_ACCESSTOKEN. Nëse, për fat të keq, dëshiron ta përdorni këtë variabël në ndonjë host të largët, duke përdorur detyrën PowerShell në makinat e targetuara, duhet ta kaloni atë përmes argumentit në skript, duke përdorur param. Me bash është më e lehtë, mund ta kaloni brenda duke përdorur argumentin dhe sintaksën $SYSTEM_ACCESSTOKEN.

Të njëjtat rregulla nuk zbatohen për variablat tuaja, këtu ju mban përgjegjësi për sintaksën. Variablat mund të vendosen lokal në secilën detyrë.

Përdorimi i variablave në pipeline-t e Azure DevOps

Ose globalisht në depozitat e variablave dhe më pas lidhni ato nga depozita. Shumë e përshtatshme.

Përdorimi i variablave në pipeline-t e Azure DevOps

Si një bonus, nëse variablat janë shumë sekrete, mund t'i ruani në cloud Azure në një magazinë të quajtur Azure Vault, e cila mund të lidhët me projektin në Library.

Përdorimi i variablave në pipeline-t e Azure DevOps

Në përgjithësi, variablat janë të qarta, në pipelines ato mund të vendosen manualisht për çdo nisje, por në release kjo funksionalitet nuk ekziston. Mund të shihni se çfarë po dërgoni në pipeline edhe një herë në log-et e inicializimit të agjentit, megjithatë, kini parasysh se aty janë tashmë në formën e transformuar.

Përdorimi i variablave në pipeline-t e Azure DevOps

Variablat dinamikë

Gjëja më interesante fillon kur duam të marrim ndonjë vlerë në një hap dhe ta kalojmë atë në hapin tjetër.

Përdorimi i variablave në pipeline-t e Azure DevOps

Ky funksionalitet nuk na është sjellë. Por duartonat tona nuk janë për kot dhe me ndihmën e Google, u gjet një zgjidhje. Falë Zotit, Azure DevOps ka një API që na lejon të bëjmë pak më shumë sesa është vizatuar në ndërfaqe.

Pra, do të na nevojitet thirrja për përditësimin e variablave globale, të cilën do ta bëjmë direkt nga brenda pipeline. Adresa merret nga variablat e ambientit, ata të njëjtat për të cilët nuk ka asnjë fjalë në dokumentacion, siç u përmend më parë. Ju mund t'i caktoni vetë ose, çfarë të thoni, t'i kodoni në mënyrë të ngurtë, nëse e mbyllin dyqanin.

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

CaktojmĂ« njĂ« vlerĂ« tĂ« zbrazĂ«t pĂ«r variablĂ«n qĂ« duam tĂ« kalojmĂ«, vendosim Scope — Release

Përdorimi i variablave në pipeline-t e Azure DevOps

Për shembull bëjmë një gjenerues të rastësishëm të vlerave. Vini re sintaksën e shpalljes së variablit brenda këtij etapi, një funksionalitet i tillë është futur.

Përdorimi i variablave në pipeline-t e Azure DevOps

Në etapin tjetër, kalojmë variablën në skript, po, po, direkt nuk është e mundur, duhet përmes argumentit.

Përdorimi i variablave në pipeline-t e Azure DevOps

Skripti nën spojler

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

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

Në dy fjalë, skripti ynë merr si hyrje variablën myVar dhe duke përdorur API, vendos vlerën e këtij variabli në stageVar. Në etapin tjetër, duke përdorur sintaksën e variablave sistemikë, mund ta shohim atë.

Përdorimi i variablave në pipeline-t e Azure DevOps

Shembulli është mjaft i thjeshtë, por funksionaliteti na hap mundësi të mira, së bashku me të kaluarën time. artikull, kur ne mund të krijojmë një makinë virtuale në fazën e parë të testimit, të bëjmë disa manipulime me të më vonë, veçanërisht disa paralelisht. Dhe si një fazë përfundimtare ta shkatërrojmë atë. Tani po kryhen teste automatike të produktit çdo herë në makina virtuale të reja. Duke pasur parasysh se ato jetojnë 10 minuta, kjo kushton pak.

Në artikullin e ardhshëm, nëse do të ketë nevojë, do të flas për pipeline-t YAML, kanë dalë shumë novacione interesante kohët e fundit.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster