0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Pipelines で variable を使ってみる

Posted at

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 は以下の順番で展開される。

  1. yaml 中の Job レベルで定義された variable
  2. yaml 中の Stage レベルで定義された variable
  3. yaml 中の Pipeline レベルで定義された variable
  4. UI で定義されて "settable at queue time (実行時に設定可能)" の variable
  5. 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

参考

Define variables

検証用 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%
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?