Azure Pipelines で変数を出力する方法を書こうとしたのですが、既に別の方が良記事(Azure Pipeline で変数を出力する - Qiita)を作成されていました。

基本はそちらの記事を見ていただければと思いますが、私は最近、YAML で Pipeline を定義することが多いので、ここでは YAML で設定する場合について説明します。

使い方

YAML で設定する場合でも、「 ##vso 」から始まるスクリプトを標準出力するだけです。

例では Powershell を使用していますが、bash でも同じ要領で出力できます。

steps:
- powershell: 'Write-Host (''##vso[task.setvariable variable=randval]'' + (Get-Random -Minimum 1 -Maximum 10).ToString())'
  displayName: '乱数を生成し、変数に格納する'
- powershell: 'Write-Host $(randval)'
  displayName: '変数を出力する'

なお、変数出力を行ったコマンドの結果は、ログ上には出力されません。

実行結果
実行結果

Job 間で値を渡す

スクリプトの isOutput オプションを true にすることで、Job 間で値を渡すことが出来ます。オプションを有効にしていれば、VM イメージが異なっても受け渡しが可能です。

なお、isOutput を有効にした場合、step の name 項目で名前を付ける必要がある点に注意が必要です(name 項目は GUI 版で OutputVariables と呼ばれていた項目と同じ働きをします)。

ここで出力した変数は、$[dependencies.<Job名>.outputs['<step名>.<変数名>']] の形で後続 Job の variables で参照出来ます。Job 内の変数で受けた後は、その名前で参照することが出来るようになります。

jobs:
  - job: First
    pool:
      vmImage: 'windows-latest'
    steps:
    - powershell: 'Write-Host (''##vso[task.setvariable variable=randval;isOutput=true]'' + (Get-Random -Minimum 1 -Maximum 10).ToString())'
      displayName: '乱数を生成し、変数に格納する'
      name: createStep
    - powershell: 'Write-Host $(createStep.randval)'
      displayName: '変数を出力する'

  - job: Second
    dependsOn: First
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      randomValue: $[dependencies.First.outputs['createStep.randval']]
    steps:
    - script: 'echo $(randomValue)'
      displayName: '別の Job で変数を出力する'

参考