Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Мо баррасии худро дар бораи як воситаи олиҷаноб барои таҳияи Windows ва ғайра идома медиҳем, Azure DevOps. Ин дафъа, ки аз тағирёбандаҳои муҳити зист бисёр азоб кашидам, ман қарор додам, ки тамоми таҷрибаро дар як мақола ҷамъ кунам.

Аз он, ки онҳо барои ҳар як муҳити иҷро синтаксиси гуногун доранд, бо набудани қобилияти стандартии интиқоли тағирёбандаҳо аз як марҳила ба марҳилаи дигар.

Ман қайд мекунам, ки намунаҳои асосӣ дар Release Pipelines хоҳанд буд, зеро YAML ҳанӯз ба он ҷо нарасидааст ва ман ба функсияҳои бисёр марҳилаҳо ва артефактҳо ниёз дорам. Чунин ба назар мерасад, ки ин дар қубурҳои муқаррарӣ дастрас шудааст, ки амалан аз ҷиҳати функсия ба онҳо баробар аст. Дар Pipelines YAML, мо ба тасвири матн як абзори графикии хурд бо параметрҳое илова кардем, ки онҳоро танзим кардан мумкин аст. Ин хеле қулай аст; ба шумо лозим нест, ки ҳуҷҷатҳоро барои ҳар як модул гузаред. Аммо ман инро дар мақолаи оянда тавсиф мекунам, аммо ҳоло дар ин ҷо тасвири худи навоварӣ аст.

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Нигоҳдорӣ ва истифода

Биёед аз он оғоз кунем, ки мо дар система тағирёбандаҳои пешфарз дорем. Онҳо вобаста ба пайдоишашон бо калимаҳои Release, System ва ғайра оғоз мешаванд. Рӯйхати пурра (чунон ки маълум мешавад, не), дар дастрас аст хуччатхо. Ҳама шизофрения бо синтаксис бо мисоли ҳуҷҷатҳои дар поён овардашуда нишон дода шудаанд. Як тағирёбанда се намояндагӣ дорад, вобаста аз он ки мо онро дар куҷо меномем.

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)

Агар шумо тағирёбандаро дар агенте таъин кунед, ки дар он вазифа иҷро мешавад, он $(System.AccessToken) аст. Агар шумо хоҳед, ки онро дар дохили як скрипти powershell дар ҳамон агент истифода баред, он аллакай $env:SYSTEM_ACCESSTOKEN хоҳад буд. Агар шумо, Худо накунад, хоҳед, ки ин тағирёбандаро дар баъзе ҳости дурдаст бо истифода аз PowerShell дар вазифаи мошинҳои мавриди ҳадаф истифода баред, шумо бояд инро тавассути аргумент ба скрипт гузаронед. пули ман. Бо bash он соддатар аст, шумо метавонед онро бо истифода аз аргумент ва синтаксиси $SYSTEM_ACCESSTOKEN дар дохили он гузаронед.

Ҳамин қонунҳо ба тағирёбандаҳои шахсии шумо дахл надоранд; дар ин ҷо шумо аллакай барои синтаксис масъул ҳастед. Тағирёбандаҳоро дар ҳар як вазифа ба таври маҳаллӣ муқаррар кардан мумкин аст.

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Ё дар саросари ҷаҳон ба мағозаи тағирёбанда ва сипас онҳоро аз мағоза пайваст кунед. Хеле бароҳат.

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Ҳамчун бонус, агар тағирёбандаҳо хеле махфӣ бошанд, онҳо метавонанд дар абри Azure дар анборе бо номи Azure Vault нигоҳ дошта шаванд; шумо метавонед Vault-ро ба лоиҳа дар Китобхона пайваст кунед.

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Умуман, ҳама чиз бо тағирёбандаҳо равшан аст; дар қубурҳо онҳо ҳоло ҳам барои ҳар як оғозёбӣ дастӣ муқаррар карда мешаванд; дар барориши он чунин функсия вуҷуд надорад. Шумо метавонед бори дигар дар гузоришҳои оғозкунии агент он чизеро, ки шумо ба қубур интиқол медиҳед, бубинед, аммо дар хотир доред, ки онҳо аллакай дар шакли табдилшуда мавҷуданд.

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Тағйирёбандаҳои динамикӣ

Шавқовар вақте оғоз мешавад, ки мо мехоҳем дар як марҳила арзише ба даст орем ва онро ба дигараш гузаронем.

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Ба мо чунин функсия дода нашудааст. Аммо дастони мо барои дилтангӣ нест ва бо кӯмаки Google роҳи ҳал пайдо шуд. Худоро шукр, Azure DevOps дорои API мебошад, ки ба мо имкон медиҳад, ки нисбат ба он чизе, ки дар интерфейс тасвир шудааст, каме бештар кор кунем.

Ҳамин тавр, ба мо занг барои навсозии тағирёбандаҳои глобалӣ лозим аст, ки мо онро мустақиман аз дохили қубур иҷро хоҳем кард. Суроға аз тағирёбандаҳои муҳити зист гирифта шудааст, ҳамонҳое, ки дар ҳуҷҷатҳо, тавре ки қаблан зикр шуда буд, калимае нест. Шумо метавонед онҳоро худатон насб кунед ё, агар онҳо дӯконро пӯшанд, онҳоро рамзгузорӣ кунед.

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

Мо арзиши холии тағирёбандаро, ки мо мехоҳем интиқол диҳем, таъин мекунем, Scope - Release -ро таъин мекунем

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Масалан, мо як тавлидкунандаи арзиши тасодуфӣ мекунем. Ба синтаксиси эълони тағирёбанда дар дохили ин марҳила диққат диҳед; ин функсия ҷорӣ карда шудааст.

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Дар қадами оянда, мо тағирёбандаро ба скрипт мегузорем, ҳа, ҳа, ин мустақиман имконнопазир аст, он бояд тавассути аргумент бошад.

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Скрипт дар зери спойлер

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

Ё

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

Хулоса, скрипти мо тағирёбандаи myVar-ро ҳамчун вуруд қабул мекунад ва API-ро барои гузоштани арзиши ин тағирёбанда ба stageVar истифода мебарад. Дар қадами оянда, бо истифода аз синтаксиси тағирёбандаи система, мо метавонем онро бубинем.

Истифодаи тағирёбандаҳо дар лӯлаҳои Azure DevOps

Мисол хеле содда аст, аммо функсия ба ғайр аз пештараи ман барои мо имкониятҳои хубро мекушояд мақолаҳо, вақте ки мо метавонем як мошини виртуалиро дар марҳилаи аввали санҷиш эҷод кунем, бо он якчанд амалҳои минбаъдаро иҷро кунед ва якчанд маротиба дар баробари он. Ва марҳилаи ниҳоӣ нобуд кардани он аст. Ҳоло мо ҳар дафъа дар мошинҳои нави виртуалӣ санҷишҳои автоматии маҳсулот мегузаронем. Бо назардошти он, ки онҳо тақрибан 10 дақиқа зиндагӣ мекунанд, ин як тин арзиш дорад.

Дар мақолаи навбатӣ, агар лозим бошад, ман дар бораи қубурҳои YAML сӯҳбат мекунам; вақтҳои охир дар он ҷо навовариҳои ҷолиб хеле зиёданд.

Манбаъ: will.com

Илова Эзоҳ