Menggunakan pembolehubah dalam saluran paip Azure DevOps

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.

Menggunakan pembolehubah dalam saluran paip Azure DevOps

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 dokumentasi. 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 param. 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.

Menggunakan pembolehubah dalam saluran paip Azure DevOps

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

Menggunakan pembolehubah dalam saluran paip Azure DevOps

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.

Menggunakan pembolehubah dalam saluran paip Azure DevOps

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.

Menggunakan pembolehubah dalam saluran paip Azure DevOps

Pembolehubah Dinamik

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

Menggunakan pembolehubah dalam saluran paip Azure DevOps

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

Menggunakan pembolehubah dalam saluran paip Azure DevOps

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

Menggunakan pembolehubah dalam saluran paip Azure DevOps

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

Menggunakan pembolehubah dalam saluran paip Azure DevOps

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))
#endregion

Atau

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

Secara 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.

Menggunakan pembolehubah dalam saluran paip Azure DevOps

Contohnya agak mudah, tetapi fungsinya membuka peluang yang baik untuk kami, sebagai tambahan kepada saya yang terdahulu artikel, 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

Beli pengehosan yang boleh dipercayai untuk tapak dengan perlindungan DDoS, pelayan VPS VDS 🔥 Beli pengehosan laman web yang boleh dipercayai dengan perlindungan DDoS, pelayan VPS VDS | ProHoster