Sèvi ak varyab nan tiyo Azure DevOps

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.

Sèvi ak varyab nan tiyo Azure DevOps

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 dokiman. Tout eskizofreni ak sentaks ilistre pa yon egzanp nan dokiman ki anba a. Menm varyab la gen twa reprezantasyon, tou depann de kote nou rele li.

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. lajan mwen. Avèk bash li pi senp, ou ka tou senpleman pase li andedan lè l sèvi avèk agiman an ak sentaks $SYSTEM_ACCESSTOKEN.

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.

Sèvi ak varyab nan tiyo Azure DevOps

Oswa globalman nan magazen an varyab, ak Lè sa a, konekte yo soti nan magazen an. Trè alèz.

Sèvi ak varyab nan tiyo Azure DevOps

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.

Sèvi ak varyab nan tiyo Azure DevOps

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.

Sèvi ak varyab nan tiyo Azure DevOps

Varyab dinamik

Plezi a kòmanse lè nou vle resevwa kèk valè nan yon etap epi pase li nan pwochen an.

Sèvi ak varyab nan tiyo Azure DevOps

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

Sèvi ak varyab nan tiyo Azure DevOps

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.

Sèvi ak varyab nan tiyo Azure DevOps

Nan pwochen etap la, nou pase varyab la nan script la, wi, wi, li pa posib dirèkteman, li dwe nan yon agiman.

Sèvi ak varyab nan tiyo Azure DevOps

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.

Sèvi ak varyab nan tiyo Azure DevOps

Egzanp la byen senp, men fonksyonalite a ouvè bon opòtinite pou nou, anplis anvan mwen an atik, lè nou ka kreye yon machin vityèl nan premye etap tès la, fè kèk manipilasyon plis ak li, ak plizyè nan paralèl. Ak etap final la se detwi li. Koulye a, nou kouri ototest nan pwodwi a chak fwa sou machin vityèl fre. Lè ou konsidere ke yo ap viv pou apeprè 10 minit, li koute yon pyès lajan.

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

Add nouvo kòmantè