JĂ€tkame imetabase Windowsi arendustööriista Azure DevOps ĂŒlevaate tegemist. Seekord, pĂ€rast keskkonnamuutujatega vaeva nĂ€gemist, otsustasin kogu oma kogemuse ĂŒhe artikli peale koondada.
Alates sellest, et iga töötluskeskkonna jaoks on neil erinev sĂŒntaks, kuni standardse vĂ”imaluse puudumiseni muutujaid ĂŒhest etappest teise edastada.
MĂ”neni, peamised nĂ€ited on Release Pipelines, kuna YAML ei ole sinna veel jĂ”udnud ja mulle on vajalik mitme etapi ning mitme artefakti funktsionaalsus. Tundub, et see on tavalistes Pipelines nĂŒĂŒdseks kergesti saadaval ja peaaegu tasakaalustanud nende funktsionaalsuse. Pipelines'i YAML on tĂ€iustatud ja sellele tekstipĂ”hisele esitlusele on lisatud vĂ€ike graafiline abifunktsioon parameetrite mÀÀramiseks. VĂ€ga mugav, ei pea iga mooduli dokumentatsiooni otsima. Kuid seda kirjeldan jĂ€rgmises artiklis, aga siinkohal on pilt uuest funktsioonist.

Salvestamine ja kasutamine
Alustame sellest, et sĂŒsteemis on meil vaikimisi muutujaid. Need algavad, olenevalt pĂ€ritolust, sĂ”nadega Release, System jne. TĂ€ielik loetelu (nagu selgub, ei ole) on saadaval . Kogu sĂŒntaksihullus on illustreeritud allolevas dokumentatsiooni nĂ€ites. Ăhel ja samal muutujal on kolm esitamist, sĂ”ltuvalt sellest, kus me seda kutsub.
steps:
- bash: echo See skript vÔiks kasutada $SYSTEM_ACCESSTOKEN
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
- powershell: Write-Host "See on skript, mis vÔiks kasutada $env:SYSTEM_ACCESSTOKEN"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)Kui mÀÀrate muutuja ĂŒlesandes, kus ĂŒlesanne kĂ€ib, on see $(System.AccessToken). Kui soovite kasutada seda powershell skriptis samal ĂŒlesandel, on see juba $env:SYSTEM_ACCESSTOKEN. Kui, jumal aidaku, soovite seda muutuja kasutada mĂ”nel kaugmasinal, kasutades PowerShelli ĂŒlesandeid sihttarvutites, peate selle edastama skripti argumendina, kasutades . Bashis on see lihtsam; seda saab lihtsalt edasi anda kasutades argumenti ja sĂŒntaksit $SYSTEM_ACCESSTOKEN.
Samad reeglid ei kehti teie enda muutuja kohta, siin vastutate juba sĂŒntaksi eest. Muutujate mÀÀramine on vĂ”imalik kohalikult igas ĂŒlesandes.

VÔi globaalsetes muutujate hoidlas, ja seejÀrel neid hoidlast linkida. VÀga mugav.

Boonusena sellele, kui muutujad on tÔeliselt salajased, saab neid hoida Azure'i pilves nimega Azure Vault, ning Vault'i saab projekti linkida Library's.

Ăldiselt on muutujatega kĂ”ik selge, pipelines saab neid kĂ€sitsi iga kĂ€ivituse jaoks seadistada, kuid release'is sellist funktsionaalsust ei ole. Vaadata, mida te pipeline'i edastate, saab veel kord agentide alguse logides, kuid arvestage, et need on seal juba muundatud kujul.

DĂŒnaamilised muutujad
KĂ”ige huvitavam algab siis, kui soovime mingit vÀÀrtust ĂŒhes etapis saada ja see jĂ€rgmisse edastada.

Sellist funktsionaalsust pole meile toimetatud. Kuid meie kÀed ei ole igavuseks ja Google'i abil leidsime lahenduse. TÀnu Jumalale, et Azure DevOps'il on API, mis vÔimaldab meil teha natuke rohkem, kui liideses joonistatud.
Nii et meil on vaja globaalseid muutujaid uuendava kutse, mille me teeme otse pipeline'i seest. Aadress saadakse keskkonna muutujatest, millest dokumentatsioonis ei ole sÔnagi, nagu eelnevalt mainitud. Te saate neid ise seadistada vÔi, noh, kÔvakuvale kui asi kinni pannakse.
$releaseurl = ('{0}{1}\/apis\/release\/releases\/ {2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID))Seame muutuja tĂŒhjaks, mida tahame edastada, mÀÀrame Scope â Release

NĂ€iteks teeme mingi juhuslik vÀÀrtuste generaatori. Pange tĂ€hele, kuidas muutujat kĂ€esolevas etapis deklareeritakse, selline funktsionaalsus on nĂŒĂŒd tööle pandud.

JĂ€rgmises etapis edastame muutuja skriptile, jah, jah, otse ei saa, see peab minema argumendi kaudu.

Skript peidiku all
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))
#endregionVÔi
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_URLKahesĂ”naliselt, meie skript vĂ”tab sisendina muutuja myVar ja kasutades API'd paneb selle muutuja vÀÀrtuse stageVar'i. JĂ€rgmises etapis saame kasutada sĂŒsteemimuutujate sĂŒntaksit selle vaatamiseks.

NĂ€ide on ĂŒsna lihtne, kuid funktsionaalsus avab meile hĂ€id vĂ”imalusi, koos minu varasema , kui me saame luua virtuaalse masina testimise esimeses etapis, teha sellega mingid manipulatsioonid edasi, sealjuures korraga mitu. Ja lĂ”pp-etapiks selle hĂ€vitamine. Praegu jooksutame toote automaatkatseid iga kord vĂ€rsketel virtuaalmasinatel. Arvestades, et nad elavad umbes 10 minutit, maksab see penni.
JÀrgmises artiklis, kui vajadus tekib, rÀÀgin YAML pipeline'idest, seal on viimase aja jooksul pÀris palju huvitavaid uuendusi.
Allikas: habr.com
