はじめに
Spring Boot + GradleのプロジェクトのCIをGitHub Actions + Dockerで回すということを先日から試している。
こちらのドキュメントのやり方では、その都度イメージをビルドしてしまうので、非効率であるという指摘をもらった。
そこで、先日の記事とは別のやり方を試してみた。
以下、手順。
- パブリックなカスタムDockerイメージを作る
- workflow.ymlを修正
- コミットをプッシュする
パブリックなカスタムDockerイメージを作る
先日の記事と同様にamazoncorretto:11.0.7
というDockerイメージを使用する。
ただ、このイメージはかなりミニマムに作ってあり、デフォルトではtar
やgzip
コマンドが使えない。
このままでは、リポジトリのチェックアウトなどができないので、これらをインストールしたイメージを用意する必要がある。
まずは、amazoncorretto:11.0.7
をベースに自前のイメージを作成する。
DockerHubのパブリックなリポジトリにプッシュするという前提で進める。
最初に下のようなDockerfileを用意する。
tar
とgzip
をインストールするだけの簡単なものになっている。
FROM amazoncorretto:11.0.7
RUN yum install -y tar gzip
このDockerfileを使って、イメージをビルドする。
docker build .
DockerHubにリポジトリを作る。
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を改めて書き直す。
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を使ってその都度イメージをビルドすることなく、イメージをプルしてくるだけで済む。
プッシュする
修正のコミットをプッシュすると、ワークフローが成功する。
ジョブの最初にコンテナを作成し、その中で処理を行った後、最後にコンテナを片付けているのが分かる。