Nou kontinye revizyon nou an sou yon zouti bèl bagay pou devlopman pou Windows ak plis ankò, Azure DevOps. Fwa sa a, mwen te soufri anpil ak varyab anviwònman an, mwen deside mete tout eksperyans nan nan yon sèl atik.
Kòmanse nan lefèt ke yo gen sentaks diferan pou chak anviwònman ekzekisyon, fini ak mank de yon kapasite estanda yo transfere varyab soti nan yon etap nan tiyo a nan yon lòt.
Mwen pral fè yon rezèvasyon ke egzanp prensipal yo pral sou Release Pipelines, paske YAML poko rive la, epi mwen bezwen fonksyonalite nan anpil etap ak anpil zafè. Sa a, li sanble, te vin disponib nan Pipelines regilye, ki pratikman egal yo nan fonksyonalite. Nan Pipelines YAML, nou te ajoute yon ti konsèy grafik nan reprezantasyon tèks la ak paramèt yo ka tabli. Li trè pratik; ou pa bezwen ale nan dokiman an pou chak modil. Men, mwen pral dekri sa a nan pwochen atik la, men pou kounye a isit la se yon foto nan inovasyon nan tèt li.
Depo ak itilizasyon
Ann kòmanse ak lefèt ke nou gen varyab default nan sistèm nan. Yo kòmanse, selon orijin yo, ak mo Release, System, elatriye. Lis la konplè (jan li vire soti, pa), ki disponib nan
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)
Si ou mete yon varyab sou ajan an sou ki travay la egzekite, li se $(System.AccessToken). Si ou vle sèvi ak li andedan yon script powershell sou menm ajan an, li pral deja $env:SYSTEM_ACCESSTOKEN. Si ou, Bondye padon, vle sèvi ak varyab sa a sou kèk lame aleka lè l sèvi avèk travay PowerShell sou machin sib, ou bezwen pase sa a nan yon agiman nan script la lè l sèvi avèk.
Menm lwa yo pa aplike pou pwòp varyab ou yo; isit la ou deja responsab pou sentaks la. Varyab yo ka mete lokalman nan chak travay.
Oswa globalman nan magazen an varyab, ak Lè sa a, konekte yo soti nan magazen an. Trè alèz.
Kòm yon bonis, si varyab yo trè sekrè, yo ka estoke nan nwaj Azure nan yon depo ki rele Azure Vault; ou ka konekte Vault ak pwojè a nan Bibliyotèk la.
An jeneral, tout bagay klè ak varyab; nan tiyo yo toujou ka mete manyèlman pou chak lansman; nan lage pa gen okenn fonksyonalite sa yo. Ou ka wè sa w ap transfere nan tiyo a ankò nan mòso bwa yo inisyalizasyon ajan, men kenbe nan tèt ou ke yo deja la nan fòm konvèti.
Varyab dinamik
Plezi a kòmanse lè nou vle resevwa kèk valè nan yon etap epi pase li nan pwochen an.
Nou pa te bay fonksyon sa yo. Men, men nou yo pa pou annwi ak èd Google yo te jwenn yon solisyon. Mèsi Bondye, Azure DevOps gen yon API ki pèmèt nou fè yon ti kras plis pase sa ki dekri nan koòdone a.
Se konsa, nou pral bezwen yon apèl aktyalizasyon varyab mondyal, ki nou pral fè dirèkteman nan tiyo a. Adrès la pran nan varyab anviwònman yo, menm sa yo ki pa gen yon mo sou dokiman an, jan mansyone pi bonè. Ou ka mete yo tèt ou oswa, anplis, hardcode yo si yo fèmen boutik la.
$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID) )
Nou mete valè a vid nan varyab la ke nou vle transfere, mete Dimansyon - Release
Pou egzanp, nou fè kèk dèlko valè o aza. Peye atansyon sou sentaks pou deklare yon varyab andedan etap sa a; fonksyonalite sa a te prezante.
Nan pwochen etap la, nou pase varyab la nan script la, wi, wi, li pa posib dirèkteman, li dwe nan yon agiman.
Script anba spoiler
poechèl
#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
Oswa
Bach
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
Nan yon bref, script nou an pran varyab myVar kòm opinyon epi sèvi ak API a pou mete valè varyab sa a nan stageVar. Nan pwochen etap la, lè l sèvi avèk sentaks varyab sistèm, nou ka gade li.
Egzanp la byen senp, men fonksyonalite a ouvè bon opòtinite pou nou, anplis anvan mwen an
Nan pwochen atik la, si sa nesesè, mwen pral pale sou tiyo YAML; te gen yon anpil nan inovasyon enteresan la dènyèman.
Sous: www.habr.com