Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Біз Windows және т.б. үшін әзірлеуге арналған тамаша құралды шолуды жалғастырамыз, Azure DevOps. Бұл жолы қоршаған ортаның айнымалыларынан көп зардап шеккендіктен, мен барлық тәжірибені бір мақалаға салуды шештім.

Әрбір орындау ортасы үшін олардың әртүрлі синтаксисі бар екендігінен бастап, айнымалы мәндерді құбырдың бір сатысынан екіншісіне тасымалдаудың стандартты мүмкіндігінің болмауымен аяқталады.

Мен негізгі мысалдар шығарылым құбырларында болатынын ескертемін, өйткені YAML ол жерге әлі жеткен жоқ және маған көптеген кезеңдердің және көптеген артефакттардың функционалдығы қажет. Бұл, меніңше, кәдімгі құбыр желілерінде қол жетімді болды, бұл олардың функционалдығы бойынша іс жүзінде бірдей. Pipelines YAML бағдарламасында біз орнатуға болатын параметрлері бар мәтіндік көрсетілімге шағын графикалық құралдар кеңесін қостық. Бұл өте ыңғайлы, әр модуль үшін құжаттаманы қараудың қажеті жоқ. Бірақ мен мұны келесі мақалада сипаттайтын боламын, бірақ әзірге инновацияның суреті осында.

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Сақтау және пайдалану

Жүйеде әдепкі айнымалылар бар екенінен бастайық. Олар шығу тегіне қарай 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 тапсырмасын пайдаланып кейбір қашықтағы хостта пайдаланғыңыз келсе, оны сценарий арқылы аргумент арқылы беруіңіз керек. парам. Bash көмегімен бұл оңайырақ, оны $SYSTEM_ACCESSTOKEN аргументі мен синтаксисі арқылы ішіне жіберуге болады.

Дәл осындай заңдар өзіңіздің айнымалыларыңызға қолданылмайды; мұнда сіз синтаксис үшін жауаптысыз. Айнымалы мәндерді әрбір тапсырмада жергілікті орнатуға болады.

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Немесе ғаламдық түрде айнымалы дүкенге, содан кейін оларды дүкеннен байланыстырыңыз. Өте ыңғайлы.

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Бонус ретінде, егер айнымалы мәндер өте құпия болса, оларды Azure бұлтында Azure Vault деп аталатын қоймада сақтауға болады; Vault қолданбасын Кітапханадағы жобаға байланыстыруға болады.

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Жалпы алғанда, айнымалылармен бәрі түсінікті; құбырларда оларды әрбір іске қосу үшін қолмен орнатуға болады; шығарылымда мұндай функционалдылық жоқ. Құбырға не тасымалдап жатқаныңызды агентті инициализациялау журналдарында қайтадан көре аласыз, бірақ олардың түрлендірілген пішінде бұрыннан бар екенін есте сақтаңыз.

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Динамикалық айнымалылар

Көңілділік біз бір кезеңде қандай да бір құндылықты алып, оны келесі кезеңге өткізгіміз келгенде басталады.

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Бізге мұндай функция берілмеді. Бірақ біздің қолымыз скучно емес және 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 орнатамыз

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Мысалы, біз кездейсоқ мән генераторын жасаймыз. Осы кезеңде айнымалыны жариялау синтаксисіне назар аударыңыз, бұл функция енгізілді.

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Келесі қадамда айнымалы мәнді сценарийге береміз, иә, иә, бұл тікелей мүмкін емес, ол аргумент арқылы болуы керек.

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Спойлер астындағы сценарий

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 пайдаланады. Келесі қадамда жүйелік айнымалы синтаксисін пайдалана отырып, біз оны қарай аламыз.

Azure DevOps құбырларындағы айнымалы мәндерді пайдалану

Мысал өте қарапайым, бірақ функционалдылық менің алдыңғыларымнан басқа біз үшін жақсы мүмкіндіктер ашады мақалалар, тестілеудің бірінші кезеңінде виртуалды машинаны жасай алатын болсақ, онымен қосымша бірнеше манипуляцияларды орындаңыз және бірнеше параллельді орындаңыз. Ал соңғы кезең - оны жою. Енді біз жаңа виртуалды машиналарда өнімнің автосынауларын орындаймыз. Олардың шамамен 10 минут өмір сүретінін ескерсек, бұл бір тиын тұрады.

Келесі мақалада, егер қажет болса, мен YAML құбырлары туралы айтатын боламын, соңғы уақытта мұнда көптеген қызықты жаңалықтар болды.

Ақпарат көзі: www.habr.com

пікір қалдыру