GitHub × Azure Pipelines で Dockerized Java アプリを Azure にデプロイしてみる

最近 Java に力を入れがちなマイクロソフトですが、Dockerized Java アプリを Azure にデプロイするのがどれくらい簡単なのか試してみたいと思います。

#ソースコード
今回使用する Java アプリケーションですが、Tomcat のアプリを使用します。以下 GitHub にコードを配置しているのでご活用ください。
https://github.com/komiyasa/TomcatCICDsample

#Azure Pipelines で CI 作成
まずは Azure Pipelines で CI を作成してみましょう。Azure DevOps の Pipelines にアクセスして `New Pipeline` から新しい Pipeline を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/4112ce64-107d-93ff-7fd6-d1439d87f882.png)
YAML ベースで作成するのが最近の主流ですが、せっかく Azure Pipelines を使用するので Classic Editor で GUI ベースで作成してみたいと思います。今回追加するジョブは以下の5つです。参考までに設定したパラメータも記載します。

- Maven https://docs.microsoft.com/ja-jp/azure/devops/pipelines/tasks/build/maven?view=azure-devops
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/6e2ab72d-47f9-ab84-0d19-dd29a44ad3c1.png)
- Copy files https://docs.microsoft.com/ja-jp/azure/devops/pipelines/tasks/utility/copy-files?view=azure-devops&tabs=yaml
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/097cee32-7b5d-3942-e415-d10d4c959d64.png)
- Publish build artifacts https://docs.microsoft.com/ja-jp/azure/devops/pipelines/tasks/utility/publish-build-artifacts?view=azure-devops
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/aed883f2-d610-10a3-5462-d79768c00680.png)
- Docker (build と push) https://docs.microsoft.com/ja-jp/azure/devops/pipelines/tasks/build/docker?view=azure-devops
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/efd38262-ced5-6885-e9d6-efc1403e82cc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/f95f91ef-2ae3-9d25-07eb-d98f4d197f28.png)
設定が完了したら Queue を実行します。

■注意事項
この際、デフォルトの設定として Host Agent が `VS2019` になっている場合がありますが今回は Dockerized Java のビルドなので `Ubuntsu 16` に設定されているかご確認ください！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/ecaa2c94-79ea-373a-310f-ae0a562e9d02.png)

#Releases Pipeline を作成する
まずは `Continuous deployment trigger` を `Enable` に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/443aef26-1593-e251-ed4d-dfa7ed6cd750.png)
次に Tasks を二つ設定します。※あらかじめ Azure Database for MySQL と Azure WebApp をデプロイしてから実施します。
- Azure Database for MySQL deployment https://docs.microsoft.com/ja-jp/azure/devops/pipelines/tasks/deploy/azure-mysql-deployment?view=azure-devops
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/770d4026-90cf-bc80-cc50-d1ac3348773a.png)
- Azure App Service deploy https://docs.microsoft.com/ja-jp/azure/app-service/deploy-continuous-deployment?tabs=github
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/9a20a7f0-f13e-9331-6155-96803d58032a.png)

#コードを変更して CI/CD ができるか試してみる
GitHub の Master ブランチから Clone した Java アプリのタイトルを Visual Studio Code で少し変更して GitHub に Push してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/023049b7-5c27-710b-8992-cc0b2e0ba776.png)
変更した内容がまず GitHub に反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/81880436-c111-116c-5677-e843d0d82346.png)
Azure Pipelines を確認すると、自動的にビルドタスクが始まっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/93896c99-9d14-a59f-8a93-d0ecc8ce9325.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/1bdb725d-8018-2936-9570-3a40cc6ae3d6.png)
Azure Container Registry にも変更が反映されているのが Azure Portal で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/32799884-da73-bd22-eb96-4b1aeada3f20.png)
ビルドダスクが終了し、無事に Artifact が作成されると Release Pipelines が自動的に動きます。これで自動的に App Serviecs / Azure Database for MySQL に対して作成した Dockerized Java アプリがデプロイされたわけです。非常に簡単ですね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/c029daf9-9afb-9654-58e6-69cef1e46965.png)
実際にアプリケーションにアクセスすると変更が反映されているのがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/24c2294b-9a02-898d-8b3d-beb6f140affc.png)

#今回やったことを絵にまとめてみる
今回は GitHub × Azure Pipelines を使用して、Dockerized Java アプリを Azure にデプロイしました。Azure Container Registry や App Services などいろいろ使用したので絵にまとめてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/d66ffac5-b477-ac72-1fef-7c42da4f8d8b.png)
非常に簡単に Dockerized Java アプリの CI/CD を作成することができました。今回は Azure Container Registry で docker イメージを管理しましたが、そこを Docker Hub にしたりもできるかと思います。Classic Editor を使用すると GUI ベースで Java のパイプラインも作成できるので改めて便利だと思いました！
今後マイクロソフトは Java にも力を入れていくということですので、Azure DevOps / GitHub を軸に Java の開発環境のアップデートという観点でも情報をキャッチアップしていこうと思います。

#参考情報
Azure DevOps Lab : Deploying a Dockerized Java app to Azure Web App for Containers
https://azuredevopslabs.com/labs/vstsextend/dockerjava/