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 で変数を出力する'