L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

Inkomplu r-reviżjoni tagħna ta 'għodda mill-isbaħ għall-iżvilupp għall-Windows u aktar, Azure DevOps. Din id-darba, wara li sofra ħafna b'varjabbli ambjentali, iddeċidejt li npoġġi l-esperjenza kollha f'artiklu wieħed.

Nibdew mill-fatt li għandhom sintassi differenti għal kull ambjent ta 'eżekuzzjoni, li jispiċċa bin-nuqqas ta' kapaċità standard biex jittrasferixxu varjabbli minn stadju wieħed tal-pipeline għal ieħor.

Se nagħmel riżerva li l-eżempji ewlenin se jkunu fuq Release Pipelines, għaliex YAML għadu ma wasalx hemm, u għandi bżonn il-funzjonalità ta 'ħafna stadji u ħafna artifacts. Dan, jidher, sar disponibbli fil-Pipelines regolari, li prattikament daqshom fil-funzjonalità. F'Pipelines YAML, aħna żidna tooltip grafika żgħira mar-rappreżentazzjoni tat-test b'parametri li jistgħu jiġu stabbiliti. Huwa konvenjenti ħafna; m'għandekx għalfejn tgħaddi mid-dokumentazzjoni għal kull modulu. Imma se niddeskrivi dan fl-artiklu li jmiss, iżda għalissa hawn stampa tal-innovazzjoni nnifisha.

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

Ħażna u użu

Nibdew bil-fatt li għandna varjabbli default fis-sistema. Jibdew, skont l-oriġini tagħhom, bil-kliem Rilaxx, Sistema, eċċ. Il-lista sħiħa (kif jirriżulta, le), hija disponibbli fuq dokumentazzjoni. L-iskiżofrenja kollha bis-sintassi hija illustrata b'eżempju mid-dokumentazzjoni hawn taħt. L-istess varjabbli għandha tliet rappreżentazzjonijiet, skont fejn insejħuha.

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)

Jekk issettja varjabbli fuq l-aġent li fuqu jitwettaq il-kompitu, huwa $(System.AccessToken). Jekk trid tużah ġewwa script powershell fuq l-istess aġent, ikun diġà $env:SYSTEM_ACCESSTOKEN. Jekk int, Alla ħares, trid tuża din il-varjabbli fuq xi host remot billi tuża l-kompitu PowerShell fuq magni fil-mira, trid tgħaddi dan permezz ta' argument lill-iskritt billi tuża flusi. B'bash huwa aktar sempliċi, tista 'sempliċement tgħaddiha ġewwa billi tuża l-argument u s-sintassi $SYSTEM_ACCESSTOKEN.

L-istess liġijiet ma japplikawx għall-varjabbli tiegħek stess; hawnhekk int diġà responsabbli għas-sintassi. Varjabbli jistgħu jiġu stabbiliti lokalment f'kull kompitu.

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

Jew globalment mal-maħżen varjabbli, u mbagħad għaqqadhom mill-maħżen. Komdu ħafna.

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

Bħala bonus, jekk il-varjabbli huma sigrieti ħafna, jistgħu jinħażnu fil-sħab ta' Azure f'ħażna msejħa Azure Vault; tista' tgħaqqad Vault mal-proġett fil-Librerija.

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

B'mod ġenerali, kollox huwa ċar bil-varjabbli; fil-pipelines xorta jistgħu jiġu ssettjati manwalment għal kull tnedija; fir-rilaxx m'hemm l-ebda funzjonalità bħal din. Tista 'tara dak li qed tittrasferixxi għall-pipeline għal darb'oħra fil-ġurnali tal-inizjalizzazzjoni tal-aġent, iżda jżomm f'moħħu li huma diġà hemm f'forma maqluba.

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

Varjabbli Dinamika

Il-gost jibda meta rridu nirċievu xi valur fi stadju wieħed u ngħadduh għall-ieħor.

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

Aħna ma ġewx ipprovduti b'tali funzjonalità. Imma idejna mhumiex għad-dwejjaq u bl-għajnuna tal-Google instabet soluzzjoni. Grazzi lil Alla, Azure DevOps għandha API li tippermettilna nagħmlu ftit aktar minn dak li kien muri fl-interface.

Għalhekk, ikollna bżonn sejħa biex naġġornaw il-varjabbli globali, li se nagħmlu direttament minn ġewwa l-pipeline. L-indirizz huwa meħud minn varjabbli ambjentali, l-istess dawk li ma hemm kelma dwarhom fid-dokumentazzjoni, kif issemma qabel. Tista’ tissettjahom lilek innifsek jew, barra minn hekk, tikkodifikahom jekk jagħlqu l-ħanut.

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

Aħna nissettjaw il-valur vojt tal-varjabbli li rridu nittrasferixxu, issettja Skop - Rilaxx

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

Per eżempju, nagħmlu xi ġeneratur ta 'valur każwali. Oqgħod attent għas-sintassi li tiddikjara varjabbli f'dan l-istadju; din il-funzjonalità ġiet introdotta.

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

Fil-pass li jmiss, ngħaddu l-varjabbli lill-iskrittura, iva, iva, mhux possibbli direttament, għandu jkun permezz ta 'argument.

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

Skript taħt 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

Jew

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

Fil-qosor, l-iskrittura tagħna tieħu l-varjabbli myVar bħala input u tuża l-API biex tpoġġi l-valur ta 'din il-varjabbli fi stageVar. Fil-pass li jmiss, bl-użu tas-sintassi varjabbli tas-sistema, nistgħu nħarsu lejha.

L-użu ta' varjabbli fil-pipelines ta' Azure DevOps

L-eżempju huwa pjuttost sempliċi, iżda l-funzjonalità tiftaħ opportunitajiet tajbin għalina, minbarra dak preċedenti tiegħi artikolu, meta nistgħu noħolqu magna virtwali fl-ewwel stadju tal-ittestjar, twettaq xi manipulazzjonijiet ulterjuri magħha, u diversi b'mod parallel. U l-istadju finali huwa li teqredha. Issa nwettqu awtotests tal-prodott kull darba fuq magni virtwali friski. Meta wieħed iqis li jgħixu għal madwar 10 minuti, jiswa penny.

Fl-artiklu li jmiss, jekk meħtieġ, se nitkellem dwar pipelines YAML; kien hemm ħafna innovazzjonijiet interessanti hemmhekk dan l-aħħar.

Sors: www.habr.com

Żid kumment