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.
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
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
Deselde wetten jilde net foar jo eigen fariabelen; hjir binne jo al ferantwurdlik foar de syntaksis. Fariabelen kinne yn elke taak lokaal ynsteld wurde.
Of globaal nei de fariabele winkel, en dan keppelje se út 'e winkel. Hiel noflik.
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.
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.
Dynamyske fariabelen
De wille begjint as wy wat wearde yn ien etappe wolle ûntfange en it nei de folgjende trochjaan.
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
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.
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.
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 foarbyld is frij simpel, mar de funksjonaliteit iepenet goede kânsen foar ús, neist myn foarige
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