Биз Windows жана башкалар үчүн иштеп чыгуу үчүн сонун куралды карап чыгууну улантып жатабыз, Azure DevOps. Бул жолу, айлана-чөйрө өзгөрмөлөр менен көп азап тартып, мен бир макалада бардык тажрыйба топтоону чечтим.
Алар ар бир аткаруу чөйрөсү үчүн ар кандай синтаксиске ээ экендигинен баштап, өзгөрмөлөрдү куурдун бир баскычынан экинчисине өткөрүү үчүн стандарттык жөндөмдүн жоктугу менен аяктайт.
Мен негизги мисалдар Release Pipelines боюнча болот деп эскертем, анткени 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
же
Баш
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 куурлары жөнүндө сөз кылам, акыркы убакта ал жерде абдан көп кызыктуу инновациялар болду.
Source: www.habr.com