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.
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
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.
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.
Və ya qlobal olaraq dəyişən mağazaya, sonra onları mağazadan əlaqələndirin. Çox rahat.
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.
Ü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.
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.
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
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.
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.
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.
Nümunə olduqca sadədir, lakin funksionallıq mənim əvvəlkindən əlavə, bizim üçün yaxşı imkanlar açır
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