Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Windows və daha çox üçün inkişaf üçün gözəl alət olan Azure DevOps haqqında nəzərdən keçirməyə davam edirik. Bu dəfə ətraf mühit dəyişənlərindən çox əziyyət çəkərək, bütün təcrübələri bir məqalədə toplamaq qərarına gəldim.

Hər bir icra mühiti üçün fərqli sintaksisə malik olmalarından başlayaraq, dəyişənləri boru kəmərinin bir mərhələsindən digərinə ötürmək üçün standart qabiliyyətin olmaması ilə bitən.

Əsas nümunələrin Release Pipelines-də olacağına dair şərt qoyacağam, çünki YAML hələ oraya çatmayıb və mənə bir çox mərhələlərin və çoxlu artefaktların funksionallığı lazımdır. Görünür, bu, praktiki olaraq funksionallıq baxımından onlara bərabər olan adi Boru Kəmərlərində mövcud olmuşdur. Pipelines YAML-də biz mətn təsvirinə təyin edilə bilən parametrlərlə kiçik bir qrafik alət ipucu əlavə etdik. Bu, çox rahatdır, hər modul üçün sənədlərdən keçmək lazım deyil. Ancaq bunu növbəti məqalədə təsvir edəcəyəm, amma hələlik burada yeniliyin özünün bir şəkli var.

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Saxlama və istifadə

Sistemdə standart dəyişənlərimizin olması ilə başlayaq. Onlar mənşəyindən asılı olaraq Release, System və s. sözləri ilə başlayırlar. Tam siyahı (məlum olduğu kimi, deyil) burada mövcuddur sənədləşdirmə. Sintaksis ilə bütün şizofreniya aşağıdakı sənədlərdən bir nümunə ilə təsvir edilmişdir. Eyni dəyişənin onu harada adlandırdığımızdan asılı olaraq üç təmsili var.

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)

Əgər tapşırığın icra olunduğu agentdə dəyişən təyin etsəniz, o, $(System.AccessToken) olur. Əgər siz onu eyni agentdə powershell skripti daxilində istifadə etmək istəyirsinizsə, o, artıq $env:SYSTEM_ACCESSTOKEN olacaq. Əgər siz, Allah eləməsin, hədəf maşınlarda PowerShell tapşırığından istifadə edərək bəzi uzaq hostda bu dəyişəndən istifadə etmək istəyirsinizsə, bunu istifadə edərək skriptə arqumentdən keçirməlisiniz. mənim pulum. Bash ilə bu daha sadədir, siz sadəcə $SYSTEM_ACCESSTOKEN arqumentindən və sintaksisindən istifadə edərək onu içəri keçirə bilərsiniz.

Eyni qanunlar öz dəyişənlərinizə şamil edilmir; burada siz artıq sintaksisə cavabdehsiniz. Dəyişənlər hər tapşırıqda yerli olaraq təyin edilə bilər.

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Və ya qlobal olaraq dəyişən mağazaya, sonra onları mağazadan əlaqələndirin. Çox rahat.

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Bonus olaraq, əgər dəyişənlər çox məxfidirsə, onlar Azure buludunda Azure Vault adlı yaddaşda saxlanıla bilər; siz Vault-u Kitabxanadakı layihə ilə əlaqələndirə bilərsiniz.

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Ümumiyyətlə, dəyişənlərlə hər şey aydındır; boru kəmərlərində hələ də hər işə salınma üçün əl ilə təyin edilə bilər; buraxılışda belə bir funksionallıq yoxdur. Siz agentin işə salınması qeydlərində yenidən boru kəmərinə nə köçürdüyünüzü görə bilərsiniz, lakin onların artıq çevrilmiş formada olduğunu unutmayın.

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Dinamik Dəyişənlər

Əyləncə, bir mərhələdə müəyyən dəyər almaq və onu digərinə ötürmək istədiyimiz zaman başlayır.

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Bizə belə funksionallıq verilməyib. Ancaq əllərimiz darıxmaq üçün deyil və Google-un köməyi ilə bir həll tapıldı. Allaha şükürlər olsun ki, Azure DevOps bizə interfeysdə təsvir ediləndən bir az daha çox şey etməyə imkan verən API-yə malikdir.

Beləliklə, qlobal dəyişənləri yeniləmək üçün bir zəngə ehtiyacımız olacaq, bunu birbaşa boru kəməri içərisindən edəcəyik. Ünvan, əvvəllər qeyd edildiyi kimi, sənədlərdə heç bir söz olmayan mühit dəyişənlərindən götürülür. Onları özünüz təyin edə bilərsiniz və ya üstəlik, mağazanı bağladıqları təqdirdə onları kodlaşdıra bilərsiniz.

$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID)  )

Köçürmək istədiyimiz dəyişənin boş qiymətini təyin edirik, Scope - Release təyin edirik

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Məsələn, biz təsadüfi dəyər generatoru edirik. Bu mərhələdə dəyişənin elan edilməsi sintaksisinə diqqət yetirin, bu funksionallıq təqdim edildi.

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Növbəti addımda dəyişəni skriptə keçirik, bəli, bəli, bu, birbaşa mümkün deyil, arqument vasitəsilə olmalıdır.

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Spoiler altında skript

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

Və ya

Güclü vurmaq

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

Bir sözlə, skriptimiz myVar dəyişənini giriş kimi qəbul edir və bu dəyişənin dəyərini stageVar-a qoymaq üçün API-dən istifadə edir. Növbəti addımda sistem dəyişənlərinin sintaksisindən istifadə edərək ona baxa bilərik.

Azure DevOps boru kəmərlərində dəyişənlərdən istifadə

Nümunə olduqca sadədir, lakin funksionallıq mənim əvvəlkindən əlavə, bizim üçün yaxşı imkanlar açır məqalə, testin ilk mərhələsində virtual maşın yarada bildiyimiz zaman onunla bir neçə əlavə manipulyasiya həyata keçirin və bir neçə paralel olaraq. Və son mərhələ onu məhv etməkdir. İndi biz hər dəfə təzə virtual maşınlarda məhsulun avtotestlərini həyata keçiririk. Nəzərə alsaq ki, 10 dəqiqəyə yaxın yaşayırlar, bir qəpiyə başa gəlir.

Növbəti məqalədə, lazım gələrsə, YAML boru kəmərləri haqqında danışacağam, son vaxtlar orada kifayət qədər maraqlı yeniliklər var.

Mənbə: www.habr.com

Добавить комментарий