🛠️
GitHub ActionsからDocker Imageをpublishする
方針
CLIなどを手で書くのを避け、できるだけ既存のGitHub Actionsにより自動化する
使うもの
- docker/login-action
- registryにログインする
- docker/metadata-action
- タグやlabelなどを生成する
- docker/build-push-action
- buildしてpushする
GitHub Container Registry (ghcr.io) を使う場合
workflowにpermissionを与える必要がある
permissions:
packages: write
docker/login-action
imageをpushするためにログインする
- uses: docker/login-action@v2
with:
# GitHub Container Registryの場合
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}
# Dockerhubの場合secretに設定が必要
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
docker/metadata-action
タグや色々なimage labelを生成する。詳しい使い方はドキュメント: https://github.com/docker/metadata-action#usage
- uses: docker/metadata-action@v4
id: meta # build-push-actionからoutputを使う
with:
images: ghcr.io/${{ github.repository }} # イメージ名
tags: | # 生成するタグの設定、複数設定したらその分全てタグが生成される
type=sha # commit shaをタグにする
type=semver,pattern={{version}} # git tagをタグにする
docker/build-push-action
buildしてpushする
- uses: docker/build-push-action@v4
with:
context: .
push: true # テスト時にfalseにしてdry-runもできる
tags: ${{ steps.meta.outputs.tags }} # metadata-actionから取ってくる
labels: ${{ steps.meta.outputs.labels }} # 同上
Discussion