[Azure Pipeline] テストやビルド結果のファイルをダウンロードできるようにする


経緯

E2Eテストをpipeline上で自動実行できるように実装した。
テスト結果はPublishTestResultsタスクやログから確認できるが、
エビデンスとして撮影したスクリーンショットはスクリプト終了時にpipelineエージェントとともに消え去ってしまう...
スクショなどのファイルをpipelineエージェントから取り出せるようにしたい。

Artifactとは

pipelineを実行した結果として出力されたファイル = 成果物 のこと。
↓のドキュメントではビルドで出力された.exeファイルやパッケージを指しているが、テスト結果のエビデンスとして出力した画像ファイルなどもアーティファクトとして扱える模様。

実装方法

ymlファイルにタスクを追加

      - task: CopyFiles@2
        inputs:
          Contents: |
            $(Build.SourcesDirectory)/evidence/**/*
          TargetFolder: '$(Build.ArtifactStagingDirectory)'

      - task: PublishBuildArtifacts@1
        inputs:
          PathtoPublish: '$(Build.ArtifactStagingDirectory)'
          ArtifactName: 'evidence'
          publishLocation: 'Container'

Build.ArtifactStagingDirectoryは発行前のアーティファクトを置いておくためのディレクトリ。
CopyFilesで準備し、publishBuildArticactsで発行する。

publishLocationは発行先のオプションでContainer(pipeline上)とFilePath(任意のパス)から選べるようだが、後者はwindowsエージェントのみ使用可能な模様。

今回はテスト結果の発行にPublishBuildArtifactsを使用しているが、名前的にビルド成果物のためのタスクのようなので、PublishPipelineArtifactを使うほうが良いかもしれない。

pipelineの実行結果画面からダウンロードする

実行結果画面のpublishedからダウンロードできるようになる。

microsoftのドキュメントを見ると、
 pipeline -> 外部 を「発行 publish」
 pipeline <- 外部 を「ダウンロード download」と表現している。
pipeline目線だとそりゃそうなのだが、私の場合「pipelineからファイルをダウンロードしたかった」ので「azure pipeline ファイル ダウンロード」などのワードで検索しており適切な資料を見つけるのに手間取ってしまった。