Kami meneruskan kajian kami tentang alat pembangunan yang hebat di bawah Windows dan banyak lagi, Azure DevOps. Kali ini, selepas bergelut dengan pembolehubah persekitaran, saya memutuskan untuk menyaring pengalaman saya ke dalam satu artikel.
Bermula dari fakta bahawa mereka mempunyai sintaks yang berbeza untuk setiap persekitaran pelaksanaan, berakhir dengan kekurangan keupayaan standard untuk memindahkan pembolehubah dari satu peringkat saluran paip ke peringkat yang lain.
Saya akan membuat tempahan bahawa contoh utama adalah pada Saluran Paip Keluaran, kerana YAML belum sampai ke sana lagi dan saya memerlukan kefungsian banyak peringkat dan banyak artifak. Ini, nampaknya, telah tersedia dalam Talian Paip biasa, yang boleh dikatakan menyamainya dalam fungsi. Dalam Pipelines YAML, kami menambahkan petua alat grafik kecil pada perwakilan teks dengan parameter yang boleh ditetapkan. Ia sangat mudah; anda tidak perlu melalui dokumentasi untuk setiap modul. Tetapi saya akan menerangkan perkara ini dalam artikel seterusnya, tetapi buat masa ini di sini adalah gambar inovasi itu sendiri.

Penyimpanan dan penggunaan
Mari kita mulakan dengan fakta bahawa kita mempunyai pembolehubah lalai dalam sistem. Mereka bermula, bergantung pada asalnya, dengan perkataan Release, System, dsb. Senarai penuh (seperti yang ternyata, tidak), boleh didapati di . Semua skizofrenia dengan sintaks digambarkan dengan contoh daripada dokumentasi di bawah. Pembolehubah yang sama mempunyai tiga perwakilan, bergantung pada tempat kita memanggilnya.
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)Jika anda menetapkan pembolehubah pada ejen yang mana tugas itu dilaksanakan, ia ialah $(System.AccessToken). Jika anda mahu menggunakannya dalam skrip powershell pada ejen yang sama, ia sudah menjadi $env:SYSTEM_ACCESSTOKEN. Jika anda, Tuhan melarang, ingin menggunakan pembolehubah ini pada beberapa hos jauh menggunakan tugas PowerShell pada mesin sasaran, anda perlu menyampaikan ini melalui hujah kepada skrip menggunakan . Dengan bash ia lebih mudah, anda hanya boleh menyampaikannya ke dalam menggunakan hujah dan sintaks $SYSTEM_ACCESSTOKEN.
Undang-undang yang sama tidak digunakan untuk pembolehubah anda sendiri di sini anda sudah bertanggungjawab untuk sintaks. Pembolehubah boleh ditetapkan secara setempat dalam setiap tugas.

Atau secara global ke kedai berubah-ubah, dan kemudian pautkannya dari kedai. Sangat selesa.

Sebagai bonus, jika pembolehubah adalah sangat rahsia, ia boleh disimpan dalam awan Azure dalam storan yang dipanggil Azure Vault anda boleh memautkan Vault ke projek dalam Perpustakaan.

Secara umum, semuanya jelas dengan pembolehubah dalam saluran paip mereka masih boleh ditetapkan secara manual untuk setiap pelancaran dalam keluaran tidak ada fungsi sedemikian. Anda boleh melihat perkara yang anda pindahkan ke saluran paip sekali lagi dalam log permulaan ejen, tetapi perlu diingat bahawa ia sudah ada dalam bentuk ditukar.

Pembolehubah Dinamik
Keseronokan bermula apabila kita ingin menerima beberapa nilai dalam satu peringkat dan meneruskannya ke peringkat seterusnya.

Kami tidak dibekalkan dengan fungsi sedemikian. Tetapi tangan kami bukan untuk kebosanan dan dengan bantuan Google penyelesaian ditemui. Syukur kepada Tuhan, Azure DevOps mempunyai API yang membolehkan kami melakukan lebih sedikit daripada apa yang digambarkan dalam antara muka.
Jadi, kami memerlukan panggilan untuk mengemas kini pembolehubah global, yang akan kami lakukan terus dari dalam talian paip. Alamat diambil daripada pembolehubah persekitaran, yang sama yang tidak terdapat sebarang perkataan dalam dokumentasi, seperti yang dinyatakan sebelum ini. Anda boleh menetapkannya sendiri atau, lebih-lebih lagi, hardcode mereka jika mereka menutup kedai.
$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID) )Kami menetapkan nilai kosong pembolehubah yang ingin kami pindahkan, tetapkan Skop - Keluaran

Sebagai contoh, kami membuat beberapa penjana nilai rawak. Beri perhatian kepada sintaks mengisytiharkan pembolehubah dalam peringkat ini fungsi ini diperkenalkan.

Dalam langkah seterusnya, kami menghantar pembolehubah kepada skrip, ya, ya, ia tidak boleh langsung, ia mesti melalui hujah.

Skrip di bawah 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))
#endregionAtau
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_URLSecara ringkasnya, skrip kami mengambil pembolehubah myVar sebagai input dan menggunakan API untuk meletakkan nilai pembolehubah ini ke dalam stageVar. Dalam langkah seterusnya, menggunakan sintaks pembolehubah sistem, kita boleh melihatnya.

Contohnya agak mudah, tetapi fungsinya membuka peluang yang baik untuk kami, sebagai tambahan kepada saya yang terdahulu , apabila kita boleh mencipta mesin maya pada peringkat pertama ujian, lakukan beberapa manipulasi selanjutnya dengannya, dan beberapa secara selari. Dan peringkat terakhir adalah untuk memusnahkannya. Kini kami menjalankan ujian automatik produk setiap kali pada mesin maya baharu. Memandangkan mereka hidup selama kira-kira 10 minit, ia menelan kos satu sen.
Dalam artikel seterusnya, jika perlu, saya akan bercakap tentang saluran paip YAML terdapat banyak inovasi menarik di sana sejak kebelakangan ini.
Sumber: www.habr.com
