作業メモ: Spring Boot on VSCode + Azure DevOPs -> Azure WebApps

Spring Bootのコードを、Azure DevOpsを使ってAzure WebAppsにCI/CDしてみました。手順は以下です。なお今回はAzure Reposでは無くGitHubを利用しました

- 前提
    - Windows 10 ver.1909, WLS1利用
    - Azureのアカウントを取得済
    - ローカルにGitインストール済
    - GitHubのアカウントを取得済
- 準備
    - [VSCodeのインストール](#vscodeのインストール)
    - [Azure WebApps環境作成](#azure-webapps環境作成)
    - [GitHubにレポジトリ作成](#githubにレポジトリ作成)
    - [Azure DevOpsのアカウント取得とプロジェクト作成](#azure-devopsのアカウント取得とプロジェクト作成)
- コーディング
    - [Spring Boot on VSCode](#spring-boot-on-vscode)
- [GitHubにpush](#githubにpush)
- Azure DevOps
    - [Build pipeline作成](#build-pipeline作成)
    - [Release Pipeline作成](#release-pipeline作成)
    - [WebAppにdeploy](#webappにdeploy)

#VSCodeのインストール
- [キレイなSpring Bootの開発環境を構築する(WSL + Proxy + vscode)](https://qiita.com/dongsu-iis/items/6c7974022083d3036dc8)を参照して進めます
    - こちらを参考に一旦クリーンアンインストールしてから進めました（[VS Codeをアンインストールするには](https://www.atmarkit.co.jp/ait/articles/1810/12/news026.html)）
    - WSLへのJDKインストールは[こちら](https://qiita.com/Jazuma/items/8025714508a9ad382942)

# Azure WebApps環境作成
- デプロイ先のWebAppを作っておきます。Azureポータルの「リソースの作成」から、Web>Webアプリ、を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/6831e36a-fad9-e1be-a680-d49e167b7300.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/4e434df0-1e08-a54c-59f6-79d7e32dbd44.png)

- Webアプリを作成します。今回はSpringBootなのでランタイムはJava SE。OSはLinuxを選択。SKUはFree。（SKUとサイズの詳細は[こちら](https://azure.microsoft.com/ja-jp/pricing/details/app-service/linux/)）
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/96362501-4428-48c9-d3f9-2743ab751677.png)

# GitHubにレポジトリ作成
- [このあたり](https://techacademy.jp/magazine/6235#sec6)を参考に、GitHubにレポジトリを作成します。リモートリポジトリのアドレスを控えておきます

# Azure DevOpsのアカウント取得とプロジェクト作成
- [Azure DevOps](https://azure.microsoft.com/ja-jp/services/devops/)サイトの「無料で始める」からスタート　
- Azureへのサインインを求められます。その後プロジェクトの作成画面に遷移します![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/9d4569ef-9b44-f611-95ca-3dfc38d2910e.png)
- こんな感じの画面になったら、プロジェクトの作成は完了です![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/c669ab2b-8f22-726e-6b6f-c17252016a01.png)

# Spring Boot on VSCode
- VSCodeの環境設定で確認した「キレイなSpring Bootの開発環境を構築する」記事の[Spring Bootのプロジェクト作成](https://qiita.com/dongsu-iis/items/6c7974022083d3036dc8#spring-boot%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E4%BD%9C%E6%88%90)を参照して進めます。
- 文中の「Spring-Boot-Dashboard」は以下。右クリック>Startで、デバッグコンソールに起動ログが流れ出したら起動できています![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/041aafa2-4b40-35bf-0010-048b2e0eb096.png)
- ブラウザで[http://localhost:8080/hello](http://localhost:8080/hello)にアクセスして、以下の画面が出ればOKです![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/ec717a18-65f3-dd1f-d447-7792408c8884.png)

- 以下の記事を参考にHelloWorldControllerを追加。
    -  [Controllerの作成](https://qiita.com/kuro227/items/d7da647e9f3be78a5f92#controller-%E3%81%AE%E4%BD%9C%E6%88%90)
    -  [JSONレスポンスを得る](https://qiita.com/Haru_3/items/319b626afcfe8131ad43#-http%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AE%E5%AE%9F%E8%A3%85)

（コード例）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/ac820919-7548-584d-41ce-3bed6cccc16c.png)

再び[http://localhost:8080/hello](http://localhost:8080/hello)にアクセスすると以下となります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/e86a3634-42f5-0ee3-70ba-e658cd82c260.png)

#GitHubにPush
こちらの手順に従って進めました
https://iwasawa-officialweb.com/2019/08/27/%E3%80%90git%E3%80%91visual-studio-code-x-github-%E3%81%AE%E9%80%A3%E6%90%BA/

記事中の8.プッシュする、で、[GitHubにレポジトリ作成](#GitHubにレポジトリ作成)の際取得したリモートリポジトリのアドレスを設定します。

こんな感じにPushされていればOKです
https://github.com/yosukearaiMS13/pcftest1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/df8bf7a4-6bc0-bb10-c5d9-7b8c576f370e.png)

# Azure DevOPs
## Build pipeline作成
こちらに従って作成していきます
https://blog.nextscape.net/archives/Date/2019/06/devops-build-1

前の作業工程「[Azure DevOpsのアカウント取得とプロジェクト作成](#azure-devopsのアカウント取得とプロジェクト作成)」で作ったDevOpsプロジェクトにアクセスします。[https://dev.azure.com/](https://dev.azure.com/)から辿れます

当該DevOpsプロジェクトの"Pipelines">"Pipelines"から、New pipelineをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/5d5d950d-4d1a-27b4-d36e-2171c4709687.png)

今回は画面下部の"Use the classic editor"のリンクを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/86e5d480-453c-bd2d-52f0-7689a6cc24c7.png)
Source repositoryを選択し、先にpushしたGitHub上のレポジトリとブランチを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/85da96f6-5bf2-a4af-e6ce-0700fc508a1c.png)

Maven build templateを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/ecd93974-781a-a007-6556-65ef314e0cca.png)

以下の画面になります。Agent specificationをWSLで利用のubuntu-18.04に変更。後はそのまま。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/ae035109-c69c-747b-1ed9-24d5c7b274ac.png)

これでBuild pipelineは完成です。Save&queueをクリックして実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/1660c97a-34df-82c2-c53d-3fb9d8dba617.png)

以下の画面になります。StatusがSuccessになったら完了です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/0776804c-8ebe-813d-f358-3f4b8edc1f50.png)

"Success"の箇所をクリックして画面遷移し、Buildログを確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/9eeb732e-fb93-bab9-5529-13b1b6aca782.png)

## Release pipeline作成
続いてRelease pipelineを作ります。こちらを参照
[https://blog.nextscape.net/ja-JP/archives/Date/2019/06/devops-build-2](https://blog.nextscape.net/ja-JP/archives/Date/2019/06/devops-build-2)

New release pipelineを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/4a6c36f1-22f6-a54a-d5cc-d2e411a83019.png)

以下の画面になります。ここからは上記記事の通り進めます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/e6ef29e5-d1c9-c2b3-5206-cd25a31b0831.png)

上記記事ではreleaseエラーを解消するためにBuild pipelineを修正していますが、今回はrelease pipelineの方を修正します。Package or folderを以下としました
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/26f634f4-bc1a-9929-e36a-1e579a741b7b.png)

Package or folder欄の・・・をクリックすると、artifactの構成が確認できます。こちらから対象のjarを選択してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/45d33179-39d8-0149-0a1e-e94670911f0e.png)

あと1点修正が必要なのはStartup commandです。Spring boot appの起動コマンドを以下の形で入力します
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/2d240e9d-6787-25e6-16d9-2946543e0349.png)
（Startup commandについては以下の記事が参考になりました）
[https://qiita.com/kazuhiro1982/items/2cfe322280c045caaa37](https://qiita.com/kazuhiro1982/items/2cfe322280c045caaa37)

これでRelease pipelineの作成は完了です。

##WebAppにdeploy
画面上部の"Create release"をクリックしてdeployします。以下の画面が出ますので、そのまま"Create"をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/5e31c0bc-25fb-4f4a-e405-725a8ec0b6be.png)

画面上部にリンクが表示されます。そこから確認画面に遷移します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/9d0ccc41-94fd-014c-9c20-0f38dfd502ad.png)

In progress -> SucceededとなったらRelease完了です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/f9920e8f-d8f6-0e67-db47-72b830b829a8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/899b609c-c29c-dacd-e572-3833e417ed90.png)

Succeededの箇所のリンクから実行ログを確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/f7ab0c6a-9487-ba9e-1246-33b1af2d3cd0.png)

Azure App Service Deploy のところに、deploy先のApp Service Application URLが表示されます。このURL/helloにブラウザでアクセスして、ローカル実行と同じ内容が表示されたら、deploy成功です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/8fe559d1-ac9f-fa03-e13d-53589bb697f6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/1e08c872-3a70-5fb1-ab43-c48e7f7e2ff4.png)

Spring BootのコードをAzure DevOpsを使ってWebAppsにCI/CDした手順は以上となります。お疲れ様でした