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 の連携
下記のページに説明があります。
- 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 の無料枠になるべく収まるように工夫しましょう。