Benotzt Variabelen an Azure DevOps Pipelines

Mir fuere weider eis Iwwerpréiwung vun engem wonnerbare Tool fir Entwécklung fir Windows a méi, Azure DevOps. Dës Kéier, nodeems ech vill mat Ëmfeldvariablen gelidden hunn, hunn ech beschloss all d'Erfahrung an een Artikel ze setzen.

Vun der Tatsaach unzefänken datt se eng aner Syntax fir all Ausféierungsëmfeld hunn, ophalen mat dem Mangel u Standardfäegkeet fir Variablen vun enger Etapp vun der Pipeline an eng aner ze transferéieren.

Ech maachen eng Reservatioun datt d'Haaptbeispiller op Release Pipelines sinn, well YAML ass nach net do komm, an ech brauch d'Funktionalitéit vu ville Bühnen a vill Artefakte. Dëst, et schéngt, ass a reguläre Pipelines verfügbar ginn, wat se praktesch an der Funktionalitéit entsprécht. An Pipelines YAML hu mir e klenge grafeschen Tooltip an d'Texterpresentatioun mat Parameteren bäigefüügt, déi gesat kënne ginn. Et ass ganz bequem; Dir musst net duerch d'Dokumentatioun fir all Modul goen. Awer ech wäert dat am nächsten Artikel beschreiwen, awer fir de Moment hei ass e Bild vun der Innovatioun selwer.

Benotzt Variabelen an Azure DevOps Pipelines

Späicheren a Gebrauch

Loosst eis mat der Tatsaach ufänken datt mir Standardvariablen am System hunn. Si fänken un, ofhängeg vun hirer Hierkonft, mat de Wierder Release, System, etc. Déi komplett Lëscht (wéi et sech erausstellt, net), ass verfügbar op Dokumentatioun. All Schizophrenie mat Syntax gëtt duerch e Beispill aus der Dokumentatioun hei ënnen illustréiert. Déi selwecht Variabel huet dräi Representatioune, jee no wou mir et nennen.

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)

Wann Dir eng Variabel op den Agent setzt, op deem d'Aufgab ausgefouert gëtt, ass et $(System.AccessToken). Wann Dir et an engem Powershell Skript op deemselwechten Agent benotze wëllt, da wäert et scho $env:SYSTEM_ACCESSTOKEN sinn. Wann Dir, Gott verbidd, dës Variabel op engem Fernhost benotze wëllt mat der PowerShell op Zilmaschinnen Aufgab, musst Dir dëst duerch en Argument un de Skript passéieren meng Suen. Mat Bash ass et méi einfach, Dir kënnt et einfach bannen duerch d'Argument an d'Syntax $SYSTEM_ACCESSTOKEN benotzen.

Déi selwecht Gesetzer gëllen net fir Är eege Variabelen; hei sidd Dir scho verantwortlech fir d'Syntax. Variablen kënnen lokal an all Aufgab gesat ginn.

Benotzt Variabelen an Azure DevOps Pipelines

Oder global op d'Variabel Buttek, an dann Link hinnen aus dem Buttek. Ganz bequem.

Benotzt Variabelen an Azure DevOps Pipelines

Als Bonus, wann d'Variabelen ganz geheim sinn, kënne se an der Azure Cloud an enger Späichere mam Numm Azure Vault gespäichert ginn; Dir kënnt Vault mam Projet an der Bibliothéik verbannen.

Benotzt Variabelen an Azure DevOps Pipelines

Am Allgemengen ass alles kloer mat Variabelen; a Pipelines kënne se nach ëmmer manuell fir all Start gesat ginn; an der Verëffentlechung gëtt et keng sou Funktionalitéit. Dir kënnt gesinn wat Dir op d'Pipeline nees an der Agent Initialiséierung Logbicher iwwerdroen, mee halen vergiessen, datt se schonn an ëmgerechent Form do sinn.

Benotzt Variabelen an Azure DevOps Pipelines

Dynamesch Variablen

De Spaass fänkt un wann mir e Wäert an enger Etapp wëllen kréien an op déi nächst weiderginn.

Benotzt Variabelen an Azure DevOps Pipelines

Mir waren net mat esou Funktionalitéit geliwwert. Awer eis Hänn sinn net fir Langweil a mat Hëllef vu Google gouf eng Léisung fonnt. Gott sei Dank, Azure DevOps huet eng API déi eis erlaabt e bësse méi ze maachen wéi dat wat an der Interface duergestallt gouf.

Also, mir brauche en Uruff fir global Variablen ze aktualiséieren, wat mir direkt aus der Pipeline maachen. D'Adress gëtt aus Ëmfeld Variablen geholl, déi selwecht déi et net e Wuert an der Dokumentatioun ass, wéi virdru scho gesot. Dir kënnt se selwer setzen oder, wat méi ass, se hardcode wann se de Buttek zoumaachen.

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

Mir setzen den eidele Wäert vun der Variabel déi mir wëllen transferéieren, setzen Scope - Release

Benotzt Variabelen an Azure DevOps Pipelines

Zum Beispill, maachen mir e puer zoufälleg Wäert Generator. Opgepasst op d'Syntax fir eng Variabel an dëser Etapp ze deklaréieren; dës Funktionalitéit gouf agefouert.

Benotzt Variabelen an Azure DevOps Pipelines

Am nächste Schrëtt gi mir d'Variabel un d'Skript, jo, jo, et ass net direkt méiglech, et muss duerch en Argument sinn.

Benotzt Variabelen an Azure DevOps Pipelines

Skript ënner 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

An enger Nossschuel, eist Skript hëlt d'Variabel myVar als Input a benotzt d'API fir de Wäert vun dëser Variabel an stageVar ze setzen. Am nächste Schrëtt, andeems Dir Systemvariabel Syntax benotzt, kënne mir et kucken.

Benotzt Variabelen an Azure DevOps Pipelines

D'Beispill ass zimmlech einfach, awer d'Funktionalitéit mécht gutt Méiglechkeete fir eis op, zousätzlech zu mengem fréiere Artikelen, wa mir eng virtuell Maschinn an der éischter Etapp vum Test erstellen kënnen, maachen e puer weider Manipulatioune mat him, a verschidde parallel. An déi lescht Etapp ass et ze zerstéieren. Elo lafe mir Autotester vum Produkt all Kéier op frësche virtuelle Maschinnen. Bedenkt datt se ongeféier 10 Minutten liewen, kascht et e Penny.

Am nächsten Artikel, wann néideg, wäert ech iwwer YAML Pipelines schwätzen; et goufen zënter kuerzem vill interessant Innovatiounen do.

Source: will.com

Setzt e Commentaire