Azure DevOps куурларында өзгөрмөлөрдү колдонуу

Биз Windows жана башкалар үчүн иштеп чыгуу үчүн сонун куралды карап чыгууну улантып жатабыз, Azure DevOps. Бул жолу, айлана-чөйрө өзгөрмөлөр менен көп азап тартып, мен бир макалада бардык тажрыйба топтоону чечтим.

Алар ар бир аткаруу чөйрөсү үчүн ар кандай синтаксиске ээ экендигинен баштап, өзгөрмөлөрдү куурдун бир баскычынан экинчисине өткөрүү үчүн стандарттык жөндөмдүн жоктугу менен аяктайт.

Мен негизги мисалдар Release Pipelines боюнча болот деп эскертем, анткени 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

же

Баш

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 куурлары жөнүндө сөз кылам, акыркы убакта ал жерде абдан көп кызыктуу инновациялар болду.

Source: www.habr.com

Комментарий кошуу