Nggunakake variabel ing pipa Azure DevOps

Kita nerusake review babagan alat sing apik kanggo pangembangan Windows lan liyane, Azure DevOps. Wektu iki, amarga ngalami akeh variabel lingkungan, aku mutusake kanggo nyelehake kabeh pengalaman dadi siji artikel.

Miwiti saka kasunyatan sing padha duwe sintaks beda kanggo saben lingkungan eksekusi, pungkasan karo lack saka kemampuan standar kanggo nransfer variabel saka siji tataran saka pipeline liyane.

Aku bakal nggawe leladen sing conto utama bakal ing Release Pipelines, amarga YAML durung teka ana, lan aku kudu fungsi saka akeh orane tumrap sekolah lan akeh artefak. Iki, misale jek, kasedhiya ing Pipelines biasa, sing meh padha karo fungsine. Ing Pipelines YAML, kita nambahake tooltip grafis cilik menyang perwakilan teks kanthi paramèter sing bisa disetel. Iku trep banget; sampeyan ora kudu mbukak dokumentasi kanggo saben modul. Nanging aku bakal njlèntrèhaké iki ing artikel sabanjuré, nanging saiki kene gambar saka inovasi dhewe.

Nggunakake variabel ing pipa Azure DevOps

Panyimpenan lan panggunaan

Ayo dadi miwiti karo kasunyatan sing kita duwe variabel standar ing sistem. Dheweke diwiwiti, gumantung saka asale, kanthi tembung Rilis, Sistem, lsp. Dhaptar lengkap (minangka dadi metu, ora), kasedhiya ing dokumentasi. Kabeh skizofrenia kanthi sintaksis digambarake kanthi conto saka dokumentasi ing ngisor iki. Variabel sing padha duwe telung perwakilan, gumantung ing ngendi kita nyebat.

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)

Yen sampeyan nyetel variabel ing agen sing tugas wis kaleksanan, iku $ (System.AccessToken). Yen sampeyan pengin nggunakake ing skrip powershell ing agen sing padha, bakal dadi $ env: SYSTEM_ACCESSTOKEN. Yen sampeyan, Gusti Allah, pengin nggunakake variabel iki ing sawetara host remot nggunakake PowerShell ing tugas mesin target, sampeyan kudu ngliwati argumen iki menyang skrip nggunakake dhuwitku. Kanthi bash luwih gampang, sampeyan mung bisa mlebu ing njero nggunakake argumen lan sintaks $SYSTEM_ACCESSTOKEN.

Hukum sing padha ora ditrapake kanggo variabel sampeyan dhewe; ing kene sampeyan wis tanggung jawab kanggo sintaks kasebut. Variabel bisa disetel sacara lokal ing saben tugas.

Nggunakake variabel ing pipa Azure DevOps

Utawa sacara global menyang toko variabel, banjur sambungake saka toko. Nyaman banget.

Nggunakake variabel ing pipa Azure DevOps

Minangka bonus, yen variabel banget rahasia, bisa disimpen ing awan Azure ing panyimpenan sing diarani Azure Vault; sampeyan bisa nyambungake Vault menyang proyek ing Perpustakaan.

Nggunakake variabel ing pipa Azure DevOps

Umumé, kabeh wis jelas karo variabel; ing saluran pipa isih bisa disetel kanthi manual kanggo saben peluncuran; ing release ora ana fungsi kasebut. Sampeyan bisa ndeleng apa sing sampeyan transfer menyang pipeline maneh ing log initialization agen, nanging elinga sing wis ana ing wangun diowahi.

Nggunakake variabel ing pipa Azure DevOps

Variabel Dinamis

Fun wiwit nalika kita pengin nampa sawetara nilai ing siji tataran lan pass menyang sabanjuré.

Nggunakake variabel ing pipa Azure DevOps

Kita padha ora kasedhiya karo fungsi kuwi. Nanging tangan kita ora bosen lan kanthi bantuan Google nemokake solusi. Matur nuwun Gusti, Azure DevOps duwe API sing ngidini kita nindakake luwih akeh tinimbang sing digambarake ing antarmuka.

Dadi, kita butuh telpon kanggo nganyari variabel global, sing bakal ditindakake langsung saka pipa. Alamat kasebut dijupuk saka variabel lingkungan, sing padha ora ana tembung ing dokumentasi, kaya sing kasebut sadurunge. Sampeyan bisa nyetel dhewe utawa, apa maneh, hardcode yen padha nutup toko.

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

Kita nyetel nilai kosong saka variabel sing arep kita transfer, nyetel Scope - Release

Nggunakake variabel ing pipa Azure DevOps

Contone, kita nggawe sawetara generator Nilai acak. Elinga sintaks nyatakake variabel ing tahap iki; fungsi iki dikenalake.

Nggunakake variabel ing pipa Azure DevOps

Ing langkah sabanjure, kita ngirim variabel menyang skrip, ya, ya, ora bisa langsung, mesthine liwat argumentasi.

Nggunakake variabel ing pipa Azure DevOps

Skrip ing 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

Utawa

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

Cekakipun, skrip kita njupuk variabel myVar minangka input lan nggunakake API kanggo nyelehake nilai variabel iki menyang stageVar. Ing langkah sabanjure, nggunakake sintaks variabel sistem, kita bisa ndeleng.

Nggunakake variabel ing pipa Azure DevOps

Conto cukup prasaja, nanging fungsi mbukak kesempatan sing apik kanggo kita, saliyane sadurunge artikel, nalika kita bisa nggawe mesin virtual ing tataran pisanan saka testing, nindakake sawetara manipulations luwih karo, lan sawetara podo karo. Lan tahap pungkasan yaiku nyirnakake. Saiki kita mbukak autotests produk saben wektu ing mesin virtual seger. Ngelingi sing padha manggon kanggo bab 10 menit, iku biaya Penny.

Ing artikel sabanjure, yen perlu, aku bakal ngomong babagan saluran pipa YAML; saiki wis ana akeh inovasi sing menarik.

Source: www.habr.com

Add a comment