1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SpringBootアプリをGAE/FE(Custom Runtime)にCloud Buildを使ってデプロイする

Posted at

はじめに

前回の記事 では SpringBootアプリ を GAE/FE(Custom Runtime) にローカルから
デプロイしてみましたが、今回はこれを Cloud Build を使って自動化します。

前提として 前回のデプロイが成功する状態 になっているものとします。

Cloud Build の仕組み

Cloud Build はコンテナを動かす VM を提供してくれます。

開発者が次の3点を用意すると VM でコンテナを起動し、
指定した順にコマンドを実行してくれます。

※ コンテナで出来ることであれば、デプロイ以外の処理でも良さそうです。

事前準備

後々必要になるため次の3点について事前に対応しておきます。

  • Cloud Build API を有効にする
  • App Engine Admin API を有効にする
  • Cloud Build(のサービスアカウント)に App Engine の操作権限を付与する

Cloud Build API を有効にする

下図の通り、公式のこちら に記載されている手順で Cloud Build API を有効にします。

image.png

WEBコンソールに移動したら、
image.png

App Engine Admin API を有効にする

下図の通り、公式に記載されているリンク から API を有効にします。
※ 認証情報の取得は不要です。
image.png

Cloud Build に App Engine の操作権限を付与する

上記スクショの 2. の方法で App Engine をいじれるよう Cloud Build に追加の権限を付与します。
次の通り。
image.png

編集画面で役割を追加する。
image.png

以上で事前準備は完了です。

ソースを修正する

冒頭で少し触れましたが、次の2つのファイルを追加で用意します。

  • Build に使うツールの詰まったコンテナイメージ(を作るためのDockerfile)
  • Build の手順を記載したビルド構成ファイル (cloudbuild.yaml)

上記を追加済みの ソースはこちら です。

Build に使うツールの詰まったコンテナイメージ(を作るためのDockerfile)を追加する

Build に使うツールの詰まったコンテナイメージは、
よく使いそうなものについては公式が 用意しています

上記で事足りる場合は自分でイメージを作る必要はありません。

今回は jdkmavengcloud の入っているイメージが欲しかったのですが、
公式に全部入りのものが無かったため、カスタムイメージを作ります。

カスタムイメージ(ビルドステップ)について 公式の解説はここ にあります。
作成した Dockerfile は次の通りです。

Dockerfile.gcloud-maven
FROM gcr.io/cloud-builders/gcloud

RUN apt-get update && apt-get install openjdk-8-jdk -y && apt install maven -y

ENTRYPOINT []

この Dockerfile からコンテナイメージを作成する処理は次項 (cloudbuild.yaml内) で指定します。

Build の手順を記載したビルド構成ファイル (cloudbuild.yaml) を追加する

最後にビルド構成ファイルを作成します。 今回のやりたい手順は次の2つです。

  • 前項の Dockerfile を元にカスタムイメージを作成
  • カスタムイメージを使って build と deploy を行う

構成ファイルのオプションについては 公式のここ に記載されています。
作成したものは次の通り。

cloudbuild.yaml

steps:
#--------------------------------------------------------------------------------
# (1/2) build と deploy に使うカスタムイメージを作成 (Including gcloud, jdk, maven)
#--------------------------------------------------------------------------------
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '--tag=gcr.io/$PROJECT_ID/gcloud-maven', '-f', 'Dockerfile.gcloud-maven', '.']

#--------------------------------------------------------------------------------
# (2/2) カスタムイメージで build と deploy を行う
#--------------------------------------------------------------------------------
- name: 'gcr.io/$PROJECT_ID/gcloud-maven'
  args: ['mvn', 'clean', 'package', 'appengine:deploy']

images: ['gcr.io/$PROJECT_ID/gcloud-maven']
timeout: 1200s

※ 各ビルドステップとビルド全体はデフォルトだと
 10分でタイムアウト するので必要なら調整します。

以上でデプロイ出来るようになりました。

Cloud Build でデプロイする

公式を参考 にローカルで gcloud builds submit コマンドを叩いて Cloud Build を起動します。
ローカルのソースは Cloud Storage 経由でコンテナに渡されます。

デプロイに成功すると次のような感じ。

> gcloud builds submit
Creating temporary tarball archive of 9 file(s) totalling 3.9 KiB before compression.
Some files were not included in the source upload.
(中略)
Step #1: [INFO] GCLOUD: To view your application in the web browser run:
Step #1: [INFO] GCLOUD:   $ gcloud app browse --project=springboot-webapp-project
Step #1: [INFO] ------------------------------------------------------------------------
Step #1: [INFO] BUILD SUCCESS
Step #1: [INFO] ------------------------------------------------------------------------
Step #1: [INFO] Total time: 10:04 min
Step #1: [INFO] Finished at: 2019-08-13T07:25:39+00:00
Step #1: [INFO] Final Memory: 32M/99M
Step #1: [INFO] ------------------------------------------------------------------------
Finished Step #1
(後略)

上記をWEBコンソールで確認すると次のような感じ。
image.png

以上で完了です。

Cloud Build がコケる場合

もしエラーでコケるようであれば次の画面で手がかりが得られます。
image.png

デプロイしたアプリを停止する

アプリの停止については 前回の記事 を参考にしてください。

以上です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?