Paggamit sa mga variable sa Azure DevOps pipelines

Gipadayon namon ang among pagrepaso sa usa ka talagsaon nga himan alang sa pag-uswag alang sa Windows ug daghan pa, Azure DevOps. Niining higayona, nga nag-antos pag-ayo sa mga variable sa palibot, nakahukom ako nga ibutang ang tanan nga kasinatian sa usa ka artikulo.

Sugod gikan sa kamatuoran nga sila adunay lain-laing mga syntax alang sa matag execution palibot, nga natapos uban sa kakulang sa usa ka standard nga abilidad sa pagbalhin sa mga baryable gikan sa usa ka yugto sa pipeline ngadto sa lain.

Maghimo ako og usa ka reserbasyon nga ang mga nag-unang mga pananglitan anaa sa Release Pipelines, tungod kay ang YAML wala pa makaabot didto, ug kinahanglan nako ang pagpaandar sa daghang mga yugto ug daghang mga artifact. Kini, ingon og, nahimo nang magamit sa mga regular nga Pipelines, nga halos katumbas sa ilang gamit. Sa Pipelines YAML, gidugang namo ang gamay nga graphical tooltip sa representasyon sa teksto nga adunay mga parameter nga mahimong itakda. Kini sayon ​​​​kaayo; dili nimo kinahanglan nga moagi sa dokumentasyon alang sa matag module. Apan akong ihulagway kini sa sunod nga artikulo, apan sa pagkakaron ania ang hulagway sa kabag-ohan mismo.

Paggamit sa mga variable sa Azure DevOps pipelines

Pagtipig ug paggamit

Magsugod kita sa kamatuoran nga kita adunay mga default nga variable sa sistema. Nagsugod sila, depende sa ilang gigikanan, sa mga pulong nga Release, System, etc. Ang bug-os nga listahan (ingon nga kini nahimo, dili), anaa sa dokumentasyon. Ang tanan nga schizophrenia nga adunay syntax gihulagway sa usa ka pananglitan gikan sa dokumentasyon sa ubos. Ang parehas nga variable adunay tulo nga mga representasyon, depende kung diin naton kini gitawag.

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)

Kung nagbutang ka usa ka variable sa ahente diin ang buluhaton gipatuman, kini $(System.AccessToken). Kung gusto nimo nga gamiton kini sa sulod sa usa ka script sa powershell sa parehas nga ahente, kini mahimong $env:SYSTEM_ACCESSTOKEN. Kung ikaw, idili sa Dios, gusto nga gamiton kini nga variable sa pipila ka hilit nga host gamit ang PowerShell sa target nga mga makina nga buluhaton, kinahanglan nimo nga ipasa kini pinaagi sa usa ka argumento sa script gamit ang akong kwarta. Uban sa bash mas simple kini, mahimo nimong ipasa kini sa sulod gamit ang argumento ug syntax $SYSTEM_ACCESSTOKEN.

Ang parehas nga mga balaod wala magamit sa imong kaugalingon nga mga variable; dinhi ikaw ang responsable sa syntax. Ang mga variable mahimong ibutang sa lokal sa matag buluhaton.

Paggamit sa mga variable sa Azure DevOps pipelines

O sa tibuok kalibutan ngadto sa variable store, ug dayon i-link kini gikan sa tindahan. Komportable kaayo.

Paggamit sa mga variable sa Azure DevOps pipelines

Isip usa ka bonus, kung sekreto kaayo ang mga variable, mahimo silang tipigan sa Azure cloud sa storage nga gitawag og Azure Vault; mahimo nimong i-link ang Vault sa proyekto sa Library.

Paggamit sa mga variable sa Azure DevOps pipelines

Sa kinatibuk-an, ang tanan klaro sa mga variable; sa mga pipeline mahimo pa silang itakda nga mano-mano alang sa matag paglansad; sa pagpagawas wala’y ingon nga pagpaandar. Makita nimo kung unsa ang imong gibalhin sa pipeline pag-usab sa mga log sa pag-initialize sa ahente, apan hinumdomi nga naa na sila didto sa nakabig nga porma.

Paggamit sa mga variable sa Azure DevOps pipelines

Dynamic nga mga Variable

Magsugod ang kalingawan kon gusto namong makadawat ug bili sa usa ka yugto ug ipasa kini sa sunod.

Paggamit sa mga variable sa Azure DevOps pipelines

Wala kami gihatagan sa ingon nga pagpaandar. Apan ang among mga kamot dili alang sa kalaay ug sa tabang sa Google nakit-an ang usa ka solusyon. Salamat sa Dios, ang Azure DevOps adunay usa ka API nga nagtugot kanamo sa pagbuhat sa labi pa sa kung unsa ang gihulagway sa interface.

Mao nga, kinahanglan namon ang usa ka tawag sa pag-update sa mga global variable, nga among buhaton direkta gikan sa sulod sa pipeline. Ang adres gikuha gikan sa mga variable sa palibot, ang parehas nga wala’y pulong bahin sa dokumentasyon, sama sa nahisgutan sa sayo pa. Mahimo nimo nga ibutang kini sa imong kaugalingon o, unsa pa, i-hardcode kini kung ilang isira ang tindahan.

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

Gibutang namo ang walay sulod nga bili sa variable nga gusto namong ibalhin, itakda ang Scope - Release

Paggamit sa mga variable sa Azure DevOps pipelines

Pananglitan, naghimo kami og pipila ka random value generator. Hatagi'g pagtagad ang syntax sa pagdeklara sa usa ka variable sulod niini nga yugto; kini nga gamit gipaila.

Paggamit sa mga variable sa Azure DevOps pipelines

Sa sunod nga lakang, gipasa namon ang variable sa script, oo, oo, dili mahimo nga direkta, kinahanglan kini pinaagi sa usa ka argumento.

Paggamit sa mga variable sa Azure DevOps pipelines

Script ubos sa 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

O

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

Sa laktod nga pagkasulti, gikuha sa among script ang variable myVar isip input ug gigamit ang API aron ibutang ang kantidad niini nga variable sa stageVar. Sa sunod nga lakang, gamit ang system variable syntax, mahimo natong tan-awon kini.

Paggamit sa mga variable sa Azure DevOps pipelines

Ang panig-ingnan yano ra, apan ang pag-andar nagbukas sa maayong mga oportunidad alang kanamo, dugang sa akong nauna artikulo, sa diha nga kita makahimo sa usa ka virtual nga makina sa unang yugto sa pagsulay, sa pagbuhat sa pipila ka dugang nga mga manipulasyon uban niini, ug ang uban sa parallel. Ug ang katapusang yugto mao ang paglaglag niini. Karon nagpadagan kami og mga autotest sa produkto matag higayon sa presko nga virtual machine. Sa pagkonsiderar nga sila nagpuyo sa mga 10 minutos, kini nagkantidad og usa ka sentimos.

Sa sunod nga artikulo, kung kinahanglan, maghisgot ako bahin sa mga pipeline sa YAML; adunay daghang makapaikag nga mga inobasyon didto kaniadtong bag-o lang.

Source: www.habr.com

Idugang sa usa ka comment