Azure DevOps PipelinesのBuilds（ビルドパイプライン）を使ってみる

Pipelinesは、開発効率を圧倒的に高める上で大切なサービスです。

超概要につきましては、[Azure DevOps Pipelines(パイプライン)の超概要](https://qiita.com/mstakaha1113/items/f9fad71b8bd33e77d9ce)をご覧ください。

今回は、"Builds"のみを実施したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/5e19c4ef-5b26-7c75-6b71-2426435d9af0.png)
こちらの"CI"の部分です。
次回は、"Builds"と"Releases"を実施したいと思います。

# 成果物を生成するのがBuilds
プログラムを作成したあと、コンパイルを実施し単体テストを実施するのが、主な"Builds"の役割です。
もちろん、作成するモノによって動きは異なります。
C#でexeを作る場合は成果物は当然exeです。dllを作成する場合もあるかと思います。
書いたスクリプトファイルそのものが成果物の場合もあり得ます(コンパイル不要)。
テストもツールで生成できるものもあれば、手書きの場合もあると思いますし、場合によってはテストが無いことも想定されます。（最初からカンペキじゃなくても良いので、自動テストは作成することをオススメします。）

様々なパターンが想定されますが、**デプロイ直前の成果物を作り出す**ことが、Buildsの担当領域となります。


# 準備

## プログラムの準備←今回は不要です
今回は、VisualStudio 2019 Enterpriseを使います。
[チュートリアル: マネージド コードの単体テストを作成し、実行する](https://docs.microsoft.com/ja-jp/visualstudio/test/walkthrough-creating-and-running-unit-tests-for-managed-code?view=vs-2019)
こちらのチュートリアルを実施して、プログラムを準備しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/bd94398c-de80-cd33-4474-57da449eee92.png)
今回は本筋ではありませんので、こちらで準備しました。省略してください。

## Reposへ登録
作成したプログラムをReposへ登録し、Buildsが利用できるようにします。
### Reposの作成
Reposに新しいリポジトリを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/a576fe6f-3eff-22bf-7c06-1fc2d2fe3cfa.png)
Azure DevOpsのRepos、Filesの中央上部に、パンくずでリポジトリ名が表記されています。
このリポジトリ名の右側の下向き矢印をクリックします。
すると"New repository"というメニューが現れますのでクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/6ffc47c2-d503-b812-09dc-ecc2a81062a0.png)
今回は"build-sample001"という名前でリポジトリを作成します。

### リポジトリを準備しました
本来であれば、VisualStudioとAzure DevOpsを接続し、ソースコードをReposに登録します。
しかし、前述のとおり今回は本筋ではありませんので省略します。
そのかわり、ボクの準備したリポジトリをコピーしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/7a739dd9-b8d8-7711-5cf1-6f165e97869d.png)
リポジトリ作成後の画面です。
こちらの"Import"ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/30e988e0-135c-def8-34d7-80bf9f508c45.png)
"Source type"には"Git"を選択し、"Clone URL"には**https://dev.azure.com/mstakaha1113-kanrisya/qiitamstakaha/_git/build-sample001**こちらを入力ください。
"Import"ボタンをクリックします。

# Buildsの作成
ビルドパイプラインを作成するときのコツは２つです。

- 最初からカンペキにはできないと認識しておく
- 最終的にはYAML形式にしてリポジトリに保存するが、とりあえずウィザードでやる

理解が進めばこのような手間は不要になります。

## 新規作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/ca6be405-8341-c25d-0e49-b1f735030179.png)
始めはこのような画面になっていると思いますので"New pipeline"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/c317a986-5486-6c6b-3b40-ae4c91e73ce1.png)
この画面はビルドパイプラインをYAML形式で記述するための初めのウィザードになっています。
最終的にはYAML形式による記載はベストですが、今回は左下のリンク"Use the classic editor"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/788edb73-dede-8b9f-05b1-9dc3a428b1de.png)
始めにどのリポジトリを使うのか聞かれます。
さきほど作成したリポジトリを選択して"Continue"ボタンをクリックします。

Buildsでは、おおむねまっさらなPCを準備してくれます。
このままですと、たとえば必要なライブラリが入っていない等の問題があります。
Buildsではそのような必要となる事前準備等も含めてバッチ処理のようなものを書いていきます。
（本来はYAMLで、今回はウィザード形式で。）
しかし、普段GUIでフンワリと成果物を生成できてしまっている人にとっては、これはハードルが高い話題になります。
exeが１個できるにも、中で何をしているのか、してはいけないのかをすべて把握するのは困難です。
そこで、Azure DevOpsはテンプレートを準備してくれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/daaef7e6-c0f9-81b7-b564-928bb3428205.png)
今回は ".NET Desktop" なので、こちらの"Apply"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/2af8985e-44a2-4765-8c22-f62c7dec4968.png)
正しく動作するかは別にして、とりあえずできました。
"Save & queue"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/3abd1d58-b54b-4ae9-51ba-6b87419adf65.png)
何やらいろいろ聞いてきますが、とりあえず"Save and run"をクリックします。

# 動作結果の確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/4aa49248-154a-b96c-9ead-cb876acf9d94.png)
ビルドパイプラインが動作を始めました。
動作中は、そのログを画面で確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/a7a0ea86-5b51-6fcc-461f-176409c055a4.png)
無事に、すべてのジョブが終了しました。
右上の"Artifacts"というところから、最終生成物の確認も可能です。

現在表示中の画面は"Logs"タブの情報です。
ジョブの中の"VsTest"というところでwarningが発生していることもわかります。
各ジョブ名をクリックすることで詳細を確認することも可能ですし、ジョブ名の右の方に出てくるアイコンをクリックすることでログをダウンロードすることも可能です。

うまくいかない場合は、緑のチェックマークが赤くなってエラーの発生およびエラー箇所を知らせてくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/18b7ed33-57d2-2951-2d8a-b4d3f933a7af.png)
こんな感じです。

# まとめ

今回は、ビルドパイプラインを走らせてみました。
まっさらなPCを準備して、各種ライブラリを追加し、ビルドやテストを実施して最終生成物を固めるまでを自動で実行できる環境を手にできることが雰囲気だけでも伝わったのではないでしょうか。

最後に、"Pipelines"の"Builds"に関する主な画面の遷移を記載しておきたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439826/f6435c0f-1ee0-cfb7-0e7d-9d9314098677.png)
- "Builds"はビルドパイプラインの一覧から始まる
- その右側に、選択されているパイプラインの実行結果一覧が表示されている
- パイプラインそのものを編集したい場合は"Edit"をクリックする
- 実行結果の１つをクリックすることで詳細な情報を確認できる

最初のうちは、自分がどこにいるかわからなくなったら、画面上部のパンくずを使って確認や遷移をすることをオススメします。