🛠️

GitHub ActionsからDocker Imageをpublishする

2024/01/08に公開

方針

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