Korištenje varijabli u Azure DevOps cjevovodima

Nastavljamo naš pregled divnog alata za razvoj za Windows i više, Azure DevOps. Ovaj put, pošto sam mnogo patio sa varijablama okruženja, odlučio sam da sve iskustvo stavim u jedan članak.

Počevši od činjenice da imaju različitu sintaksu za svako okruženje izvršavanja, završavajući nedostatkom standardne mogućnosti prijenosa varijabli iz jedne faze cjevovoda u drugu.

Rezervirat ću da će glavni primjeri biti na Release Pipelines-u, jer YAML još nije stigao, a meni je potrebna funkcionalnost mnogih faza i mnogih artefakata. Ovo je, čini se, postalo dostupno u redovnim Pipeline-ima, što im je praktično izjednačeno u funkcionalnosti. U Pipelines YAML, dodali smo mali grafički opis alata u tekstualni prikaz sa parametrima koji se mogu podesiti. Vrlo je zgodno; ne morate prolaziti kroz dokumentaciju za svaki modul. Ali to ću opisati u sljedećem članku, ali za sada evo slike same inovacije.

Korištenje varijabli u Azure DevOps cjevovodima

Skladištenje i upotreba

Počnimo s činjenicom da imamo zadane varijable u sistemu. Počinju, ovisno o porijeklu, riječima Izdanje, Sistem itd. Kompletna lista (kako se ispostavilo, nije) dostupna je na dokumentaciju. Sva shizofrenija sa sintaksom je ilustrovana primjerom iz dokumentacije ispod. Ista varijabla ima tri reprezentacije, ovisno o tome gdje je zovemo.

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)

Ako postavite varijablu na agentu na kojem se zadatak izvršava, to je $(System.AccessToken). Ako želite da ga koristite unutar powershell skripte na istom agentu, to će već biti $env:SYSTEM_ACCESSTOKEN. Ako, ne daj Bože, želite da koristite ovu varijablu na nekom udaljenom hostu koristeći zadatak PowerShell na ciljnim mašinama, morate ovo proslediti kroz argument u skriptu koristeći moj novac. Sa bash-om je jednostavnije, možete ga jednostavno proslijediti unutra koristeći argument i sintaksu $SYSTEM_ACCESSTOKEN.

Isti zakoni se ne primjenjuju na vaše vlastite varijable; ovdje ste već odgovorni za sintaksu. Varijable se mogu postaviti lokalno u svakom zadatku.

Korištenje varijabli u Azure DevOps cjevovodima

Ili globalno u spremište varijabli, a zatim ih povežite iz trgovine. Vrlo udobno.

Korištenje varijabli u Azure DevOps cjevovodima

Kao bonus, ako su varijable vrlo tajne, mogu se pohraniti u Azure oblak u skladištu pod nazivom Azure Vault; možete povezati Vault sa projektom u biblioteci.

Korištenje varijabli u Azure DevOps cjevovodima

Općenito, sve je jasno s varijablama; u cjevovodima se još uvijek mogu ručno postaviti za svako pokretanje; u izdanju nema takve funkcionalnosti. Možete ponovo vidjeti šta prenosite u cjevovod u dnevnikima inicijalizacije agenta, ali imajte na umu da su oni već tamo u konvertovanom obliku.

Korištenje varijabli u Azure DevOps cjevovodima

Dinamičke varijable

Zabava počinje kada želimo da dobijemo neku vrednost u jednoj fazi i da je prenesemo na sledeću.

Korištenje varijabli u Azure DevOps cjevovodima

Takva funkcionalnost nam nije pružena. Ali naše ruke nisu za dosadu i uz pomoć Gugla je pronađeno rješenje. Hvala Bogu, Azure DevOps ima API koji nam omogućava da uradimo nešto više od onoga što je prikazano u interfejsu.

Dakle, biće nam potreban poziv da ažuriramo globalne varijable, što ćemo uraditi direktno iz cevovoda. Adresa je preuzeta iz varijabli okruženja, istih onih o kojima nema ni riječi u dokumentaciji, kao što je ranije spomenuto. Možete ih sami postaviti ili, štoviše, hardkodirati ako zatvore radnju.

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

Postavljamo praznu vrijednost varijable koju želimo prenijeti, postavljamo Scope - Release

Korištenje varijabli u Azure DevOps cjevovodima

Na primjer, napravimo neki generator slučajnih vrijednosti. Obratite pažnju na sintaksu deklarisanja varijable unutar ove faze; ova funkcionalnost je uvedena.

Korištenje varijabli u Azure DevOps cjevovodima

U sljedećem koraku, prosljeđujemo varijablu skripti, da, da, nije moguće direktno, mora biti kroz argument.

Korištenje varijabli u Azure DevOps cjevovodima

Skripta ispod spojlera

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

Or

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

Ukratko, naša skripta uzima promenljivu myVar kao ulaz i koristi API da stavi vrednost ove varijable u stageVar. U sljedećem koraku, koristeći sintaksu sistemske varijable, možemo je pogledati.

Korištenje varijabli u Azure DevOps cjevovodima

Primjer je prilično jednostavan, ali funkcionalnost nam otvara dobre mogućnosti, pored mojih prethodnih članak, kada možemo da kreiramo virtuelnu mašinu u prvoj fazi testiranja, izvršimo neke dalje manipulacije sa njom, i nekoliko paralelno. A poslednja faza je da se uništi. Sada pokrećemo autotestiranje proizvoda svaki put na svježim virtuelnim mašinama. S obzirom na to da žive oko 10 minuta, košta peni.

U sljedećem članku, ako bude potrebno, govorit ću o YAML cjevovodima; tamo je u posljednje vrijeme bilo dosta zanimljivih inovacija.

izvor: www.habr.com

Dodajte komentar