Tentukan variabel
| Layanan Azure DevOps Azure DevOps Server 2020 | | Azure DevOps Server 2019 TFS 2018
Catatan
Di Microsoft Team Foundation Server (TFS) 2018 dan versi sebelumnya, alur build dan rilis disebut definisi, eksekusi disebut build, koneksi layanan disebut titik akhir layanan, tahapan disebut lingkungan, dan pekerjaan disebut fase.
Variabel memberi Anda cara yang mudah untuk mendapatkan bit kunci data ke berbagai bagian alur. Penggunaan variabel yang paling umum adalah menentukan nilai yang kemudian dapat Anda gunakan dalam alur Anda. Semua variabel disimpan sebagai string dan dapat diubah. Nilai variabel dapat berubah dari eksekusi ke eksekusi atau pekerjaan ke pekerjaan alur Anda.
Ketika Anda menentukan variabel yang sama di beberapa tempat dengan nama yang sama, variabel yang paling terlingkup secara lokal menang. Jadi, variabel yang ditentukan pada tingkat pekerjaan dapat mengambil alih variabel yang ditetapkan pada tingkat tahap. Variabel yang ditentukan pada tingkat tahap akan menggantikan variabel yang ditetapkan pada tingkat akar alur. Variabel yang diatur dalam tingkat akar alur akan menggantikan variabel yang diatur dalam antarmuka pengguna pengaturan Alur.
Anda dapat menggunakan variabel dengan ekspresi untuk menetapkan nilai secara kondisional dan menyesuaikan alur lebih lanjut.
Variabel berbeda dari parameter runtime, yang ditik dan tersedia selama penguraian templat.
Variabel yang ditentukan pengguna
Saat menentukan variabel, Anda dapat menggunakan sintaks yang berbeda (makro, ekspresi templat, atau runtime) dan sintaks apa yang Anda gunakan akan menentukan di mana dalam alur yang akan dirender variabel Anda.
Dalam alur YAML, Anda dapat mengatur variabel di tingkat akar, tahap, dan pekerjaan. Anda juga dapat menentukan variabel di luar alur YAML di UI. Saat Anda mengatur variabel di UI, variabel tersebut dapat dienkripsi dan diatur sebagai rahasia.
Variabel yang ditentukan pengguna dapat diatur sebagai baca-saja. Ada batasan penamaan untuk variabel (misalnya: Anda tidak dapat menggunakan secret di awal nama variabel).
Anda dapat menggunakan grup variabel untuk membuat variabel tersedia di beberapa alur.
Anda dapat menggunakan templat untuk menentukan variabel yang digunakan dalam beberapa alur dalam satu file.
Variabel sistem
Selain variabel yang ditentukan pengguna, Azure Pipelines memiliki variabel sistem dengan nilai yang telah ditentukan sebelumnya. Jika Anda menggunakan YAML atau alur build klasik, lihat variabel yang telah ditentukan sebelumnya untuk daftar variabel sistem yang komprehensif. Jika Anda menggunakan alur rilis klasik, lihat variabel rilis.
Variabel sistem diatur dengan nilainya saat ini saat Anda menjalankan alur. Beberapa variabel diatur secara otomatis. Sebagai penulis alur atau pengguna akhir, Anda mengubah nilai variabel sistem sebelum alur dijalankan.
Variabel sistem bersifat baca-saja.
Variabel lingkungan
Variabel lingkungan khusus untuk sistem operasi yang Anda gunakan. Mereka disuntikkan ke dalam alur dengan cara khusus platform. Formatnya sesuai dengan bagaimana variabel lingkungan diformat untuk platform pembuatan skrip spesifik Anda.
Pada sistem UNIX (macOS dan Linux), variabel lingkungan memiliki format $NAME. Pada Windows, formatnya adalah %NAME% untuk batch dan $env:NAME di PowerShell.
Variabel yang ditentukan sistem dan pengguna juga disuntikkan sebagai variabel lingkungan untuk platform Anda. Ketika variabel diubah menjadi variabel lingkungan, nama variabel menjadi huruf besar, dan titik berubah menjadi garis bawah. Misalnya, nama any.variable variabel menjadi nama $ANY_VARIABLEvariabel .
Ada pembatasan penamaan variabel untuk variabel lingkungan (misalnya: Anda tidak dapat menggunakan secret di awal nama variabel).
Pembatasan penamaan variabel
Variabel yang ditentukan pengguna dan lingkungan dapat terdiri dari huruf, angka, ., dan _ karakter. Jangan gunakan awalan variabel yang dicadangkan oleh sistem. Ini adalah: endpoint, , secretinput, , pathdan securefile. Variabel apa pun yang dimulai dengan salah satu string ini (terlepas dari kapitalisasi) tidak akan tersedia untuk tugas dan skrip Anda.
Memahami sintaks variabel
Azure Pipelines mendukung tiga cara berbeda untuk mereferensikan variabel: makro, ekspresi templat, dan ekspresi runtime. Setiap sintaks dapat digunakan untuk tujuan yang berbeda dan memiliki beberapa batasan.
Dalam alur, variabel ekspresi templat (${{ variables.var }}) diproses pada waktu kompilasi, sebelum runtime dimulai. Variabel sintaks makro ($(var)) diproses selama runtime sebelum tugas berjalan. Ekspresi runtime ($[variables.var]) juga diproses selama runtime tetapi dirancang untuk digunakan dengan kondisi dan ekspresi. Saat Anda menggunakan ekspresi runtime, itu harus mengambil seluruh sisi kanan definisi.
Dalam contoh ini, Anda dapat melihat bahwa ekspresi templat masih memiliki nilai awal variabel setelah variabel diperbarui. Nilai variabel sintaks makro diperbarui. Nilai ekspresi templat tidak berubah karena semua variabel ekspresi templat diproses pada waktu kompilasi sebelum tugas berjalan. Sebaliknya, variabel sintaks makro dievaluasi sebelum setiap tugas berjalan.
variables:
- name: one
value: initialValue
steps:
- script: |
echo ${{ variables.one }} # outputs initialValue
echo $(one)
displayName: First variable pass
- bash: echo "##vso[task.setvariable variable=one]secondValue"
displayName: Set new variable value
- script: |
echo ${{ variables.one }} # outputs initialValue
echo $(one) # outputs secondValue
displayName: Second variable pass
Variabel sintaks makro
Sebagian besar contoh dokumentasi menggunakan sintaks makro ($(var)). Sintaks makro dirancang untuk menginterpolasi nilai variabel ke dalam input tugas dan ke variabel lain.
Variabel dengan sintaks makro diproses sebelum tugas dijalankan selama runtime. Runtime terjadi setelah ekspansi templat. Ketika sistem menemukan ekspresi makro, sistem mengganti ekspresi dengan konten variabel. Jika tidak ada variabel dengan nama tersebut, maka ekspresi makro dibiarkan tidak berubah. Misalnya, jika $(var) tidak dapat diganti, $(var) tidak akan digantikan oleh apa pun.
Variabel sintaks makro tetap tidak berubah tanpa nilai karena nilai kosong seperti $() mungkin berarti sesuatu untuk tugas yang Anda jalankan dan agen tidak boleh menganggap Anda ingin nilai tersebut diganti. Misalnya, jika Anda menggunakan $(foo) untuk mereferensikan variabel foo dalam tugas Bash, mengganti semua $() ekspresi dalam input ke tugas dapat merusak skrip Bash Anda.
Variabel makro hanya diperluas ketika digunakan untuk nilai, bukan sebagai kata kunci. Nilai muncul di sisi kanan definisi alur. Berikut ini valid: key: $(value). Berikut ini tidak valid: $(key): value. Variabel makro tidak diperluas ketika digunakan untuk menampilkan nama pekerjaan sebaris. Sebagai gantinya displayName , Anda harus menggunakan properti .
Catatan
Variabel sintaks makro hanya diperluas untuk stages, jobs, dan steps.
Anda tidak dapat, misalnya, menggunakan sintaks makro di dalam resource atau trigger.
Dalam contoh ini, sintaks makro digunakan dengan Bash, PowerShell, dan tugas skrip. Sintaks untuk memanggil variabel dengan sintaks makro sama untuk ketiganya.
variables:
- name: projectName
value: contoso
steps:
- bash: echo $(projectName)
- powershell: echo $(projectName)
- script: echo $(projectName)
Sintaks ekspresi templat
Anda dapat menggunakan sintaks ekspresi templat untuk memperluas parameter templat dan variabel (${{ variables.var }}). Variabel templat diproses pada waktu kompilasi, dan diganti sebelum runtime dimulai. Ekspresi templat dirancang untuk menggunakan kembali bagian YAML sebagai templat.
Variabel templat diam-diam bersatu dengan string kosong saat nilai pengganti tidak ditemukan. Ekspresi templat, tidak seperti makro dan ekspresi runtime, bisa muncul sebagai kunci (sisi kiri) atau nilai (sisi kanan). Berikut ini valid: ${{ variables.key }} : ${{ variables.value }}.
Sintaks ekspresi runtime
Anda dapat menggunakan sintaks ekspresi runtime untuk variabel yang diperluas saat runtime ($[variables.var]). Variabel ekspresi runtime secara diam-diam bersatu ke string kosong saat nilai pengganti tidak ditemukan. Ekspresi runtime dirancang untuk digunakan dalam kondisi pekerjaan, untuk mendukung eksekusi pekerjaan kondisional, atau seluruh tahapan.
Variabel ekspresi runtime hanya diperluas ketika digunakan untuk nilai, bukan sebagai kata kunci. Nilai muncul di sisi kanan definisi alur. Berikut ini valid: key: $[variables.value]. Berikut ini tidak valid: $[variables.key]: value. Ekspresi runtime harus mengambil seluruh sisi kanan pasangan kunci-nilai. Misalnya, key: $[variables.value] valid tetapi key: $[variables.value] foo tidak.
| Sintaks | Contoh | Kapan diproses? | Di mana perluasannya dalam definisi alur? | Bagaimana render ketika tidak ditemukan? |
|---|---|---|---|---|
| makro | $(var) |
runtime sebelum tugas dijalankan | nilai (sisi kanan) | Cetakan $(var) |
| ekspresi templat | ${{ variables.var }} |
waktu kompilasi | kunci atau nilai (sisi kiri atau kanan) | string kosong |
| ekspresi runtime | $[variables.var] |
runtime bahasa umum | nilai (sisi kanan) | string kosong |
Sintaks apa yang harus saya gunakan?
Gunakan sintaks makro jika Anda memberikan input untuk tugas.
Pilih ekspresi runtime jika Anda bekerja dengan kondisi dan ekspresi. Pengecualian untuk ini adalah jika Anda memiliki alur di mana itu akan menyebabkan masalah bagi variabel kosong Anda untuk dicetak. Misalnya, jika Anda memiliki logika kondisional yang bergantung pada variabel yang memiliki nilai tertentu atau tanpa nilai. Dalam hal ini, Anda harus menggunakan ekspresi runtime.
Jika Anda menentukan variabel dalam templat, gunakan ekspresi templat.
Mengatur variabel dalam alur
Dalam kasus yang paling umum, Anda mengatur variabel dan menggunakannya dalam file YAML. Ini memungkinkan Anda melacak perubahan pada variabel dalam sistem kontrol versi Anda. Anda juga dapat menentukan variabel di antarmuka pengguna pengaturan alur (lihat tab Klasik) dan mereferensikannya di YAML Anda.
Berikut adalah contoh yang menunjukkan cara mengatur dua variabel, configuration dan platform, dan menggunakannya nanti dalam langkah-langkah. Untuk menggunakan variabel dalam pernyataan YAML, bungkus dalam $(). Variabel tidak dapat digunakan untuk menentukan repository dalam pernyataan YAML.
# Set variables once
variables:
configuration: debug
platform: x64
steps:
# Use them once
- task: MSBuild@1
inputs:
solution: solution1.sln
configuration: $(configuration) # Use the variable
platform: $(platform)
# Use them again
- task: MSBuild@1
inputs:
solution: solution2.sln
configuration: $(configuration) # Use the variable
platform: $(platform)
Cakupan variabel
Dalam file YAML, Anda dapat mengatur variabel di berbagai cakupan:
- Pada tingkat akar, untuk membuatnya tersedia untuk semua pekerjaan dalam alur.
- Pada tingkat tahap, untuk membuatnya tersedia hanya untuk tahap tertentu.
- Pada tingkat pekerjaan, untuk membuatnya hanya tersedia untuk pekerjaan tertentu.
Ketika variabel didefinisikan di bagian atas YAML, variabel akan tersedia untuk semua pekerjaan dan tahapan dalam alur dan merupakan variabel global. Variabel global yang ditentukan dalam YAML tidak terlihat di antarmuka pengguna pengaturan alur.
Variabel pada tingkat pekerjaan mengambil alih variabel di tingkat akar dan tahap. Variabel pada tingkat tahap mengambil alih variabel di tingkat akar.
variables:
global_variable: value # this is available to all jobs
jobs:
- job: job1
pool:
vmImage: 'ubuntu-latest'
variables:
job_variable1: value1 # this is only available in job1
steps:
- bash: echo $(global_variable)
- bash: echo $(job_variable1)
- bash: echo $JOB_VARIABLE1 # variables are available in the script environment too
- job: job2
pool:
vmImage: 'ubuntu-latest'
variables:
job_variable2: value2 # this is only available in job2
steps:
- bash: echo $(global_variable)
- bash: echo $(job_variable2)
- bash: echo $GLOBAL_VARIABLE
Output dari kedua pekerjaan terlihat seperti ini:
# job1
value
value1
value1
# job2
value
value2
value
Tentukan variabel
Dalam contoh sebelumnya, variables kata kunci diikuti oleh daftar pasangan kunci-nilai.
Kuncinya adalah nama variabel dan nilainya adalah nilai variabel.
Ada sintaks lain, berguna ketika Anda ingin menggunakan templat variabel atau grup variabel. Sintaks ini harus digunakan pada tingkat akar alur.
Dalam sintaks alternatif ini, variables kata kunci mengambil daftar penentu variabel.
Penentu variabel adalah name untuk variabel reguler, group untuk grup variabel, dan template untuk menyertakan templat variabel.
Contoh berikut menunjukkan ketiganya.
variables:
# a regular variable
- name: myvariable
value: myvalue
# a variable group
- group: myvariablegroup
# a reference to a variable template
- template: myvariabletemplate.yml
Pelajari selengkapnya tentang penggunaan kembali variabel dengan templat.
Mengakses variabel melalui lingkungan
Perhatikan bahwa variabel juga tersedia untuk skrip melalui variabel lingkungan. Sintaks untuk menggunakan variabel lingkungan ini tergantung pada bahasa pembuatan skrip.
Nama ini dalam huruf besar, dan . diganti dengan _. Ini secara otomatis dimasukkan ke dalam lingkungan proses. Berikut adalah beberapa contohnya:
- Skrip batch:
%VARIABLE_NAME% - Skrip PowerShell:
$env:VARIABLE_NAME - Skrip Bash:
$VARIABLE_NAME
Penting
Variabel yang telah ditentukan sebelumnya yang berisi jalur file diterjemahkan ke gaya yang sesuai (gaya Windows C:\foo\ versus gaya Unix /foo/) berdasarkan jenis host agen dan jenis shell. Jika Anda menjalankan tugas skrip bash pada Windows, Anda harus menggunakan metode variabel lingkungan untuk mengakses variabel ini daripada metode variabel alur untuk memastikan Anda memiliki gaya jalur file yang benar.
YAML tidak didukung di TFS.
Mengatur variabel rahasia
Jangan atur variabel rahasia dalam file YAML Anda. Sistem operasi sering mencatat perintah untuk proses yang dijalankannya, dan Anda tidak ingin log menyertakan rahasia yang Anda lewati sebagai input. Gunakan lingkungan skrip atau petakan variabel dalam variables blok untuk meneruskan rahasia ke alur Anda.
Anda perlu mengatur variabel rahasia di antarmuka pengguna pengaturan alur untuk alur Anda. Variabel ini dilingkup ke alur tempat Anda mengaturnya. Anda juga dapat mengatur variabel rahasia dalam grup variabel.
Untuk mengatur rahasia di antarmuka web, ikuti langkah-langkah berikut:
- Masuk ke halaman Alur, pilih alur yang sesuai, lalu pilih Edit.
- Temukan Variabel untuk alur ini.
- Tambahkan atau perbarui variabel.
Pilih ikon kunci untuk menyimpan variabel dengan cara terenkripsi.- Simpan alurnya.
Variabel rahasia dienkripsi saat tidak aktif dengan kunci RSA 2048-bit. Rahasia tersedia di agen untuk tugas dan skrip yang akan digunakan. Berhati-hatilah tentang siapa yang memiliki akses untuk mengubah alur Anda.
Penting
Kami berupaya menutupi rahasia agar tidak muncul di output Azure Pipelines, tetapi Anda masih perlu mengambil tindakan pencegahan. Jangan pernah menggaungkan rahasia sebagai output. Beberapa argumen baris perintah log sistem operasi. Jangan pernah meneruskan rahasia pada baris perintah. Sebagai gantinya, kami sarankan Anda memetakan rahasia Anda ke dalam variabel lingkungan.
Kami tidak pernah menutupi substring rahasia. Jika, misalnya, "abc123" ditetapkan sebagai rahasia, "abc" tidak ditutupi dari log. Ini untuk menghindari menutupi rahasia pada tingkat yang terlalu terperinci, membuat log tidak dapat dibaca. Untuk alasan ini, rahasia tidak boleh berisi data terstruktur. Jika, misalnya, "{ "foo": "bar" }" diatur sebagai rahasia, "bar" tidak ditutupi dari log.
Tidak seperti variabel normal, variabel tersebut tidak secara otomatis didekripsi ke dalam variabel lingkungan untuk skrip. Anda perlu secara eksplisit memetakan variabel rahasia.
Contoh berikut menunjukkan cara menggunakan variabel rahasia yang disebut mySecret dalam skrip PowerShell dan Bash.
Tidak seperti variabel alur normal, tidak ada variabel lingkungan yang disebut MYSECRET.
variables:
GLOBAL_MYSECRET: $(mySecret) # this will not work because the secret variable needs to be mapped as env
GLOBAL_MY_MAPPED_ENV_VAR: $(nonSecretVariable) # this works because it's not a secret.
steps:
- powershell: |
Write-Host "Using an input-macro works: $(mySecret)"
Write-Host "Using the env var directly does not work: $env:MYSECRET"
Write-Host "Using a global secret var mapped in the pipeline does not work either: $env:GLOBAL_MYSECRET"
Write-Host "Using a global non-secret var mapped in the pipeline works: $env:GLOBAL_MY_MAPPED_ENV_VAR"
Write-Host "Using the mapped env var for this task works and is recommended: $env:MY_MAPPED_ENV_VAR"
env:
MY_MAPPED_ENV_VAR: $(mySecret) # the recommended way to map to an env variable
- bash: |
echo "Using an input-macro works: $(mySecret)"
echo "Using the env var directly does not work: $MYSECRET"
echo "Using a global secret var mapped in the pipeline does not work either: $GLOBAL_MYSECRET"
echo "Using a global non-secret var mapped in the pipeline works: $GLOBAL_MY_MAPPED_ENV_VAR"
echo "Using the mapped env var for this task works and is recommended: $MY_MAPPED_ENV_VAR"
env:
MY_MAPPED_ENV_VAR: $(mySecret) # the recommended way to map to an env variable
Output dari kedua tugas dalam skrip sebelumnya akan terlihat seperti ini:
Using an input-macro works: ***
Using the env var directly does not work:
Using a global secret var mapped in the pipeline does not work either:
Using a global non-secret var mapped in the pipeline works: foo
Using the mapped env var for this task works and is recommended: ***
Anda juga dapat menggunakan variabel rahasia di luar skrip. Misalnya, Anda dapat memetakan variabel rahasia ke tugas menggunakan variables definisi . Contoh ini memperlihatkan cara menggunakan variabel $(vmsUser) rahasia dan $(vmsAdminPass) dalam tugas penyalinan file Azure.
variables:
VMS_USER: $(vmsUser)
VMS_PASS: $(vmsAdminPass)
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AzureFileCopy@4
inputs:
SourcePath: 'my/path'
azureSubscription: 'my-subscription'
Destination: 'AzureVMs'
storage: 'my-storage'
resourceGroup: 'my-rg'
vmsAdminUserName: $(VMS_USER)
vmsAdminPassword: $(VMS_PASS)
Mereferensikan variabel rahasia dalam grup variabel
Contoh ini menunjukkan cara mereferensikan grup variabel dalam file YAML Anda, dan juga menambahkan variabel dalam YAML. Ada dua variabel yang digunakan dari grup variabel: user dan token. Variabel token ini rahasia, dan dipetakan ke variabel $env:MY_MAPPED_TOKEN lingkungan sehingga dapat direferensikan dalam YAML.
YAML ini melakukan panggilan REST untuk mengambil daftar rilis, dan menghasilkan hasilnya.
variables:
- group: 'my-var-group' # variable group
- name: 'devopsAccount' # new variable defined in YAML
value: 'contoso'
- name: 'projectName' # new variable defined in YAML
value: 'contosoads'
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
# Encode the Personal Access Token (PAT)
# $env:USER is a normal variable in the variable group
# $env:MY_MAPPED_TOKEN is a mapped secret variable
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $env:USER,$env:MY_MAPPED_TOKEN)))
# Get a list of releases
$uri = "https://vsrm.dev.azure.com/$(devopsAccount)/$(projectName)/_apis/release/releases?api-version=5.1"
# Invoke the REST call
$result = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
# Output releases in JSON
Write-Host $result.value
env:
MY_MAPPED_TOKEN: $(token) # Maps the secret variable $(token) from my-var-group
Penting
Secara default dengan repositori GitHub, variabel rahasia yang terkait dengan alur Anda tidak tersedia untuk menarik build permintaan fork. Untuk informasi selengkapnya, lihat Kontribusi dari fork.
YAML tidak didukung di TFS.
Berbagi variabel di seluruh alur
Untuk berbagi variabel di beberapa alur dalam proyek Anda, gunakan antarmuka web. Di bawah Pustaka, gunakan grup variabel.
Menggunakan variabel output dari tugas
Beberapa tugas menentukan variabel output, yang dapat Anda konsumsi dalam langkah-langkah hilir, pekerjaan, dan tahapan. Di YAML, Anda dapat mengakses variabel di seluruh pekerjaan dan tahapan dengan menggunakan dependensi.
Beberapa tugas menentukan variabel output, yang dapat Anda konsumsi dalam langkah-langkah hilir dan pekerjaan dalam tahap yang sama. Di YAML, Anda dapat mengakses variabel di seluruh pekerjaan dengan menggunakan dependensi.
Beberapa tugas menentukan variabel output, yang dapat Anda gunakan dalam langkah-langkah hilir dalam pekerjaan yang sama.
- Untuk mereferensikan variabel dari tugas yang berbeda dalam pekerjaan yang sama, gunakan
TASK.VARIABLE. - Untuk mereferensikan variabel dari tugas dari pekerjaan yang berbeda, gunakan
dependencies.JOB.outputs['TASK.VARIABLE'].
Catatan
Secara default, setiap tahap dalam alur tergantung pada yang tepat sebelum di file YAML. Jika Anda perlu merujuk ke tahap yang tidak segera sebelum tahap saat ini, Anda dapat mengambil alih default otomatis ini dengan menambahkan dependsOn bagian ke tahap.
Catatan
Contoh berikut menggunakan sintaks alur standar. Jika Anda menggunakan alur penyebaran, sintaks variabel dan variabel bersyarat akan berbeda. Untuk informasi tentang sintaks tertentu untuk digunakan, lihat Pekerjaan penyebaran.
Untuk contoh ini, asumsikan kita memiliki tugas yang disebut MyTask, yang menetapkan variabel output yang disebut MyVar.
Pelajari selengkapnya tentang sintaks dalam Ekspresi - Dependensi.
Menggunakan output dalam pekerjaan yang sama
steps:
- task: MyTask@1 # this step generates the output variable
name: ProduceVar # because we're going to depend on it, we need to name the step
- script: echo $(ProduceVar.MyVar) # this step uses the output variable
Menggunakan output dalam pekerjaan yang berbeda
jobs:
- job: A
steps:
# assume that MyTask generates an output variable called "MyVar"
# (you would learn that from the task's documentation)
- task: MyTask@1
name: ProduceVar # because we're going to depend on it, we need to name the step
- job: B
dependsOn: A
variables:
# map the output variable from A into this job
varFromA: $[ dependencies.A.outputs['ProduceVar.MyVar'] ]
steps:
- script: echo $(varFromA) # this step uses the mapped-in variable
Menggunakan output dalam tahap yang berbeda
Untuk menggunakan output dari tahap yang berbeda di tingkat pekerjaan, Anda menggunakan stageDependencies sintaks:
- Pada tingkat tahap, format untuk mereferensikan variabel dari tahap yang berbeda adalah
dependencies.STAGE.outputs['JOB.TASK.VARIABLE'] - Pada tingkat pekerjaan, format untuk mereferensikan variabel dari tahap yang berbeda adalah
stageDependencies.STAGE.JOB.outputs['TASK.VARIABLE']
stages:
- stage: One
jobs:
- job: A
steps:
- task: MyTask@1 # this step generates the output variable
name: ProduceVar # because we're going to depend on it, we need to name the step
- stage: Two
jobs:
- job: B
variables:
# map the output variable from A into this job
varFromA: $[ stageDependencies.One.A.outputs['ProduceVar.MyVar'] ]
steps:
- script: echo $(varFromA) # this step uses the mapped-in variable
Anda juga dapat meneruskan variabel antar tahap dengan input file. Untuk melakukannya, Anda harus menentukan variabel pada tahap kedua di tingkat pekerjaan dan kemudian meneruskan variabel sebagai env: input.
## script-a.sh
echo "##vso[task.setvariable variable=sauce;isOutput=true]crushed tomatoes"
## script-b.sh
echo 'Hello file version'
echo $skipMe
echo $StageSauce
## azure-pipelines.yml
stages:
- stage: one
jobs:
- job: A
steps:
- task: Bash@3
inputs:
filePath: 'script-a.sh'
name: setvar
- bash: |
echo "##vso[task.setvariable variable=skipsubsequent;isOutput=true]true"
name: skipstep
- stage: two
jobs:
- job: B
variables:
- name: StageSauce
value: $[ stageDependencies.one.A.outputs['setvar.sauce'] ]
- name: skipMe
value: $[ stageDependencies.one.A.outputs['skipstep.skipsubsequent'] ]
steps:
- task: Bash@3
inputs:
filePath: 'script-b.sh'
name: fileversion
env:
StageSauce: $(StageSauce) # predefined in variables section
skipMe: $(skipMe) # predefined in variables section
- task: Bash@3
inputs:
targetType: 'inline'
script: |
echo 'Hello inline version'
echo $(skipMe)
echo $(StageSauce)
Output dari tahapan dalam alur sebelumnya terlihat seperti ini:
Hello inline version
true
crushed tomatoes
Mencantumkan variabel
Anda dapat mencantumkan semua variabel dalam alur Anda dengan perintah az pipelines variable list . Untuk memulai, lihat Mulai menggunakan CLI Azure DevOps.
az pipelines variable list [--org]
[--pipeline-id]
[--pipeline-name]
[--project]
Parameter
- org: Azure DevOps URL organisasi. Anda dapat mengonfigurasi organisasi default menggunakan
az devops configure -d organization=ORG_URL. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil menggunakangit config. Contoh:--org https://dev.azure.com/MyOrganizationName/. - pipeline-id: Diperlukan jika pipeline-name tidak disediakan. ID alur.
- pipeline-name: Diperlukan jika pipeline-id tidak disediakan, tetapi diabaikan jika pipeline-id disediakan. Nama alur.
- project: Nama atau ID proyek. Anda dapat mengonfigurasi proyek default menggunakan
az devops configure -d project=NAME_OR_ID. Diperlukan jika tidak dikonfigurasi sebagai default atau diambil dengan menggunakangit config.
Contoh
Perintah berikut mencantumkan semua variabel dalam alur dengan ID 12 dan memperlihatkan hasilnya dalam format tabel.
az pipelines variable list --pipeline-id 12 --output table
Name Allow Override Is Secret Value
------------- ---------------- ----------- ------------
MyVariable False False platform
NextVariable False True platform
Configuration False False config.debug
Mengatur variabel dalam skrip
Skrip dalam alur Anda dapat menentukan variabel sehingga dapat dikonsumsi oleh salah satu langkah berikutnya dalam alur. Semua variabel yang ditetapkan oleh metode ini diperlakukan sebagai string. Untuk mengatur variabel dari skrip, Anda menggunakan sintaks perintah dan mencetak ke stdout.
Mengatur variabel cakupan pekerjaan dari skrip
Untuk mengatur variabel dari skrip, Anda menggunakan perintah pengelogantask.setvariable. Ini akan memperbarui variabel lingkungan untuk pekerjaan berikutnya. Pekerjaan berikutnya akan memiliki akses ke variabel baru dengan sintaks makro dan dalam tugas sebagai variabel lingkungan.
Ketika issecret diatur ke true, nilai variabel akan disimpan sebagai rahasia dan ditutupi dari log. Untuk informasi selengkapnya tentang variabel rahasia, lihat perintah pengelogan.
steps:
# Create a variable
- bash: |
echo "##vso[task.setvariable variable=sauce]crushed tomatoes" # remember to use double quotes
# Use the variable
# "$(sauce)" is replaced by the contents of the `sauce` variable by Azure Pipelines
# before handing the body of the script to the shell.
- bash: |
echo my pipeline variable is $(sauce)
Langkah-langkah berikutnya juga akan memiliki variabel alur yang ditambahkan ke lingkungannya. Anda tidak dapat menggunakan variabel dalam langkah yang ditentukan.
steps:
# Create a variable
# Note that this does not update the environment of the current script.
- bash: |
echo "##vso[task.setvariable variable=sauce]crushed tomatoes"
# An environment variable called `SAUCE` has been added to all downstream steps
- bash: |
echo "my environment variable is $SAUCE"
- pwsh: |
Write-Host "my environment variable is $env:SAUCE"
Output dari alur sebelumnya.
my environment variable is crushed tomatoes
my environment variable is crushed tomatoes
Mengatur variabel output multi-pekerjaan
Jika Anda ingin membuat variabel tersedia untuk pekerjaan di masa mendatang, Anda harus menandainya sebagai variabel output dengan menggunakan isOutput=true. Kemudian Anda dapat memetakannya ke pekerjaan di masa mendatang dengan menggunakan $[] sintaks dan menyertakan nama langkah yang mengatur variabel . Variabel output multi-pekerjaan hanya berfungsi untuk pekerjaan dalam tahap yang sama.
Untuk meneruskan variabel ke pekerjaan dalam tahap yang berbeda, gunakan sintaksis dependensi tahap .
Catatan
Secara default, setiap tahap dalam alur tergantung pada yang tepat sebelum di file YAML. Oleh karena itu, setiap tahap dapat menggunakan variabel output dari tahap sebelumnya. Untuk mengakses tahap lebih lanjut, Anda harus mengubah grafik dependensi, misalnya, jika tahap 3 memerlukan variabel dari tahap 1, Anda harus mendeklarasikan dependensi eksplisit pada tahap 1.
Saat membuat variabel output multi-pekerjaan, Anda harus menetapkan ekspresi ke variabel. Dalam YAML ini, $[ dependencies.A.outputs['setvarStep.myOutputVar'] ] ditetapkan ke variabel $(myVarFromJobA).
jobs:
# Set an output variable from job A
- job: A
pool:
vmImage: 'windows-latest'
steps:
- powershell: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the value"
name: setvarStep
- script: echo $(setvarStep.myOutputVar)
name: echovar
# Map the variable into job B
- job: B
dependsOn: A
pool:
vmImage: 'ubuntu-18.04'
variables:
myVarFromJobA: $[ dependencies.A.outputs['setvarStep.myOutputVar'] ] # map in the variable
# remember, expressions require single quotes
steps:
- script: echo $(myVarFromJobA)
name: echovar
Output dari alur sebelumnya.
this is the value
this is the value
Jika Anda mengatur variabel dari satu tahap ke tahap lainnya, gunakan stageDependencies.
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=myStageOutputVar;isOutput=true]this is a stage output var"
name: printvar
- stage: B
dependsOn: A
variables:
myVarfromStageA: $[ stageDependencies.A.A1.outputs['printvar.myStageOutputVar'] ]
jobs:
- job: B1
steps:
- script: echo $(myVarfromStageA)
Jika Anda mengatur variabel dari matriks atau potongan, maka, untuk mereferensikan variabel saat Anda mengaksesnya dari pekerjaan hilir, Anda harus menyertakan:
- Nama pekerjaan.
- Langkahnya.
jobs:
# Set an output variable from a job with a matrix
- job: A
pool:
vmImage: 'ubuntu-18.04'
strategy:
maxParallel: 2
matrix:
debugJob:
configuration: debug
platform: x64
releaseJob:
configuration: release
platform: x64
steps:
- bash: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the $(configuration) value"
name: setvarStep
- bash: echo $(setvarStep.myOutputVar)
name: echovar
# Map the variable from the debug job
- job: B
dependsOn: A
pool:
vmImage: 'ubuntu-18.04'
variables:
myVarFromJobADebug: $[ dependencies.A.outputs['debugJob.setvarStep.myOutputVar'] ]
steps:
- script: echo $(myVarFromJobADebug)
name: echovar
jobs:
# Set an output variable from a job with slicing
- job: A
pool:
vmImage: 'ubuntu-18.04'
parallel: 2 # Two slices
steps:
- bash: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the slice $(system.jobPositionInPhase) value"
name: setvarStep
- script: echo $(setvarStep.myOutputVar)
name: echovar
# Map the variable from the job for the first slice
- job: B
dependsOn: A
pool:
vmImage: 'ubuntu-18.04'
variables:
myVarFromJobsA1: $[ dependencies.A.outputs['job1.setvarStep.myOutputVar'] ]
steps:
- script: "echo $(myVarFromJobsA1)"
name: echovar
Pastikan untuk mengawali nama pekerjaan ke variabel output pekerjaan penyebaran . Dalam hal ini, nama pekerjaan adalah A:
jobs:
# Set an output variable from a deployment
- deployment: A
pool:
vmImage: 'ubuntu-18.04'
environment: staging
strategy:
runOnce:
deploy:
steps:
- bash: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the deployment variable value"
name: setvarStep
- bash: echo $(setvarStep.myOutputVar)
name: echovar
# Map the variable from the job for the first slice
- job: B
dependsOn: A
pool:
vmImage: 'ubuntu-18.04'
variables:
myVarFromDeploymentJob: $[ dependencies.A.outputs['A.setvarStep.myOutputVar'] ]
steps:
- bash: "echo $(myVarFromDeploymentJob)"
name: echovar
YAML tidak didukung di TFS.
Mengatur variabel dengan menggunakan ekspresi
Anda dapat mengatur variabel dengan menggunakan ekspresi. Kami sudah menemukan satu kasus ini untuk mengatur variabel ke output yang lain dari pekerjaan sebelumnya.
- job: B
dependsOn: A
variables:
myVarFromJobsA1: $[ dependencies.A.outputs['job1.setvarStep.myOutputVar'] ] # remember to use single quotes
Anda dapat menggunakan salah satu ekspresi yang didukung untuk mengatur variabel. Berikut adalah contoh pengaturan variabel untuk bertindak sebagai penghitung yang dimulai pada 100, bertambah 1 untuk setiap eksekusi, dan direset ke 100 setiap hari.
jobs:
- job:
variables:
a: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 100)]
steps:
- bash: echo $(a)
Untuk informasi selengkapnya tentang penghitung, dependensi, dan ekspresi lainnya, lihat ekspresi.
YAML tidak didukung di TFS.
Mengonfigurasi variabel yang dapat diatur untuk langkah-langkah
Anda dapat menentukan settableVariables dalam langkah atau menentukan bahwa tidak ada variabel yang dapat diatur.
Dalam contoh ini, skrip tidak dapat mengatur variabel.
steps:
- script: echo This is a step
target:
settableVariables: none
Dalam contoh ini, skrip memungkinkan variabel sauce tetapi bukan variabel secretSauce. Anda akan melihat peringatan di halaman eksekusi alur.
steps:
- bash: |
echo "##vso[task.setvariable variable=Sauce;]crushed tomatoes"
echo "##vso[task.setvariable variable=secretSauce;]crushed tomatoes with garlic"
target:
settableVariables:
- sauce
name: SetVars
- bash:
echo "Sauce is $(sauce)"
echo "secretSauce is $(secretSauce)"
name: OutputVars
Izinkan pada waktu antrean
Jika variabel muncul di variables blok file YAML, nilainya diperbaiki dan tidak dapat ditimpa pada waktu antrean. Praktik terbaik adalah menentukan variabel Anda dalam file YAML tetapi ada kalanya ini tidak masuk akal. Misalnya, Anda mungkin ingin menentukan variabel rahasia dan tidak memiliki variabel yang terekspos di YAML Anda. Atau, Anda mungkin perlu mengatur nilai variabel secara manual selama eksekusi alur.
Anda memiliki dua opsi untuk menentukan nilai waktu antrean. Anda dapat menentukan variabel di UI dan memilih opsi untuk Memungkinkan pengguna mengambil alih nilai ini saat menjalankan alur ini atau Anda dapat menggunakan parameter runtime sebagai gantinya. Jika variabel Anda bukan rahasia, praktik terbaik adalah menggunakan parameter runtime.
Untuk mengatur variabel pada waktu antrean, tambahkan variabel baru dalam alur Anda dan pilih opsi ambil alih.
Untuk memungkinkan variabel diatur pada waktu antrean, pastikan variabel juga tidak muncul di variables blok alur atau pekerjaan. Jika Anda menentukan variabel di blok variabel YAML dan di UI, nilai dalam YAML akan memiliki prioritas.
YAML tidak didukung di TFS.
Perluasan variabel
Saat Anda mengatur variabel dengan nama yang sama dalam beberapa cakupan, prioritas berikut berlaku (prioritas tertinggi terlebih dahulu).
- Variabel tingkat pekerjaan diatur dalam file YAML
- Variabel tingkat tahap diatur dalam file YAML
- Variabel tingkat alur diatur dalam file YAML
- Variabel diatur pada waktu antrean
- Variabel alur diatur dalam antarmuka pengguna pengaturan Alur
Dalam contoh berikut, variabel a yang sama diatur pada tingkat alur dan tingkat pekerjaan dalam file YAML. Ini juga diatur dalam grup Gvariabel , dan sebagai variabel di antarmuka pengguna pengaturan Alur.
variables:
a: 'pipeline yaml'
stages:
- stage: one
displayName: one
variables:
- name: a
value: 'stage yaml'
jobs:
- job: A
variables:
- name: a
value: 'job yaml'
steps:
- bash: echo $(a) # This will be 'job yaml'
Saat Anda mengatur variabel dengan nama yang sama dalam cakupan yang sama, nilai set terakhir akan diutamakan.
stages:
- stage: one
displayName: Stage One
variables:
- name: a
value: alpha
- name: a
value: beta
jobs:
- job: I
displayName: Job I
variables:
- name: b
value: uno
- name: b
value: dos
steps:
- script: echo $(a) #outputs beta
- script: echo $(b) #outputs dos
Catatan
Saat Anda mengatur variabel dalam file YAML, jangan tentukan di editor web sebagai dapat diatur pada waktu antrean. Saat ini Anda tidak dapat mengubah variabel yang diatur dalam file YAML pada waktu antrean. Jika Anda memerlukan variabel untuk diatur pada waktu antrean, jangan atur dalam file YAML.
Variabel diperluas sekali ketika eksekusi dimulai, dan sekali lagi di awal setiap langkah. Contohnya:
jobs:
- job: A
variables:
a: 10
steps:
- bash: |
echo $(a) # This will be 10
echo '##vso[task.setvariable variable=a]20'
echo $(a) # This will also be 10, since the expansion of $(a) happens before the step
- bash: echo $(a) # This will be 20, since the variables are expanded just before the step
Ada dua langkah dalam contoh sebelumnya. Perluasan $(a) terjadi sekali di awal pekerjaan, dan sekali di awal masing-masing dari dua langkah.
Karena variabel diperluas di awal pekerjaan, Anda tidak dapat menggunakannya dalam strategi. Dalam contoh berikut, Anda tidak dapat menggunakan variabel a untuk memperluas matriks pekerjaan, karena variabel hanya tersedia di awal setiap pekerjaan yang diperluas.
jobs:
- job: A
variables:
a: 10
strategy:
matrix:
x:
some_variable: $(a) # This does not work
Jika variabel a adalah variabel output dari pekerjaan sebelumnya, maka Anda dapat menggunakannya dalam pekerjaan di masa mendatang.
- job: A
steps:
- powershell: echo "##vso[task.setvariable variable=a;isOutput=true]10"
name: a_step
# Map the variable into job B
- job: B
dependsOn: A
variables:
some_variable: $[ dependencies.A.outputs['a_step.a'] ]
Ekspansi rekursif
Pada agen, variabel yang direferensikan menggunakan $( ) sintaks diperluas secara rekursif.
Contohnya:
variables:
myInner: someValue
myOuter: $(myInner)
steps:
- script: echo $(myOuter) # prints "someValue"
displayName: Variable is $(myOuter) # display name is "Variable is someValue"
YAML tidak didukung di TFS.



