Garapenerako tresna zoragarri baten berrikuspena jarraitzen dugu Windows eta gehiago, Azure DevOps. Oraingoan, ingurune-aldagaiekin borrokan ibili ondoren, nire esperientzia artikulu bakar batean laburbiltzea erabaki dut.
Exekuzio-ingurune bakoitzerako sintaxi desberdina dutela abiapuntutzat hartuta, kanalizazioko etapa batetik bestera aldagaiak transferitzeko gaitasun estandarrik ezarekin amaituz.
Erreserba bat egingo dut adibide nagusiak Release Pipelines-en egongo direla, YAML oraindik ez delako iritsi, eta etapa askoren eta artefaktu askoren funtzionaltasuna behar dudalako. Badirudi hori Pipeline arruntetan eskuragarri egon dela, eta horrek ia funtzionaltasunean berdin du. Pipelines YAML-n, testuaren irudikapenari tresna grafiko txiki bat gehitu diogu ezar daitezkeen parametroekin. Oso erosoa da; ez duzu modulu bakoitzeko dokumentazioa pasatu beharrik. Baina hurrengo artikuluan deskribatuko dut, baina oraingoz hona hemen berrikuntzaren beraren argazkia.

Biltegiratzea eta erabiltzea
Has gaitezen sisteman aldagai lehenetsiak ditugula. Jatorriaren arabera hasten dira Askatu, Sistema, etab. Zerrenda osoa (ikusten denez, ez) helbidean dago eskuragarri . Sintaxia duten eskizofrenia guztiak beheko dokumentazioko adibide batekin azaltzen dira. Aldagai berak hiru irudikapen ditu, deitzen diogun lekuaren arabera.
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)Ataza exekutatzen den agentean aldagai bat ezartzen baduzu, $(System.AccessToken) da. Agente berean powershell script baten barruan erabili nahi baduzu, $env:SYSTEM_ACCESSTOKEN izango da dagoeneko. Jainkoak ez dezala, aldagai hau urruneko ostalariren batean erabili nahi baduzu PowerShell xede-makinen ataza erabiliz, hau argumentu baten bidez pasa behar duzu script-era erabiliz. . Bash-ekin sinpleagoa da, barrura pasa dezakezu $SYSTEM_ACCESSTOKEN argumentua eta sintaxia erabiliz.
Lege berdinak ez dira zure aldagaietan aplikatzen; hemen dagoeneko zu zara sintaxiaren arduraduna. Aldagaiak lokalean ezar daitezke zeregin bakoitzean.

Edo globalki aldagai dendara, eta gero lotu dendatik. Oso eroso.

Hobari gisa, aldagaiak oso sekretuak badira, Azure hodeian gorde daitezke Azure Vault izeneko biltegiratze batean; Vault liburutegiko proiektuarekin lotu dezakezu.

Orokorrean, dena argi dago aldagaiekin; kanalizazioetan oraindik eskuz ezar daitezke abiarazte bakoitzean; bertsioan ez dago funtzionaltasun hori. Agentearen hasierako erregistroetan berriro ikus dezakezu kanalera transferitzen ari zarena, baina kontuan izan dagoeneko hor daudela bihurtutako moduan.

Aldagai dinamikoak
Dibertsioa etapa batean balioren bat jaso eta hurrengora pasa nahi dugunean hasten da.

Ez ziguten horrelako funtzionalitaterik eman. Baina gure eskuak ez dira aspertzeko eta Googleren laguntzarekin irtenbide bat aurkitu zen. Jainkoari eskerrak, Azure DevOps-ek interfazean azaltzen zena baino apur bat gehiago egiteko aukera ematen duen API bat dauka.
Beraz, aldagai globalak eguneratzeko dei bat beharko dugu, zuzenean kanalizaziotik egingo duguna. Helbidea ingurune-aldagaietatik hartua da, dokumentazioan hitzik ez dagoen berberetatik, lehen esan bezala. Zuk zeuk ezar ditzakezu edo, are gehiago, gogor kodetu ditzakezu denda ixten badute.
$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID) )Transferitu nahi dugun aldagaiaren balio hutsa ezarri dugu, Scope - Release ezarri

Adibidez, ausazko balio-sorgailu batzuk egiten ditugu. Erreparatu etapa honen barruan aldagai bat deklaratzeko sintaxiari; funtzionalitate hau sartu zen.

Hurrengo urratsean, aldagaia gidoiari pasatzen diogu, bai, bai, zuzenean ez da posible, argumentu baten bidez izan behar du.

Gidoia spoiler azpian
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))
#endregionedo
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_URLLaburbilduz, gure script-ak myVar aldagaia hartzen du sarrera gisa eta APIa erabiltzen du aldagai honen balioa stageVar-en jartzeko. Hurrengo urratsean, sistema aldagaiaren sintaxia erabiliz, begiratu dezakegu.

Adibidea nahiko sinplea da, baina funtzionaltasunak aukera onak zabaltzen dizkigu, nire aurrekoaz gain , probaren lehen fasean makina birtual bat sor dezakegunean, harekin manipulazio gehiago egin, eta paraleloan hainbat. Eta azken fasea suntsitzea da. Orain produktuaren autotestak egiten ditugu makina birtual berrietan. 10 minutu inguru bizi direla kontuan hartuta, zentimo bat kostatzen da.
Hurrengo artikuluan, behar izanez gero, YAML kanalei buruz hitz egingo dut; azkenaldian berrikuntza interesgarri asko egon dira bertan.
Iturria: www.habr.com
