GitHub Actions に続き GitHub Package Registry も僕のアカウントで使えるようになりました。
この時は、コンテナをビルドして終わりでしたが Registry が使えるようになったので コンテナイメージを格納する処理を追加してみます。
事前にアクセストークンを取得して、リポジトリの Settings で Secret を追加しておきます。
ワークフロー定義。イメージビルド後に Package Registry (docker.pkg.github.com) にログイン、イメージを push する処理を追加。
jobs: package: runs-on: ubuntu-latest steps: : build-image: needs: package runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/download-artifact@master with: name: sb-sample-service.jar path: ./target - name: Build and push Docker image run: | docker build . --file Dockerfile --tag docker.pkg.github.com/kondoumh/sb-sample-service/app:latest docker login docker.pkg.github.com -u kondoumh -p ${{ secrets.DOCKER_REGISTRY_TOKEN }} docker push docker.pkg.github.com/kondoumh/sb-sample-service/app:latest
実行すると push 成功 しました。
格納されたコンテナを pull してみます。
$ docker login docker.pkg.github.com -u kondoumh Password: : Login Succeeded $ docker pull docker.pkg.github.com/kondoumh/sb-sample-service/app:latest 1.0: Pulling from kondoumh/sb-sample-service/app e7c96db7181b: Pull complete f910a506b6cb: Pull complete c2274a1a0e27: Pull complete 87e0b7342010: Pull complete Digest: sha256:97f2da5372e9f659dbe976e245835a4cb082960b2b6aac96ca6e84cdc7305d5b Status: Downloaded newer image for docker.pkg.github.com/kondoumh/sb-sample-service/app:latest $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE docker.pkg.github.com/kondoumh/sb-sample-service/app latest a9ed328094d5 31 minutes ago 138MB
大丈夫みたいです。
さて、上記ワークフローだと、Git のブランチ名やタグ名をイメージのタグ名に付与するような処理を書く必要があり、やや面倒です。探したらコンテナイメージのビルドとタグ付け、push までをやってくれる Action がありました。
Master ブランチでビルドした場合は latest タグをつけてくれるようです。これを使ってワークフローを書き直してみます。
: build-image: needs: package runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/download-artifact@master with: name: sb-sample-service.jar path: ./target - name: Build image and Publish to Registry uses: elgohr/Publish-Docker-Github-Action@master with: name: docker.pkg.github.com/kondoumh/sb-sample-service/app username: kondoumh password: ${{ secrets.DOCKER_REGISTRY_TOKEN }} registry: docker.pkg.github.com
run でコマンドを書くよりも行増えてますが、より宣言的なスタイルになっています。デフォルトだと docker.io に push しようとするので、registry パラメータで Package Registry の URL を指定する必要があります。
ログを見るとちゃんと latest タグをつけてくれています。
CI とレジストリを完全装備した GitHub、ソースコードだけでなく、ビルド成果物の生成と管理ができるようになってしまいました。