概要
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 }}
以上です。