Defnyddio newidynnau mewn piblinellau Azure DevOps

Rydym yn parhau Γ’'n hadolygiad o offeryn gwych ar gyfer datblygu ar gyfer Windows a mwy, Azure DevOps. Y tro hwn, ar Γ΄l dioddef llawer gyda newidynnau amgylchedd, penderfynais roi'r holl brofiad mewn un erthygl.

Gan ddechrau o'r ffaith bod ganddynt gystrawen wahanol ar gyfer pob amgylchedd gweithredu, gan orffen gyda diffyg gallu safonol i drosglwyddo newidynnau o un cam o'r biblinell i'r llall.

Gwnaf amheuaeth y bydd y prif enghreifftiau ar Piblinellau Rhyddhau, oherwydd nid yw YAML wedi cyrraedd yno eto, ac mae arnaf angen ymarferoldeb sawl cam a llawer o arteffactau. Mae hyn, mae'n ymddangos, wedi dod ar gael mewn Piblinellau rheolaidd, sydd bron yn gyfartal Γ’ nhw o ran ymarferoldeb. Yn Pipelines YAML, fe wnaethom ychwanegu cyngor graffigol bach at y cynrychioliad testun gyda pharamedrau y gellir eu gosod. Mae'n gyfleus iawn; nid oes rhaid i chi fynd trwy'r dogfennau ar gyfer pob modiwl. Ond byddaf yn disgrifio hyn yn yr erthygl nesaf, ond am y tro dyma lun o'r arloesedd ei hun.

Defnyddio newidynnau mewn piblinellau Azure DevOps

Storio a defnyddio

Gadewch i ni ddechrau gyda'r ffaith bod gennym ni newidynnau rhagosodedig yn y system. Maent yn dechrau, yn dibynnu ar eu tarddiad, gyda'r geiriau Rhyddhau, System, ac ati. Mae'r rhestr lawn (fel mae'n troi allan, nid), ar gael yn dogfennaeth. Mae enghraifft o'r ddogfennaeth isod yn dangos pob sgitsoffrenia Γ’ chystrawen. Mae gan yr un newidyn dri chynrychiolaeth, yn dibynnu ar ble rydyn ni'n ei alw.

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)

Os byddwch yn gosod newidyn ar yr asiant y cyflawnir y dasg arno, $(System.AccessToken) ydyw. Os ydych chi am ei ddefnyddio y tu mewn i sgript cragen pwerau ar yr un asiant, bydd yn $env:SYSTEM_ACCESSTOKEN yn barod. Os ydych chi, mae Duw yn gwahardd, eisiau defnyddio'r newidyn hwn ar ryw westeiwr anghysbell gan ddefnyddio'r dasg PowerShell ar beiriannau targed, mae angen i chi drosglwyddo hyn trwy ddadl i'r sgript gan ddefnyddio fy arian. Gyda bash mae'n symlach, gallwch chi ei basio y tu mewn gan ddefnyddio'r ddadl a'r gystrawen $SYSTEM_ACCESSTOKEN.

Nid yw'r un deddfau yn berthnasol i'ch newidynnau eich hun; yma rydych chi eisoes yn gyfrifol am y gystrawen. Gellir gosod newidynnau yn lleol ym mhob tasg.

Defnyddio newidynnau mewn piblinellau Azure DevOps

Neu yn fyd-eang i'r storfa newidiol, ac yna eu cysylltu o'r storfa. Yn gyfforddus iawn.

Defnyddio newidynnau mewn piblinellau Azure DevOps

Fel bonws, os yw'r newidynnau'n gyfrinachol iawn, gellir eu storio yn y cwmwl Azure mewn storfa o'r enw Azure Vault; gallwch gysylltu Vault Γ’'r prosiect yn y Llyfrgell.

Defnyddio newidynnau mewn piblinellau Azure DevOps

Yn gyffredinol, mae popeth yn glir gyda newidynnau; ar y gweill gellir eu gosod Γ’ llaw ar gyfer pob lansiad; wrth ryddhau nid oes swyddogaeth o'r fath. Gallwch weld yr hyn yr ydych yn ei drosglwyddo i'r biblinell eto yn y logiau cychwyn asiant, ond cofiwch eu bod eisoes yno ar ffurf wedi'i drosi.

Defnyddio newidynnau mewn piblinellau Azure DevOps

Newidynnau Dynamig

Mae'r hwyl yn dechrau pan fyddwn am dderbyn rhywfaint o werth mewn un cam a'i drosglwyddo i'r nesaf.

Defnyddio newidynnau mewn piblinellau Azure DevOps

Ni ddarparwyd swyddogaeth o'r fath i ni. Ond nid yw ein dwylo ar gyfer diflastod a gyda chymorth Google daethpwyd o hyd i ateb. Diolch i Dduw, mae gan Azure DevOps API sy'n ein galluogi i wneud ychydig yn fwy na'r hyn a ddarluniwyd yn y rhyngwyneb.

Felly, bydd angen galwad arnom i ddiweddaru newidynnau byd-eang, a byddwn yn ei wneud yn uniongyrchol o'r tu mewn i'r biblinell. Cymerir y cyfeiriad o newidynnau amgylchedd, yr un rhai nad oes gair amdanynt yn y ddogfennaeth, fel y crybwyllwyd yn gynharach. Gallwch chi eu gosod nhw eich hun neu, yn fwy na hynny, eu codio caled os ydyn nhw'n cau'r siop.

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

Rydym yn gosod gwerth gwag y newidyn yr ydym am ei drosglwyddo, gosod Cwmpas - Rhyddhau

Defnyddio newidynnau mewn piblinellau Azure DevOps

Er enghraifft, rydym yn gwneud rhai generadur gwerth ar hap. Rhowch sylw i'r gystrawen o ddatgan newidyn y tu mewn i'r cam hwn; cyflwynwyd y swyddogaeth hon.

Defnyddio newidynnau mewn piblinellau Azure DevOps

Yn y cam nesaf, rydyn ni'n trosglwyddo'r newidyn i'r sgript, ie, ie, nid yw'n bosibl yn uniongyrchol, rhaid iddo fod trwy ddadl.

Defnyddio newidynnau mewn piblinellau Azure DevOps

Sgript o dan spoiler

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

Neu

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

Yn gryno, mae ein sgript yn cymryd y newidyn myVar fel mewnbwn ac yn defnyddio'r API i roi gwerth y newidyn hwn yn stageVar. Yn y cam nesaf, gan ddefnyddio cystrawen newidiol system, gallwn edrych arno.

Defnyddio newidynnau mewn piblinellau Azure DevOps

Mae'r enghraifft yn eithaf syml, ond mae'r swyddogaeth yn agor cyfleoedd da i ni, yn ychwanegol at fy un blaenorol erthygl, pan allwn greu peiriant rhithwir yn y cam cyntaf o brofi, perfformio rhai manipulations pellach ag ef, a sawl ochr yn ochr. A'r cam olaf yw ei ddinistrio. Nawr rydyn ni'n cynnal profion awtomatig o'r cynnyrch bob tro ar beiriannau rhithwir ffres. O ystyried eu bod yn byw am tua 10 munud, mae'n costio ceiniog.

Yn yr erthygl nesaf, os oes angen, byddaf yn siarad am biblinellau YAML; bu cryn dipyn o ddatblygiadau arloesol yno yn ddiweddar.

Ffynhonnell: hab.com

Ychwanegu sylw