Azure DevOps で Release Line をカスタマイズし手動承認ができるようにする

今回は、Azure DevOps の Release Line を活用して、既存のアプリケーションのデプロイの際に、検証環境/本番環境の間に承認者の手動承認ができるようにしてみたいと思います。

#前準備
今回準備するものは以下です。
- Azure WebApp の デプロイ × 2 (検証環境用と本番環境用)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/24de6b4c-cdb8-2b68-4a0a-dd7e19010302.png)

- Azure DevOps とローカルディレクトリの Git 紐付け
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/316f7e3a-848e-609b-d544-7817febc46a2.png)
Azure DevOps に新しいプロジェクトを作成したら、左側のメニューの Repos の File からクローンを選択し、表示されている URL をコピーします。ローカルの指定の場所で、`git clone` を実行すことで、ローカル環境と Azure DevOps 環境を紐付けることが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/af44507c-9909-4dd0-bede-aa2bfa2228aa.png)
`warning: You appear to have cloned an empty repository. ` というエラーが発生しますが、これは Azure DevOps が空だから発生するもので、無視して大丈夫です。

- サンプルスクリプトのダウンロード
以下ページにサンプルスクリプトを配置したので、ダウンロードし、上で設定したローカルの作業ディレクトリにコピーしてください。
https://github.com/komiyasa/DevOpsSample
配置できたら、コマンドから `Git push` を実行してみます。これで Azure DevOps 側へダウンロードしたソースコードが push されます。ここまでで下準備は環境です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/c5d472c4-ab58-c989-ba7d-130d06adaffb.png)

#Azure DevOps で Release Pipeline を設定する
次に Azure DevOps で Release Pipeline を設定します。まずは、検証環境と本番環境の WebApp にデプロイする設定をします。ビルドの設定から、初期設定値のままでまず Pipeline を　Run します。Save and Run を選択すると、自動的にビルドが走ります。この時点で ASP.NET Core でビルドしてくれますので、正常にビルドできるかどうか確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/437d0b54-5e26-b054-6ba0-133fe4710792.png)

次に App Services へデプロイができるように Release Pipeline を設定します。
Release line を設定すると Task を設定するようにアラートが出てきます。これは App services へデプロイするための設定値に不足があるという意味なので、該当の箇所を埋めます。Azure Subscription が紐ついていればデプロイした二つの WebApp が選択することができると思います。(簡単ですね！)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/d77715d6-eefd-112b-89a2-19ad4aa6e2e7.png)

Build されたときに Release Pipeline に流し込んで、そのうえで Dev 環境での push、Pro 環境への Push を実行するという Pipeline を作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/1bdf807a-8864-b9e2-4209-820674a83951.png)
これで、右上にある、`Create Release` を実行してみましょう！上手くいくと、二つの Stage が Success になり、Azure Web App に作成した二つの環境にコードがデプロイされているのが分かると思います。

#手動承認を実装する
Pro Stage に行く前に、人のマークがあります。ここで承認を設定できます。Pro の手前で設定するので、このステージに乗せるために承認者に通知がいき、承認者が承認をしたら、Stage 2 のリリースが開始されるという運びになります。実際に指定してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/61fbb74e-d26d-f5ba-86a6-608e35e42376.png)

実際に リリースラインを回してみると、以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/fc70a11a-547b-2d77-aa46-6c0ffc43f5a8.png)
また、承認者へは以下のようなメールが送付されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/1c57ce9b-a9fd-495c-8fc2-69ef48cbe1c5.png)
Azure DevOps にて承認をすると、Stage 3 の Dev へコードが流し込まれ、アプリケーションが本番環境にビルドされます。

#所感
このアーキテクチャを作成するまでにひとりで1時間もかかりませんでした。Azure DevOps は Azure リソースとの相性が非常に良いので、Azure WebApp やその他リソースを扱っている場合は積極的に使ってみたいですね。

#参考URL
Use approvals and gates to control your deployment
https://docs.microsoft.com/ja-jp/azure/devops/pipelines/release/deploy-using-approvals?view=azure-devops