GitHubのSpring BootアプリケーションをCloud Runにデプロイ

  • 2021-09-15
  • GCP
GCP

GitHub で管理している Spring Boot アプリケーションのソースコードプロジェクトの main ブランチにコミットがされた際に、Google Cloud Platform (GCP) の Cloud Build で Docker イメージのビルドを行い、ビルドされたイメージを Container Registry に Push し、Push されたイメージを使用して Cloud Run にアプリケーションをデプロイします。

Spring Boot アプリケーション

まず、Spring Boot Gradle Plugin で適当なアプリケーションを作成します。build.gradle は下記のような感じです。作成したアプリケーションのソースコードは GitHub で管理します。

plugins {
  id 'org.springframework.boot' version '2.5.4'
}
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'

group 'pro.hirooka'
version '1.0.0-SNAPSHOT'

repositories {
  mavenCentral()
}

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
  compileOnly 'org.projectlombok:lombok:1.18.20'
  annotationProcessor 'org.projectlombok:lombok:1.18.20'
}

Spring Boot アプリケーションを動かす Dockerfile

ソースコードプロジェクトのルートに Dockerfile を作成します。例えば下記のような感じです。

FROM openjdk:11-slim as builder
WORKDIR /app
COPY . .
RUN ./gradlew build

FROM openjdk:11-jre-slim
COPY --from=builder /app/build/libs/dqwapi-1.0.0-SNAPSHOT.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-XX:MaxRAMPercentage=75", "-Djava.security.egd=file:/dev/./urandom", "-Dserver.port=8080", "-jar", "/app.jar"]

Container Registry に Push するための YAML ファイル

ソースコードプロジェクトのルートに cloudbuild.yaml を作成します。例えば下記のような感じです。grc.io の後ろは GCP のプロジェクト名、その後ろはイメージの名前です。この YAML ファイルにより、GitHub に Push すると自動で GCP の Container Registry に Push されるようになります。

steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/hirooka-pro/dqwapi', '.']
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/hirooka-pro/dqwapi']

cloudbuild.yaml の説明については下記に。

GitHub と Cloud Build の連携

下記のページに説明があります。

Google Cloud

GitHub に新しい commit を push するたびに自動的にコードをビルドします。…

  • GCP の画面で Cloud Build API を有効にします。
  • GitHub の画面で Google Cloud Build アプリをインストールします。
  • その後、GCP の遷移し、トリガーを作成します。

この 3 つの作業により、GitHub に Push すると GCP の Container Registry に Docker イメージが Push されるようになります。

Cloud Run へのデプロイ

Container Registry のイメージのメニューから「Cloud Run にデプロイする」を選択し、設定を行うことで Docker イメージをデプロイすることができます。

設定の際に「ソース リポジトリから新しいリビジョンを継続的にデプロイする」を選択すると、GitHub の main ブランチに Push されると、後は自動で Cloud Run にデプロイすることができます。

料金

Docker イメージのサイズを小さくする、Cloud Run で使用する CPU やメモリを必要最小限にするなど、GCP の無料枠になるべく収まるように工夫しましょう。