概要
jib-maven-pluginを使ってコンテナイメージを作ってGitHub Packagesへデプロイする、というのをGitHub Actionsで行う方法です。
jib-maven-pluginでコンテナイメージをビルドする
jib-maven-pluginではbuildゴールでコンテナイメージをビルドしつつpushできます(ちなみに、コンテナイメージをビルドしつつローカルのDockerへ保存する場合はdockerBuildゴールを使用します)。
buildゴールに必要な値のいくつかはシステムプロパティで渡せます。
| 項目 | システムプロパティ |
|---|---|
| コンテナイメージ | jib.to.image |
| バージョン | jib.to.version |
| push先のユーザー名 | jib.to.auth.username |
| push先のパスワード | jib.to.auth.password |
コマンドの例は後ほど登場します。
GitHub Actionsのワークフロー定義を書く
ソースコードのチェックアウトやJavaのセットアップ、Mavenローカルリポジトリのキャッシュなどは一般的なJavaプロジェクトと同様です。
コンテナイメージのビルドとpushもMavenを用いるので、一般的なJavaプロジェクトとそう変わりはありません。
前のセクションで解説した値を設定しつつmvnコマンドを組み立てます。
pushするときのコンテナイメージ名はConfiguring Docker for use with GitHub Packagesにあるようにdocker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSIONという形式です。
push先のユーザー名はGitHubのアカウント、パスワードはPersonal access tokenです。
GitHub PackagesへJARをデプロイするという記事でも書いたのですが、GitHub ActionsではsecretsコンテキストからGITHUB_TOKENという名前でPersonal access tokenを取得できます。
以上のことから、コンテナイメージをビルドしてpushするmvnコマンドは次のようになります(ユーザー名はbackpaper0、GitHubリポジトリ名はdemorepoとします)。
mvn -B package jib:build \
-Djib.to.image=docker.pkg.github.com/backpaper0/demorepo/demo \
-Djib.to.version=latest \
-Djib.to.auth.username=backpaper0 \
-Djib.to.auth.password=${{ secrets.GITHUB_TOKEN }}
ワークフロー定義の例の全体は次の通りです。
name: Building container image with Jib
on:
push:
branches: [ master ]
jobs:
build:
name: Build container image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: 11
- uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Build by Jib
env:
CONTAINER_IMAGE: docker.pkg.github.com/backpaper0/demorepo/demo
run: |
mvn -B package jib:build -DskipTests \
-Djib.to.image=$CONTAINER_IMAGE \
-Djib.to.version=latest \
-Djib.to.auth.username=backpaper0 \
-Djib.to.auth.password=${{ secrets.GITHUB_TOKEN }}
以上です。