Мо баррасии худро дар бораи як воситаи олиҷаноб барои таҳияи Windows ва ғайра идома медиҳем, Azure DevOps. Ин дафъа, ки аз тағирёбандаҳои муҳити зист бисёр азоб кашидам, ман қарор додам, ки тамоми таҷрибаро дар як мақола ҷамъ кунам.
Аз он, ки онҳо барои ҳар як муҳити иҷро синтаксиси гуногун доранд, бо набудани қобилияти стандартии интиқоли тағирёбандаҳо аз як марҳила ба марҳилаи дигар.
Ман қайд мекунам, ки намунаҳои асосӣ дар Release Pipelines хоҳанд буд, зеро YAML ҳанӯз ба он ҷо нарасидааст ва ман ба функсияҳои бисёр марҳилаҳо ва артефактҳо ниёз дорам. Чунин ба назар мерасад, ки ин дар қубурҳои муқаррарӣ дастрас шудааст, ки амалан аз ҷиҳати функсия ба онҳо баробар аст. Дар Pipelines YAML, мо ба тасвири матн як абзори графикии хурд бо параметрҳое илова кардем, ки онҳоро танзим кардан мумкин аст. Ин хеле қулай аст; ба шумо лозим нест, ки ҳуҷҷатҳоро барои ҳар як модул гузаред. Аммо ман инро дар мақолаи оянда тавсиф мекунам, аммо ҳоло дар ин ҷо тасвири худи навоварӣ аст.
Нигоҳдорӣ ва истифода
Биёед аз он оғоз кунем, ки мо дар система тағирёбандаҳои пешфарз дорем. Онҳо вобаста ба пайдоишашон бо калимаҳои 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 дар вазифаи мошинҳои мавриди ҳадаф истифода баред, шумо бояд инро тавассути аргумент ба скрипт гузаронед.
Ҳамин қонунҳо ба тағирёбандаҳои шахсии шумо дахл надоранд; дар ин ҷо шумо аллакай барои синтаксис масъул ҳастед. Тағирёбандаҳоро дар ҳар як вазифа ба таври маҳаллӣ муқаррар кардан мумкин аст.
Ё дар саросари ҷаҳон ба мағозаи тағирёбанда ва сипас онҳоро аз мағоза пайваст кунед. Хеле бароҳат.
Ҳамчун бонус, агар тағирёбандаҳо хеле махфӣ бошанд, онҳо метавонанд дар абри Azure дар анборе бо номи Azure Vault нигоҳ дошта шаванд; шумо метавонед Vault-ро ба лоиҳа дар Китобхона пайваст кунед.
Умуман, ҳама чиз бо тағирёбандаҳо равшан аст; дар қубурҳо онҳо ҳоло ҳам барои ҳар як оғозёбӣ дастӣ муқаррар карда мешаванд; дар барориши он чунин функсия вуҷуд надорад. Шумо метавонед бори дигар дар гузоришҳои оғозкунии агент он чизеро, ки шумо ба қубур интиқол медиҳед, бубинед, аммо дар хотир доред, ки онҳо аллакай дар шакли табдилшуда мавҷуданд.
Тағйирёбандаҳои динамикӣ
Шавқовар вақте оғоз мешавад, ки мо мехоҳем дар як марҳила арзише ба даст орем ва онро ба дигараш гузаронем.
Ба мо чунин функсия дода нашудааст. Аммо дастони мо барои дилтангӣ нест ва бо кӯмаки 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 -ро таъин мекунем
Масалан, мо як тавлидкунандаи арзиши тасодуфӣ мекунем. Ба синтаксиси эълони тағирёбанда дар дохили ин марҳила диққат диҳед; ин функсия ҷорӣ карда шудааст.
Дар қадами оянда, мо тағирёбандаро ба скрипт мегузорем, ҳа, ҳа, ин мустақиман имконнопазир аст, он бояд тавассути аргумент бошад.
Скрипт дар зери спойлер
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 истифода мебарад. Дар қадами оянда, бо истифода аз синтаксиси тағирёбандаи система, мо метавонем онро бубинем.
Мисол хеле содда аст, аммо функсия ба ғайр аз пештараи ман барои мо имкониятҳои хубро мекушояд
Дар мақолаи навбатӣ, агар лозим бошад, ман дар бораи қубурҳои YAML сӯҳбат мекунам; вақтҳои охир дар он ҷо навовариҳои ҷолиб хеле зиёданд.
Манбаъ: will.com