موږ د وینډوز او نور ډیر څه لپاره د پراختیا لپاره په زړه پورې وسیلې زموږ بیاکتنې ته دوام ورکوو ، Azure DevOps. دا ځل، د چاپیریال متغیراتو سره ډیر زیان سره، ما پریکړه وکړه چې ټولې تجربې په یوه مقاله کې واچوم.
د دې حقیقت څخه پیل کول چې دوی د هر اجرا کولو چاپیریال لپاره مختلف ترکیب لري ، د پایپ لاین له یوې مرحلې څخه بل ته د متغیرونو لیږدولو لپاره د معیاري وړتیا نشتوالي سره پای ته رسیږي.
زه به یو ریزرویشن وکړم چې اصلي مثالونه به د ریلیز پایپ لاینونو کې وي، ځکه چې YAML لا تر اوسه ندي ترلاسه شوي، او زه د ډیری مرحلو او ډیری آثارو فعالیت ته اړتیا لرم. دا، داسې ښکاري، په منظمو پایپ لاینونو کې شتون لري، کوم چې په عملي توګه دوی په فعالیت کې مساوي کوي. په پایپ لاین YAML کې، موږ د متن نمایندګۍ ته د پیرامیټونو سره یو کوچنی ګرافیکي وسیله اضافه کړه چې ټاکل کیدی شي. دا خورا اسانه دی؛ تاسو اړتیا نلرئ د هر ماډل لپاره اسنادو ته لاړشئ. مګر زه به دا په راتلونکې مقاله کې تشریح کړم، مګر د اوس لپاره دلته پخپله د نوښت انځور دی.
زیرمه او کارول
راځئ چې د دې حقیقت سره پیل وکړو چې موږ په سیسټم کې ډیفالټ متغیرونه لرو. دوی د دوی په اصل پورې اړه لري، د ریلیز، سیسټم، او نورو کلمو سره پیل کوي. بشپړ لیست (لکه څنګه چې دا وګرځي، نه)، شتون لري
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) دی. که تاسو غواړئ دا په ورته اجنټ کې د پاورشیل سکریپټ دننه وکاروئ ، نو دا به دمخه $env:SYSTEM_ACCESTOKEN وي. که تاسو ، خدای مه کړه ، غواړئ دا متغیر په ځینې لیرې کوربه کې د پاور شیل په کارولو سره د هدف ماشینونو دندې کې وکاروئ ، نو تاسو اړتیا لرئ دا د سکریپټ په کارولو سره د دلیل له لارې انتقال کړئ.
ورته قوانین ستاسو په خپل متغیرونو کې نه پلي کیږي؛ دلته تاسو دمخه د نحو لپاره مسؤل یاست. متغیرات په هره دنده کې په محلي توګه تنظیم کیدی شي.
یا په نړیواله کچه متغیر پلورنځي ته ، او بیا یې له پلورنځي څخه لینک کړئ. په ډیره آرامۍ سره.
د بونس په توګه، که متغیرات خورا پټ وي، دوی د Azure Vault په نوم ذخیره کې په Azure بادل کې زیرمه کیدی شي؛ تاسو کولی شئ والټ په کتابتون کې پروژې سره وصل کړئ.
په عموم کې ، هرڅه د متغیرونو سره روښانه دي؛ په پایپ لاینونو کې دوی لاهم د هر لانچ لپاره په لاسي ډول تنظیم کیدی شي؛ په خوشې کیدو کې داسې هیڅ فعالیت شتون نلري. تاسو کولی شئ هغه څه وګورئ چې تاسو پایپ لاین ته بیا د ایجنټ ابتکار لاګونو کې لیږدئ ، مګر په یاد ولرئ چې دوی دمخه په بدل شوي شکل کې شتون لري.
متحرک تغیرات
ساتیري هغه وخت پیل کیږي کله چې موږ غواړو په یوه مرحله کې یو څه ارزښت ترلاسه کړو او بل ته یې انتقال کړو.
موږ ته دا ډول فعالیت نه دی ورکړل شوی. خو زموږ لاسونه د ستړيا لپاره نه دي او د ګوګل په مرسته د حل لاره وموندل شوه. د خدای څخه مننه ، Azure DevOps یو API لري چې موږ ته اجازه راکوي د هغه څه څخه چې په انٹرفیس کې ښودل شوي یو څه ډیر څه وکړو.
نو، موږ به د نړیوال متغیرونو تازه کولو لپاره زنګ ته اړتیا ولرو، کوم چې موږ به مستقیم د پایپ لاین څخه ترسره کړو. پته د چاپیریال متغیرونو څخه اخیستل کیږي، ورته ورته چې په اسنادو کې یې په اړه هیڅ کلمه نشته، لکه څنګه چې مخکې یادونه وشوه. تاسو کولی شئ دوی پخپله تنظیم کړئ یا نور څه دي، دوی هارډ کوډ کړئ که دوی هټۍ وتړي.
$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID) )
موږ د متغیر خالي ارزښت ټاکلی چې موږ یې لیږدول غواړو، د سکوپ - ریلیز تنظیم کړئ
د مثال په توګه، موږ یو څه تصادفي ارزښت جنراتور جوړوو. د دې مرحلې دننه د متغیر اعلان کولو ترکیب ته پام وکړئ؛ دا فعالیت معرفي شو.
په بل ګام کې، موږ متغیر سکریپټ ته انتقالوو، هو، هو، دا په مستقیم ډول ممکنه نه ده، دا باید د دلیل له لارې وي.
سکریپټ د سپیلر لاندې
پاور سیسټم
#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
یا
باش
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 کاروي ترڅو د دې متغیر ارزښت سټیج ویر ته واچوي. په بل ګام کې، د سیسټم متغیر ترکیب په کارولو سره، موږ کولی شو دا وګورو.
مثال خورا ساده دی، مګر فعالیت زموږ لپاره ښه فرصتونه پرانیزي، زما د پخوانیو سربیره
په راتلونکې مقاله کې ، که اړتیا وي ، زه به د YAML پایپ لاینونو په اړه وغږیږم؛ پدې وروستیو کې هلته خورا په زړه پوري نوښتونه شتون لري.
سرچینه: www.habr.com