It brûken fan fariabelen yn Azure DevOps pipelines

Wy geane troch mei ús resinsje fan in prachtich ark foar ûntwikkeling foar Windows en mear, Azure DevOps. Dizze kear, nei't ik in protte te lijen hie mei omjouwingsfariabelen, besleat ik alle ûnderfining yn ien artikel te setten.

Begjinnend fan it feit dat se ferskate syntaksis hawwe foar elke útfieringsomjouwing, einigje mei it ûntbrekken fan in standert fermogen om fariabelen oer te dragen fan ien poadium fan 'e pipeline nei in oar.

Ik sil meitsje in reservearring dat de wichtichste foarbylden sille wêze op Release Pipelines, omdat YAML hat net krigen dêr noch, en ik moat de funksjonaliteit fan in protte stadia en in protte artefakten. Dit, it liket, is beskikber wurden yn reguliere Pipelines, dy't har praktysk lykweardich is yn funksjonaliteit. Yn Pipelines YAML hawwe wy in lytse grafyske tooltip tafoege oan de tekstfertsjintwurdiging mei parameters dy't ynsteld wurde kinne. It is heul handich; jo hoege net troch de dokumintaasje foar elke module te gean. Mar ik sil dit beskriuwe yn it folgjende artikel, mar foar no is hjir in foto fan 'e ynnovaasje sels.

It brûken fan fariabelen yn Azure DevOps pipelines

Opslach en gebrûk

Lit ús begjinne mei it feit dat wy hawwe standert fariabelen yn it systeem. Se begjinne, ôfhinklik fan har komôf, mei de wurden Release, System, ensfh. De folsleine list (sa't it docht bliken, net), is beskikber by dokumintaasje. Alle skizofreny mei syntaksis wurdt yllustrearre troch in foarbyld út de dokumintaasje hjirûnder. Deselde fariabele hat trije foarstellings, ôfhinklik fan wêr't wy it neame.

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)

As jo ​​in fariabele ynstelle op de agint wêrop de taak wurdt útfierd, is it $(System.AccessToken). As jo ​​​​it brûke wolle yn in powershell-skript op deselde agint, sil it al $env:SYSTEM_ACCESSTOKEN wêze. As jo, God ferbeane, dizze fariabele brûke wolle op guon host op ôfstân mei de PowerShell op doelmasines taak, moatte jo dit troch in argumint trochjaan oan it skript mei myn jild. Mei bash is it ienfâldiger, jo kinne it gewoan binnen trochjaan mei it argumint en syntaksis $SYSTEM_ACCESSTOKEN.

Deselde wetten jilde net foar jo eigen fariabelen; hjir binne jo al ferantwurdlik foar de syntaksis. Fariabelen kinne yn elke taak lokaal ynsteld wurde.

It brûken fan fariabelen yn Azure DevOps pipelines

Of globaal nei de fariabele winkel, en dan keppelje se út 'e winkel. Hiel noflik.

It brûken fan fariabelen yn Azure DevOps pipelines

As bonus, as de fariabelen heul geheim binne, kinne se wurde opslein yn 'e Azure-wolk yn in opslach mei de namme Azure Vault; jo kinne Vault keppelje oan it projekt yn 'e bibleteek.

It brûken fan fariabelen yn Azure DevOps pipelines

Yn 't algemien is alles dúdlik mei fariabelen; yn pipelines kinne se noch foar elke lansearring manuell ynsteld wurde; yn release is d'r gjin sa'n funksjonaliteit. Jo kinne sjen wat jo oermeitsje nei de pipeline wer yn de agent inisjalisaasje logs, mar hâld der rekken mei dat se binne der al yn omboude foarm.

It brûken fan fariabelen yn Azure DevOps pipelines

Dynamyske fariabelen

De wille begjint as wy wat wearde yn ien etappe wolle ûntfange en it nei de folgjende trochjaan.

It brûken fan fariabelen yn Azure DevOps pipelines

Wy waarden net foarsjoen fan sokke funksjonaliteit. Mar ús hannen binne net foar ferfeling en mei help fan Google is in oplossing fûn. Tankewol, Azure DevOps hat in API wêrmei wy in bytsje mear kinne dwaan dan wat yn 'e ynterface ôfbylde is.

Dat, wy sille in oprop nedich wêze om globale fariabelen te aktualisearjen, wat wy direkt sille dwaan fanút de pipeline. It adres is nommen út omjouwingsfariabelen, deselde dêr't gjin wurd oer stiet yn de dokumintaasje, lykas earder neamd. Jo kinne se sels ynstelle of, wat mear is, se hardcode as se de winkel slute.

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

Wy sette de lege wearde fan 'e fariabele dy't wy wolle oerdrage, set Scope - Release

It brûken fan fariabelen yn Azure DevOps pipelines

Bygelyks, wy meitsje wat willekeurige wearde generator. Soarch omtinken foar de syntaksis fan it ferklearjen fan in fariabele binnen dit poadium; dizze funksjonaliteit waard yntrodusearre.

It brûken fan fariabelen yn Azure DevOps pipelines

Yn 'e folgjende stap jouwe wy de fariabele troch nei it skript, ja, ja, it is net direkt mooglik, it moat fia in argumint wêze.

It brûken fan fariabelen yn Azure DevOps pipelines

Skript ûnder 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

Or

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

Yn in notedop nimt ús skript de fariabele myVar as ynfier en brûkt de API om de wearde fan dizze fariabele yn stageVar te setten. Yn 'e folgjende stap, mei help fan systeemfariabele syntaksis, kinne wy ​​​​nei sjen.

It brûken fan fariabelen yn Azure DevOps pipelines

It foarbyld is frij simpel, mar de funksjonaliteit iepenet goede kânsen foar ús, neist myn foarige artikels, as wy in firtuele masine kinne oanmeitsje yn 'e earste faze fan testen, fiere wat fierdere manipulaasjes mei, en ferskate parallel. En de lêste etappe is om it te ferneatigjen. No rinne wy ​​elke kear autotests fan it produkt op frisse firtuele masines. Yn betinken nommen dat se libje foar likernôch 10 minuten, it kostet in penny.

Yn it folgjende artikel, as it nedich is, sil ik prate oer YAML-pipelines; d'r binne d'r de lêste tiid nochal in protte nijsgjirrige ynnovaasjes west.

Boarne: www.habr.com

Add a comment