اسان ونڊوز ۽ وڌيڪ، 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. جيڪڏھن توھان، خدا نه ڪري، ھي متغير استعمال ڪرڻ چاھيو ٿا ڪجھ ريموٽ ھوسٽ تي PowerShell استعمال ڪندي ھدف واري مشين جي ڪم تي، توھان کي ھن کي اسڪرپٽ استعمال ڪندي دليل ذريعي منتقل ڪرڻ جي ضرورت آھي.
ساڳيا قانون توهان جي پنهنجي متغيرن تي لاڳو نٿا ٿين؛ هتي توهان اڳ ۾ ئي نحو جا ذميوار آهيو. متغير هر ڪم ۾ مقامي طور تي مقرر ڪري سگهجي ٿو.
يا عالمي طور تي variable اسٽور ڏانهن، ۽ پوء انھن کي اسٽور مان ڳنڍيو. بلڪل آرام سان.
بونس جي طور تي، جيڪڏهن متغير تمام ڳجها آهن، اهي Azure بادل ۾ اسٽوريج ۾ محفوظ ڪري سگهجن ٿيون Azure Vault؛ توهان لائبريري ۾ والٽ کي پروجيڪٽ سان ڳنڍي سگهو ٿا.
عام طور تي، هر شي واضح آهي متغير سان؛ پائپ لائنن ۾ اهي اڃا تائين هر لانچ لاء دستي طور تي سيٽ ڪري سگھجن ٿيون؛ ڇڏڻ ۾ ڪا به اهڙي ڪارڪردگي ناهي. توهان ڏسي سگهو ٿا ته ڇا توهان پائپ لائن ڏانهن منتقل ڪري رهيا آهيو ايجنٽ جي شروعاتي لاگن ۾، پر ذهن ۾ رکو ته اهي اڳ ۾ ئي تبديل ٿيل فارم ۾ موجود آهن.
متحرڪ متغير
مزو تڏهن شروع ٿئي ٿو جڏهن اسان چاهيون ٿا هڪ اسٽيج ۾ ڪجهه قدر حاصل ڪرڻ ۽ ان کي ٻئي مرحلي ۾ منتقل ڪرڻ.
اسان کي اهڙي ڪارڪردگي سان مهيا نه ڪيو ويو. پر اسان جا هٿ بوريت لاءِ نه آهن ۽ گوگل جي مدد سان هڪ حل مليو. خدا جو شڪر آهي، Azure DevOps وٽ هڪ API آهي جيڪا اسان کي انٽرفيس ۾ ڏيکاريل هئي ان کان ٿورو وڌيڪ ڪم ڪرڻ جي اجازت ڏئي ٿي.
تنهن ڪري، اسان کي گلوبل متغير کي تازه ڪاري ڪرڻ لاء هڪ ڪال جي ضرورت پوندي، جيڪو اسان سڌو سنئون پائپ لائن جي اندر ڪنداسين. پتو ماحولياتي متغيرن مان ورتو ويو آهي، اهي ساڳيون آهن جن جي باري ۾ دستاويز ۾ هڪ لفظ نه آهي، جيئن اڳ ذڪر ڪيو ويو آهي. توھان انھن کي پاڻ سيٽ ڪري سگھو ٿا يا، وڌيڪ ڇا آھي، انھن کي سخت ڪوڊ ڪريو جيڪڏھن اھي دڪان بند ڪن.
$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID) )
اسان متغير جو خالي قدر مقرر ڪيو جيڪو اسان منتقل ڪرڻ چاهيون ٿا، اسڪوپ - رليز مقرر ڪريو
مثال طور، اسان ڪجهه بي ترتيب قدر جنريٽر ٺاهيندا آهيون. هن اسٽيج جي اندر متغير جي اعلان جي نحو تي ڌيان ڏيو؛ هي ڪارڪردگي متعارف ڪرايو ويو.
ايندڙ قدم ۾، اسان variable کي اسڪرپٽ ڏانهن منتقل ڪريون ٿا، ها، ها، اهو سڌو سنئون ممڪن ناهي، اهو هڪ دليل جي ذريعي هجڻ گهرجي.
اسپيلر جي هيٺان اسڪرپٽ
پاور سيڪيورٽي
#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