4
2

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 3 years have passed since last update.

SpringBoot + GradleのプロジェクトのCIをGitHub Actions + Dockerで回す(改)

Last updated at Posted at 2020-05-03

はじめに

Spring Boot + GradleのプロジェクトのCIをGitHub Actions + Dockerで回すということを先日から試している。
こちらのドキュメントのやり方では、その都度イメージをビルドしてしまうので、非効率であるという指摘をもらった。

そこで、先日の記事とは別のやり方を試してみた。

以下、手順。

  1. パブリックなカスタムDockerイメージを作る
  2. workflow.ymlを修正
  3. コミットをプッシュする

パブリックなカスタムDockerイメージを作る

先日の記事と同様にamazoncorretto:11.0.7というDockerイメージを使用する。
ただ、このイメージはかなりミニマムに作ってあり、デフォルトではtargzipコマンドが使えない。
このままでは、リポジトリのチェックアウトなどができないので、これらをインストールしたイメージを用意する必要がある。

まずは、amazoncorretto:11.0.7をベースに自前のイメージを作成する。
DockerHubのパブリックなリポジトリにプッシュするという前提で進める。

最初に下のようなDockerfileを用意する。
targzipをインストールするだけの簡単なものになっている。

Dockerfile
FROM amazoncorretto:11.0.7
RUN yum install -y tar gzip

このDockerfileを使って、イメージをビルドする。

docker build .

DockerHubにリポジトリを作る。

image.png

DockerHubにログインする。
パスワードにはDockerHub上で作成したトークンを入力する。

docker login

先ほどビルドしたイメージに名前とタグを付ける。

docker tag {ImageID} shavada/mycorretto:11.0.7

リポジトリにイメージをプッシュする。

docker push shavada/mycorretto:11.0.7

これで、DockerHubからイメージをpullできるようになる。

workflow.ymlを修正

workflow.ymlを改めて書き直す。

./.github/workflows/workflow.yml
name: SpringBoot CI with Gradle

on:
  push:
    branches: [ master ]

jobs:
  test-build:
    runs-on: ubuntu-latest
    container:
      image: 'shavada/mycorretto:11.0.7'
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Add exec Permission
        run: chmod +x gradlew
      - name: Build with Gradle
        run: ./gradlew build
      - name: Archive production artifacts
        uses: actions/upload-artifact@v2
        with:
          name: demo.zip
          path: build/libs/demo-0.0.1-SNAPSHOT.jar
      - name: Archive test reports
        uses: actions/upload-artifact@v2
        with:
          name: test-reports.zip
          path: build/reports/tests/test

下のURLのドキュメントにも書かれている通り、ジョブの最初でcontainerを指定できる。

このようにしておくと、ジョブ内の全てのステップで同じコンテナが使用される。
また、先の記事ようにわざわざDockerfileを使ってその都度イメージをビルドすることなく、イメージをプルしてくるだけで済む。

プッシュする

修正のコミットをプッシュすると、ワークフローが成功する。
ジョブの最初にコンテナを作成し、その中で処理を行った後、最後にコンテナを片付けているのが分かる。
image.png

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?