Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

اسان ونڊوز ۽ وڌيڪ، Azure DevOps لاءِ ترقي لاءِ هڪ شاندار اوزار جو جائزو جاري رکون ٿا. هن ڀيري، ماحوليات جي متغيرن سان تمام گهڻو متاثر ٿيڻ بعد، مون فيصلو ڪيو ته سڀ تجربو هڪ مضمون ۾ رکان.

انهي حقيقت کان شروع ٿئي ٿو ته انهن وٽ هر عمل جي ماحول لاءِ مختلف نحو آهي، پائپ لائن جي هڪ اسٽيج کان ٻئي مرحلي ۾ متغيرن کي منتقل ڪرڻ جي معياري صلاحيت جي کوٽ سان ختم ٿئي ٿو.

مان هڪ رزرويشن ڪندس ته مکيه مثال ريليز پائپ لائنز تي هوندا، ڇاڪاڻ ته YAML اڃا تائين حاصل نه ڪيو آهي، ۽ مون کي ڪيترن ئي مرحلن ۽ ڪيترن ئي نموني جي ڪارڪردگي جي ضرورت آهي. اهو لڳي ٿو، باقاعده پائپ لائنز ۾ دستياب ٿي چڪو آهي، جيڪو عملي طور تي انهن جي ڪارڪردگي ۾ برابر آهي. پائپ لائنز YAML ۾، اسان ھڪڙو ننڍڙو گرافڪ ٽول ٽائپ شامل ڪيو آھي متن جي نمائندگي لاءِ پيٽرول سان جيڪي سيٽ ڪري سگھجن ٿيون. اهو تمام آسان آهي؛ توهان کي هر ماڊل لاءِ دستاويز ذريعي وڃڻ جي ضرورت ناهي. پر مان ان کي ايندڙ مضمون ۾ بيان ڪندس، پر ھاڻي ھتي ھن جدت جي تصوير آھي.

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

اسٽوريج ۽ استعمال

اچو ته حقيقت سان شروع ڪريون ته اسان وٽ سسٽم ۾ ڊفالٽ متغير آهن. اهي شروع ٿين ٿا، انهن جي اصل تي منحصر ڪري، لفظن سان جاري، سسٽم، وغيره. مڪمل فهرست (جيئن ته اهو نڪتو، نه)، تي دستياب آهي دستاويز. نحو سان گڏ سڀئي schizophrenia هيٺ ڏنل دستاويز مان هڪ مثال سان بيان ڪيو ويو آهي. ساڳئي متغير کي ٽي نمائندگيون آهن، ان تي منحصر آهي جتي اسان ان کي سڏيندا آهيون.

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 استعمال ڪندي ھدف واري مشين جي ڪم تي، توھان کي ھن کي اسڪرپٽ استعمال ڪندي دليل ذريعي منتقل ڪرڻ جي ضرورت آھي. پرم. بش سان اهو آسان آهي، توهان صرف دليل ۽ نحو استعمال ڪندي ان کي اندر داخل ڪري سگهو ٿا $SYSTEM_ACCESTOKEN.

ساڳيا قانون توهان جي پنهنجي متغيرن تي لاڳو نٿا ٿين؛ هتي توهان اڳ ۾ ئي نحو جا ذميوار آهيو. متغير هر ڪم ۾ مقامي طور تي مقرر ڪري سگهجي ٿو.

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

يا عالمي طور تي variable اسٽور ڏانهن، ۽ پوء انھن کي اسٽور مان ڳنڍيو. بلڪل آرام سان.

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

بونس جي طور تي، جيڪڏهن متغير تمام ڳجها آهن، اهي Azure بادل ۾ اسٽوريج ۾ محفوظ ڪري سگهجن ٿيون Azure Vault؛ توهان لائبريري ۾ والٽ کي پروجيڪٽ سان ڳنڍي سگهو ٿا.

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

عام طور تي، هر شي واضح آهي متغير سان؛ پائپ لائنن ۾ اهي اڃا تائين هر لانچ لاء دستي طور تي سيٽ ڪري سگھجن ٿيون؛ ڇڏڻ ۾ ڪا به اهڙي ڪارڪردگي ناهي. توهان ڏسي سگهو ٿا ته ڇا توهان پائپ لائن ڏانهن منتقل ڪري رهيا آهيو ايجنٽ جي شروعاتي لاگن ۾، پر ذهن ۾ رکو ته اهي اڳ ۾ ئي تبديل ٿيل فارم ۾ موجود آهن.

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

متحرڪ متغير

مزو تڏهن شروع ٿئي ٿو جڏهن اسان چاهيون ٿا هڪ اسٽيج ۾ ڪجهه قدر حاصل ڪرڻ ۽ ان کي ٻئي مرحلي ۾ منتقل ڪرڻ.

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

اسان کي اهڙي ڪارڪردگي سان مهيا نه ڪيو ويو. پر اسان جا هٿ بوريت لاءِ نه آهن ۽ گوگل جي مدد سان هڪ حل مليو. خدا جو شڪر آهي، Azure DevOps وٽ هڪ API آهي جيڪا اسان کي انٽرفيس ۾ ڏيکاريل هئي ان کان ٿورو وڌيڪ ڪم ڪرڻ جي اجازت ڏئي ٿي.

تنهن ڪري، اسان کي گلوبل متغير کي تازه ڪاري ڪرڻ لاء هڪ ڪال جي ضرورت پوندي، جيڪو اسان سڌو سنئون پائپ لائن جي اندر ڪنداسين. پتو ماحولياتي متغيرن مان ورتو ويو آهي، اهي ساڳيون آهن جن جي باري ۾ دستاويز ۾ هڪ لفظ نه آهي، جيئن اڳ ذڪر ڪيو ويو آهي. توھان انھن کي پاڻ سيٽ ڪري سگھو ٿا يا، وڌيڪ ڇا آھي، انھن کي سخت ڪوڊ ڪريو جيڪڏھن اھي دڪان بند ڪن.

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

اسان متغير جو خالي قدر مقرر ڪيو جيڪو اسان منتقل ڪرڻ چاهيون ٿا، اسڪوپ - رليز مقرر ڪريو

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

مثال طور، اسان ڪجهه بي ترتيب قدر جنريٽر ٺاهيندا آهيون. هن اسٽيج جي اندر متغير جي اعلان جي نحو تي ڌيان ڏيو؛ هي ڪارڪردگي متعارف ڪرايو ويو.

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

ايندڙ قدم ۾، اسان variable کي اسڪرپٽ ڏانهن منتقل ڪريون ٿا، ها، ها، اهو سڌو سنئون ممڪن ناهي، اهو هڪ دليل جي ذريعي هجڻ گهرجي.

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

اسپيلر جي هيٺان اسڪرپٽ

پاور سيڪيورٽي

#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 استعمال ڪري ٿي ھن متغير جي قيمت کي اسٽيج وير ۾ رکڻ لاءِ. ايندڙ قدم ۾، سسٽم متغير نحو استعمال ڪندي، اسان ان کي ڏسي سگھون ٿا.

Azure DevOps پائپ لائنز ۾ متغير استعمال ڪندي

مثال بلڪل سادو آهي، پر ڪارڪردگي اسان لاءِ سٺا موقعا کوليندي آهي، منهنجي پوئين کان علاوه مضمون، جڏهن اسان جاچ جي پهرين مرحلي ۾ هڪ ورچوئل مشين ٺاهي سگهون ٿا، ان سان گڏ ڪجهه وڌيڪ ڦيرڦار، ۽ متوازي ۾ ڪيترائي. ۽ آخري مرحلو ان کي تباهه ڪرڻ آهي. ھاڻي اسان ھلائيندا آھيون پراڊڪٽ جا آٽو ٽيسٽ ھر دفعي تازي ورچوئل مشينن تي. انهي ڳالهه تي غور ڪندي ته اهي تقريبا 10 منٽن تائين رهن ٿا، اهو هڪ پئسو خرچ ڪري ٿو.

ايندڙ مضمون ۾، جيڪڏهن ضروري هجي ته، آئون YAML پائپ لائنز بابت ڳالهائيندس؛ اتي تازو ئي ڪافي دلچسپ جدتون موجود آهن.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو