වින්ඩෝස් සහ තවත් බොහෝ දේ සඳහා සංවර්ධනය සඳහා වූ අපූරු මෙවලමක් පිළිබඳ අපගේ සමාලෝචනය අපි දිගටම කරගෙන යන්නෙමු, Azure DevOps. පාරිසරික විචල්යයන් සමඟ බොහෝ දුක් විඳ ඇති මම මෙවර සියලු අත්දැකීම් එක ලිපියකට දැමීමට තීරණය කළෙමි.
එක් එක් ක්රියාත්මක කිරීමේ පරිසරය සඳහා ඔවුන්ට විවිධ වාක්ය ඛණ්ඩ ඇති බැවින්, නල මාර්ගයේ එක් අදියරක සිට තවත් විචල්යයන් මාරු කිරීමේ සම්මත හැකියාවක් නොමැතිකමෙන් අවසන් වේ.
YAML තවමත් එහි පැමිණ නැති නිසාත්, මට බොහෝ අදියරවල සහ බොහෝ කෞතුක වස්තු වල ක්රියාකාරීත්වය අවශ්ය නිසාත්, ප්රධාන උදාහරණ නිකුත් කිරීමේ නල මාර්ගවල ඇති බවට මම වෙන්කරවා ගන්නෙමි. මෙය සාමාන්ය නල මාර්ග වලින් ලබා ගත හැකි බව පෙනේ, එය ක්රියාකාරීත්වයෙන් ප්රායෝගිකව සමාන වේ. Pipelines 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_ACCESSTOKEN වනු ඇත. ඔබට, දෙවියන් තහනම් කරයි, මෙම විචල්යය යම් දුරස්ථ ධාරකයක භාවිතා කිරීමට අවශ්ය නම්, PowerShell on target machines task භාවිතා කරමින්, ඔබ මෙය භාවිතා කරමින් ස්ක්රිප්ට් වෙත තර්කයක් හරහා යා යුතුය.
ඔබේම විචල්යයන් සඳහා එකම නීති අදාළ නොවේ; මෙහිදී ඔබ දැනටමත් වාක්ය ඛණ්ඩය සඳහා වගකිව යුතුය. එක් එක් කාර්යය සඳහා දේශීය වශයෙන් විචල්ය සැකසිය හැක.
නැතහොත් ගෝලීය වශයෙන් විචල්ය ගබඩාවට, පසුව ඒවා ගබඩාවෙන් සම්බන්ධ කරන්න. ඉතා සුවපහසුයි.
ප්රසාද දීමනාවක් ලෙස, විචල්යයන් ඉතා රහසිගත නම්, ඒවා Azure වලාකුළෙහි Azure Vault නම් ගබඩාවේ ගබඩා කළ හැකිය; ඔබට පුස්තකාලයේ ව්යාපෘතියට 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) )
අපි මාරු කිරීමට අවශ්ය වන විචල්යයේ හිස් අගය සකසන්න, 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
නැතහොත්
බෑෂ්
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 විචල්යය ආදානය ලෙස ගන්නා අතර මෙම විචල්යයේ අගය stageVar වෙත තැබීමට API භාවිතා කරයි. ඊළඟ පියවරේදී, පද්ධති විචල්ය සින්ටැක්ස් භාවිතයෙන්, අපට එය දෙස බැලිය හැකිය.
උදාහරණය තරමක් සරල ය, නමුත් ක්රියාකාරීත්වය මගේ පෙර අවස්ථාවට අමතරව අපට හොඳ අවස්ථා විවෘත කරයි
ඊළඟ ලිපියෙන්, අවශ්ය නම්, මම YAML නල මාර්ග ගැන කතා කරමි; මෑතකදී එහි රසවත් නවෝත්පාදන රාශියක් තිබේ.
මූලාශ්රය: www.habr.com