Біз Windows және т.б. үшін әзірлеуге арналған тамаша құралды шолуды жалғастырамыз, Azure DevOps. Бұл жолы қоршаған ортаның айнымалыларынан көп зардап шеккендіктен, мен барлық тәжірибені бір мақалаға салуды шештім.
Әрбір орындау ортасы үшін олардың әртүрлі синтаксисі бар екендігінен бастап, айнымалы мәндерді құбырдың бір сатысынан екіншісіне тасымалдаудың стандартты мүмкіндігінің болмауымен аяқталады.
Мен негізгі мысалдар шығарылым құбырларында болатынын ескертемін, өйткені 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 айнымалысын кіріс ретінде қабылдайды және осы айнымалының мәнін stageVar ішіне қою үшін API пайдаланады. Келесі қадамда жүйелік айнымалы синтаксисін пайдалана отырып, біз оны қарай аламыз.
Мысал өте қарапайым, бірақ функционалдылық менің алдыңғыларымнан басқа біз үшін жақсы мүмкіндіктер ашады
Келесі мақалада, егер қажет болса, мен YAML құбырлары туралы айтатын боламын, соңғы уақытта мұнда көптеген қызықты жаңалықтар болды.
Ақпарат көзі: www.habr.com