yaml 中に variable を定義する
yaml 中で定義される variable にはスコープがあり、スコープ外の variable は参照できない。
次のように定義する。
variables:
- name: pipeline_var
value: 'yaml-pipeline-val'
stages:
- stage: var_test_stage
displayName: var test stage
variables:
- name: stage_var
value: 'yaml-stage-val'
jobs:
- job: var_test_job
pool:
vmImage: 'windows-latest'
variables:
- name: job_var
value: 'yaml-job-val'
- Pipeline レベルの variable : pipeline_var
- Stage レベルの variable : stage_var
- Job レベルのvariable : job_var
variable が展開される順番
Azure Pipelines の variable は以下の順番で展開される。
- yaml 中の Job レベルで定義された variable
- yaml 中の Stage レベルで定義された variable
- yaml 中の Pipeline レベルで定義された variable
- UI で定義されて "settable at queue time (実行時に設定可能)" の variable
- UI で定義された variable
yaml 中で variable を参照する
yaml 中で variable を参照する方法は 3 つあり、それぞれ処理されるタイミングが異なる。
macro syntax
書式 : $(var)
処理のタイミング : 実行時
実行例
- task: CmdLine@2
displayName: reference variables with macro syntax
inputs:
script: |
echo reference variables with macro syntax
echo pipeline_var : $(pipeline_var)
echo stage_var : $(stage_var)
echo job_var : $(job_var)
echo ui_var : $(ui_var)
実行結果
すべての variable を参照することができる
reference variables with macro syntax
pipeline_var : yaml-pipeline-val
stage_var : yaml-stage-val
job_var : yaml-job-val
ui_var : ui_val
template expression syntax
書式 : ${{variables.var}} または ${{variables['var']}}
処理のタイミング : コンパイル時
実行例
- task: CmdLine@2
displayName: reference variables with template expression syntax
inputs:
script: |
echo reference variables with template expression syntax
echo pipeline_var : ${{variables.pipeline_var}} or ${{variables['pipeline_var']}}
echo stage_var : ${{variables.stage_var}} or ${{variables['stage_var']}}
echo job_var : ${{variables.job_var}} or ${{variables['job_var']}}
echo ui_var : ${{variables.ui_var}} or ${{variables['ui_var']}}
実行結果
UI で定義された variable は参照できず空になっている。
reference variables with template expression syntax
pipeline_var : yaml-pipeline-val or yaml-pipeline-val
stage_var : yaml-stage-val or yaml-stage-val
job_var : yaml-job-val or yaml-job-val
ui_var : or
runtime expression syntax
書式 : $[variables.var]
処理のタイミング : 実行時
実行例
- task: CmdLine@2
displayName: reference variables with runtime expression syntax
inputs:
script: |
echo reference variables with runtime expression syntax
echo pipeline_var : $[variables.pipeline_var]
echo stage_var : $[variables.stage_var]
echo job_var : $[variables.job_var]
echo ui_var : $[variables.ui_var]
実行結果
macro syntax のときと異なり、そもそも variable として処理されずに文字列として扱われる。
reference variables with runtime expression syntax
pipeline_var : $[variables.pipeline_var]
stage_var : $[variables.stage_var]
job_var : $[variables.job_var]
ui_var : $[variables.ui_var]
上記の方法と別に variable は環境変数として参照することもできる。
スクリプトを yaml に直接書かずに、スクリプトファイルを参照するときはこの方法を使う。
書式 : %VAR% (Windows コマンドラインの場合)
実行例
- task: CmdLine@2
displayName: reference as environment variables
inputs:
script: |
echo reference as environment variables
echo pipeline_var : %PIPELINE_VAR%
echo stage_var : %STAGE_VAR%
echo job_var : %JOB_VAR%
echo ui_var : %UI_VAR%
実行結果
すべての variable を参照することができる
reference as environment variables
pipeline_var : yaml-pipeline-val
stage_var : yaml-stage-val
job_var : yaml-job-val
ui_var : ui_val
参考
検証用 yaml
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger: none
variables:
- name: pipeline_var
value: 'yaml-pipeline-val'
stages:
- stage: var_test_stage
displayName: var test stage
variables:
- name: stage_var
value: 'yaml-stage-val'
jobs:
- job: var_test_job
pool:
vmImage: 'windows-latest'
variables:
- name: job_var
value: 'yaml-job-val'
steps:
- task: CmdLine@2
displayName: reference variables with macro syntax
inputs:
script: |
echo reference variables with macro syntax
echo pipeline_var : $(pipeline_var)
echo stage_var : $(stage_var)
echo job_var : $(job_var)
echo ui_var : $(ui_var)
- task: CmdLine@2
displayName: reference variables with template expression syntax
inputs:
script: |
echo reference variables with template expression syntax
echo pipeline_var : ${{variables.pipeline_var}} or ${{variables['pipeline_var']}}
echo stage_var : ${{variables.stage_var}} or ${{variables['stage_var']}}
echo job_var : ${{variables.job_var}} or ${{variables['job_var']}}
echo ui_var : ${{variables.ui_var}} or ${{variables['ui_var']}}
- task: CmdLine@2
displayName: reference variables with runtime expression syntax
inputs:
script: |
echo reference variables with runtime expression syntax
echo pipeline_var : $[variables.pipeline_var]
echo stage_var : $[variables.stage_var]
echo job_var : $[variables.job_var]
echo ui_var : $[variables.ui_var]
- task: CmdLine@2
displayName: reference as environment variables
inputs:
script: |
echo reference as environment variables
echo pipeline_var : %PIPELINE_VAR%
echo stage_var : %STAGE_VAR%
echo job_var : %JOB_VAR%
echo ui_var : %UI_VAR%