JĂ€tkame suurepĂ€rase Windowsi arendustööriista ĂŒlevaatamist, Azure DevOps. Seekord, pĂ€rast keskkonnamuutujatega vaeva nĂ€gemist, otsustasin kogu oma kogemuse ĂŒhe artikli sisse koondada.
Alustame sellest, et igas jooksukeskkonnas on neil erinev sĂŒntaks, ning lĂ”petame selle puudumisega, et muuta muutujaid ĂŒhest etappist teise pipeline'is.
Tulen vĂ€lja, et peamised nĂ€ited on Release Pipelines, kuna YAML ei ole sinna veel jĂ”udnud ja mul on vaja funktsionaalsust mitmest etapist ja mitmest artefaktist. See, nagu tundub, on nĂŒĂŒdseks tavapĂ€rastes Pipelines saadaval, mis peaaegu vĂ”rdsustas nende funktsionaalsust. Pipelines YAML'i on tĂ€iustatud ja lisatud tekstipresentatsioonile vĂ€ike graafiline nĂ€punĂ€ide parameetrite kohta, mida saab mÀÀrata. VĂ€ga mugav, ei pea iga mooduli jaoks dokumentatsiooni vaatama. Kuid seda kirjeldan jĂ€rgmises artiklis, ja siinkohal on pilt uuest uuendusest.

Salvestamine ja kasutamine
Alustame sellest, et sĂŒsteemis on meil vaikimisi muutujad. Need algavad, sĂ”ltuvalt pĂ€ritolust, sĂ”nadest Release, System jne. TĂ€ielik nimekiri (nagu selgub, puudub) on saadaval . Kogu sĂŒntaksit illustreerib allpool olev nĂ€ide dokumentatsioonist. Ăhel ja samal muutujal on kolm esitamist, sĂ”ltuvalt sellest, kust me seda kutsume.
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 ĂŒlesande tĂ€itmiseks kasutataval agentil, on see $(System.AccessToken). Kui soovite seda kasutada powershell skriptis samal agendil, on see juba $env:SYSTEM_ACCESSTOKEN. Kui teil on, jumal hoia, soov kasutada seda muutujat mĂ”nes kaugmasinas, kasutades PowerShelli ĂŒlesannet sihtmasinatel, peate selle edastama argumendina skripti juurde, kasutades . Bashis on lihtsam, saab lihtsalt edastada, kasutades argumenti ja sĂŒntaksit $SYSTEM_ACCESSTOKEN.
Samad reeglid ei laiene teie enda muutujaile, siin kannate juba vastutust sĂŒntaksi eest. Muutujad saab mÀÀrata kohalikult igas ĂŒlesandes.

VÔi globaalsetes muutuja ladudes, ja seejÀrel linkida neid varude kaudu. VÀga mugav.

Booniksena, kui muutujaid on tÔeliselt salajased, saab neid sÀilitada Azure'i pilves nimega Azure Vault; Vaulti saab linkida projekti raamatukogus.

KokkuvÔttes on muutujatega kÔik selge, pipelines'i puhul saab neid veel kÀsitsi igaks kÀivitamiseks seadistada, release'is sellist funktsionaalsust pole. Vaadata, mida te pipelines'isse edastate, saab veel kord agentide alguslogidest, kuid pidage meeles, et seal on need juba muudetud kujul.

DĂŒnaamilised muutujad
Huvi hakkab tĂ”eliselt tĂ”usma, kui soovime saada mingit vÀÀrtust ĂŒhes etapis ja edastada selle jĂ€rgmisse.

Sellist funktsionaalsust meile ei pakutud. Kui aga meie kĂ€ed ei ole kĂŒlmad, leidsime Google'i abiga lahenduse. TĂ”eliselt tĂ€nu Azure DevOps'ile on olemas API, mis vĂ”imaldab meil teha natuke rohkem, kui liideses joonistatud.
Seega vajame globaalsete muutujate vÀrskendamise kÔnet, mille teeme otse pipelines'ist. Aadress vÔetakse keskkonnamuutujatest, neist, millest dokumentatsioonis ei rÀÀgita, nagu eelnevalt mainitud. Saate need ise seadistada vÔi, mis seal ikka, hardcode'ida, kui elu ei anna.
$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID))Seame tĂŒhjaks muutuja, mille tahame ĂŒle anda, mÀÀrame ulatuse â VĂ€ljalaskmine

NĂ€itena loome juhusliku vÀÀrtuste generaatori. Pöörake tĂ€helepanu muutuja deklareerimise sĂŒntaksile selle etapi jooksul, selline funktsionaalsus on sisse toodud.

JÀrgmises etapis edastame muutuja skriptile, jah, otseselt ei saa, tuleb lÀbi argumendi.

Skript peidetud aluses
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 Testi ID: ${INPUT_VAR}
RELEASE_URL="${SYSTEM_TEAMFOUNDATIONSERVERURI}${SYSTEM_TEAMPROJECTID}/_apis/release/releases/${RELEASE_RELEASEID}?api-version=5.0"
echo VĂ€ljalaskmise 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_URLKokkuvĂ”ttes, meie skript vĂ”tab sisendina muutuja myVar ja kasutades API-d, asetab selle muutuja vÀÀrtuse stageVar-i. JĂ€rgmises etapis, kasutades sĂŒsteemsete muutujate sĂŒntaksit, saame seda nĂ€ha.

NĂ€ide on ĂŒsna lihtne, kuid funktsionaalsus avab meile hĂ€id vĂ”imalusi, koos minu eelmisega. , kui me saame luua esimese etapi testimise jaoks virtuaalmasina, teha sellel mĂ”ningaid toiminguid ning seejĂ€rel samal ajal mitme masinaga. LĂ”ppfaas on selle hĂ€vitamine. Praegu toimub meie toote automaattestide kĂ€itamine iga kord vĂ€rsketel virtuaalmasinatel. Arvestades, et need eksisteerivad 10 minutit, maksab see vĂ€he.
JÀrgmises artiklis, kui on vajadus, rÀÀgin YAML torudest, seal on viimase ajal palju huvitavaid uuendusi.
Allikas: habr.com
