Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022
Saat Anda menggunakan skrip PowerShell dan Bash di alur Anda, seringkali berguna untuk dapat mengatur variabel yang kemudian dapat Anda gunakan dalam tugas mendatang. Variabel yang baru ditetapkan tidak tersedia dalam tugas yang sama.
Skrip sangat bagus ketika Anda ingin melakukan sesuatu yang tidak didukung oleh tugas. Misalnya, Anda dapat menggunakan skrip untuk memanggil REST API kustom dan mengurai respons.
Anda menggunakan perintah pengelogan
Catatan
Pekerjaan penyebaran menggunakan sintaks yang berbeda untuk variabel output. Untuk mempelajari selengkapnya tentang dukungan untuk variabel output dalam pekerjaan penyebaran, lihat Pekerjaan penyebaran.
Untuk menggunakan variabel dengan kondisi dalam alur, lihat Menentukan kondisi.
Tentang task.setvariable
Saat Anda menambahkan variabel dengan task.setvariable, tugas berikut dapat menggunakan variabel menggunakan sintaks $(myVar)makro . Variabel hanya tersedia untuk tugas dalam pekerjaan yang sama secara default. Jika Anda menambahkan parameter isOutput, sintaks untuk memanggil perubahan variabel Anda. Untuk informasi selengkapnya, lihat Mengatur variabel output untuk digunakan dalam pekerjaan yang sama.
Atur variabel myVar dengan nilai foo.
- bash: |
echo "##vso[task.setvariable variable=myVar;]foo"
Baca variabel myVar:
- bash: |
echo "You can use macro syntax for variables: $(myVar)"
Mengatur properti variabel
Perintah ini task.setvariable mencakup properti untuk mengatur variabel sebagai rahasia, sebagai variabel output, dan sebagai baca saja. Properti yang tersedia meliputi:
-
variable= nama variabel (Diperlukan) -
isSecret= boolean (Opsional, default ke false) -
isOutput= boolean (Opsional, default ke false) -
isReadOnly= boolean (Opsional, default ke false)
Untuk menggunakan variabel di tahap berikutnya, atur properti ke isOutputtrue. Untuk merujuk variabel dengan isOutput disetel menjadi true, Anda menyertakan nama tugas. Contohnya,$(TaskName.myVar).
Saat Anda mengatur variabel sebagai hanya-baca, tugas hilir tidak dapat menimpanya. Atur isreadonly ke true. Mengatur variabel sebagai baca hanya meningkatkan keamanan dengan membuat variabel tersebut tidak dapat diubah.
Mengatur variabel sebagai rahasia
Ketika issecret diatur ke true, nilai variabel akan disimpan sebagai rahasia dan ditutupi dari log.
Catatan
Azure Pipelines berupaya menutupi rahasia saat memancarkan data ke log alur, sehingga Anda mungkin melihat variabel dan data tambahan yang diselubungi dalam output dan log yang tidak ditetapkan sebagai rahasia.
Atur variabel mySecretValrahasia .
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
Dapatkan variabel mySecretValrahasia .
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
echo $(mySecretVal)
Output variabel rahasia dalam bash.
Tingkat variabel output
Ada empat jenis variabel output yang berbeda dengan sintaks yang berbeda:
-
Variabel output diatur dalam pekerjaan yang sama tanpa
isOutputparameter . Untuk mereferensikan variabel ini, Anda menggunakan sintaks makro. Contoh:$(myVar). -
Variabel output diatur dalam pekerjaan yang sama dengan
isOutputparameter . Untuk mereferensikan variabel ini, Anda menyertakan nama tugas. Contoh:$(myTask.myVar). -
Variabel output diatur dalam pekerjaan di masa mendatang. Untuk mereferensikan variabel ini, Anda mereferensikan variabel di bagian
variablesdengan sintaksdependency. -
Variabel output diatur pada tahap mendatang. Untuk mereferensikan variabel ini, Anda mereferensikan variabel di bagian
variablesdengan sintaksstageDependencies.
Catatan
Tahap atau pekerjaan di masa mendatang hanya dapat mengakses variabel output jika bergantung pada tahap atau pekerjaan tempat variabel diatur. Untuk membuat variabel output dapat diakses, pastikan bahwa tahap atau pekerjaan berikutnya tergantung pada tahap atau pekerjaan tempat Anda membuat variabel. Jika beberapa tahap atau pekerjaan perlu menggunakan variabel output yang sama, gunakan dependsOn kondisi untuk menetapkan dependensi ini.
Nama variabel output dapat berubah jika alur Anda menggunakan strategi eksekusi seperti pekerjaan matriks. Untuk kasus tersebut, keluarkan variabel Anda untuk pengujian terlebih dahulu untuk memverifikasi namanya. Anda juga dapat mencetak semua variabel yang tersedia dalam alur dengan skrip env.
- script: env
displayName: 'Print all variables'
Mengatur variabel output untuk digunakan dalam pekerjaan yang sama
Saat Anda menggunakan variabel output dalam pekerjaan yang sama, Anda tidak perlu menggunakan isOutput properti . Secara default, variabel tersedia untuk langkah-langkah hilir dalam pekerjaan yang sama. Namun, jika Anda menambahkan properti isOutput, Anda perlu mereferensikan variabel dengan nama tugas.
Skrip di sini mengatur variabel myJobVar output pekerjaan yang sama tanpa menentukan isOutput dan mengatur myOutputJobVar dengan isOutput=true.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myJobVar]this is the same job"
- bash: |
echo "##vso[task.setvariable variable=myOutputJobVar;isOutput=true]this is the same job too"
name: setOutput
Skrip ini mendapatkan variabel myJobVar pekerjaan yang sama dan myOutputJobVar. Perhatikan bahwa perubahan sintaks untuk mereferensikan variabel output setelah isOutput=true ditambahkan.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myJobVar]this is the same job"
- bash: |
echo "##vso[task.setvariable variable=myOutputJobVar;isOutput=true]this is the same job too"
name: setOutput
- bash: |
echo $(myJobVar)
- bash: |
echo $(setOutput.myOutputJobVar)
Mengatur variabel output untuk digunakan dalam pekerjaan di masa mendatang
Saat Anda menggunakan variabel output di seluruh pekerjaan, Anda mereferensikannya dengan dependencies. Sintaks untuk mengakses variabel output dalam pekerjaan atau tahap mendatang bervariasi berdasarkan hubungan antara setter dan konsumen variabel. Pelajari tentang setiap kasus dalam dependensi.
Variabel output hanya tersedia dalam pekerjaan hilir berikutnya. Jika beberapa pekerjaan menggunakan variabel output yang sama, gunakan kondisi tersebut dependsOn .
Pertama, atur variabel myOutputVaroutput .
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is from job A"
name: passOutput
Selanjutnya, akses myOutputVar dalam pekerjaan di masa mendatang dan keluarkan variabel sebagai myVarFromJobA. Untuk menggunakan dependencies, Anda perlu mengatur dependsOn properti pada pekerjaan di masa mendatang menggunakan nama pekerjaan sebelumnya di mana variabel output diatur.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is from job A"
name: passOutput
- job: B
dependsOn: A
variables:
myVarFromJobA: $[ dependencies.A.outputs['passOutput.myOutputVar'] ]
steps:
- bash: |
echo $(myVarFromJobA)
Mengatur variabel output untuk digunakan pada tahap mendatang
Variabel output dapat digunakan di seluruh tahap dalam alur. Anda dapat menggunakan variabel output untuk meneruskan informasi yang berguna, seperti ID output yang dihasilkan, dari satu tahap ke tahap berikutnya.
Saat Anda mengatur variabel dengan properti , Anda dapat mereferensikan variabel tersebut isOutput di tahap selanjutnya dengan nama tugas dan stageDependencies sintaks. Pelajari selengkapnya tentang dependensi.
Variabel output hanya tersedia di tahap hilir berikutnya. Jika beberapa tahap menggunakan variabel output yang sama, gunakan kondisi tersebut dependsOn .
Pertama, atur variabel myStageValoutput .
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
Kemudian, pada tahap mendatang, petakan variabel output ke variabel myStageVal tahap, pekerjaan, atau cakupan tugas seperti, misalnya, myStageAVar. Perhatikan sintaks pemetaan menggunakan ekspresi $[] runtime dan melacak jalur dari stageDependencies ke variabel output menggunakan nama tahap (A) dan nama pekerjaan (A1) untuk sepenuhnya memenuhi syarat variabel.
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
- stage: B
dependsOn: A
jobs:
- job: B1
variables:
myStageAVar: $[stageDependencies.A.A1.outputs['MyOutputVar.myStageVal']]
steps:
- bash: echo $(myStageAVar)
Jika nilai Anda berisi baris baru, Anda dapat menghindarinya dan agen secara otomatis membukanya:
steps:
- bash: |
escape_data() {
local data=$1
data="${data//'%'/'%AZP25'}"
data="${data//$'\n'/'%0A'}"
data="${data//$'\r'/'%0D'}"
echo "$data"
}
echo "##vso[task.setvariable variable=myStageVal;isOutput=true]$(escape_data $'foo\nbar')"
name: MyOutputVar
FAQ
Variabel output saya tidak dirender. Apa yang salah?
Ada beberapa alasan mengapa variabel output Anda mungkin tidak muncul.
- Variabel output yang diatur dengan
isOutputtidak tersedia dalam pekerjaan yang sama dan sebaliknya hanya tersedia dalam pekerjaan hilir. - Bergantung pada sintaks variabel apa yang Anda gunakan, variabel yang mengatur nilai variabel output mungkin tidak tersedia saat runtime. Misalnya, variabel dengan sintaks makro (
$(var)) diproses sebelum tugas berjalan. Sebaliknya, variabel dengan sintaks templat diproses saat runtime ($[variables.var]). Anda biasanya ingin menggunakan sintaks runtime saat mengatur variabel output. Untuk informasi selengkapnya tentang sintaks variabel, lihat Menentukan variabel. - Mungkin ada ruang tambahan dalam ekspresi Anda. Jika variabel Anda tidak dirender, periksa ruang tambahan di sekitarnya
isOutput=true.
Anda dapat memecahkan masalah dependencies output untuk pekerjaan atau tahap alur dengan menambahkan variabel untuk dependensi lalu mencetak variabel tersebut. Misalnya, dalam pekerjaan A alur ini mengatur variabel MyTaskoutput . Pekerjaan kedua (B) tergantung pada pekerjaan A. Variabel baru, deps menyimpan representasi JSON dari dependensi pekerjaan. Langkah kedua dalam Job B menggunakan PowerShell untuk mencetak deps sehingga Anda dapat melihat dependensi pekerjaan.
trigger:
- '*'
pool:
vmImage: 'ubuntu-latest'
jobs:
- job: A
steps:
- script: |
echo "##vso[task.setvariable variable=MyTask;isOutput=true]theoutputval"
name: ProduceVar
- job: B
dependsOn: A
variables:
varFromA: $[ dependencies.A.outputs['ProduceVar.MyTask'] ]
deps: $[convertToJson(dependencies)] # create a variable with the job dependencies
steps:
- script: echo $(varFromA) #
- powershell: Write-Host "$(deps)"