🐳
Spring BootアプリケーションをGitHub ActionsでDocker BuildしてPushする
./gradlew build
でビルドした結果をdocker/build-push-action
でうまく使えなかったので、泥臭く書いてみました。
v*.*.*
のようなタグがPushされたら動き、latest
と*.*.*
のtagがDockerHubにPushされます。
キャッシュ周りはひとまず省いてます。
docker/metadata-action
とかも組み合わせて使いたかったんですが…。
もっとスマートなやり方があれば教えていただけるとうれしいです…。
.github/workflows/docker-image.yml
name: Docker Image CI
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Docker Login
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Gradle Build
run: ./gradlew build
- name: Prepare build tag
id: tag
run: |
VERSION=`echo ${GITHUB_REF#refs/tags/} | grep -o '[0-9]*\..*'`
IMAGE=${{ secrets.DOCKER_HUB_USERNAME }}/リポジトリ名
TAGS=`echo ${IMAGE}:latest --tag ${IMAGE}:${VERSION}`
echo ::set-output name=TAGS::${TAGS}
- name: Build and push
run: >-
docker buildx build
--build-arg JAR_FILE=build/libs/\*.jar
--file ./Dockerfile
--platform linux/amd64,linux/arm64
--tag ${{ steps.tag.outputs.TAGS }}
--push .
Dockerfile
FROM openjdk:11-jre-slim
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Discussion