search
LoginSignup
22

More than 1 year has passed since last update.

posted at

Github ActionsでGithub Container RegistryにDocker imageをpushする最小Workflow

公式ではstarter-workflowsとしてDocker imageをbuildをしてGithub Container RegistryにpushするまでのWorkflowが用意されていますが、アクションを使っておらず泥臭くやっているので本記事でアクションを使ったWorkflow構成を記載します。

前提

今回取り扱うリポジトリのファイル構成はルート直下にDockerfileが存在するものとします。

-- 
|-- Dockerfile
|-- README.md
|-- .github
    |-- workflows
        |-- actions.yml
...

.github/workflows/action.yml
name: Build and Publish Docker

on:
  push:
    branches:
      - master

jobs:
  build_and_push:
    runs-on: ubuntu-latest
    env:
      IMAGE_NAME: sample-app
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.CR_PAT }}

      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:latest
            ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:1.0.0

ワークフロー解説

本ワークフローではbuild_and_pushというジョブを定義しています。
以降はそのジョブ内の各ステップが何をしているか軽く解説します。

checkout

ソースコードをcheckoutします。
actions/checkout@v2アクションを利用しています。

Set up Docker Buildx

docker/build-push-action@v2アクションでdocker buildのための必要なセットアップをここで行っています。
docker/setup-buildx-action@v1アクションを利用しています。

Login to GitHub Container Registry

GitHub Container Registryにdocker imageをpushするためにここでdocker loginを行います。
docker/login-action@v1アクションを利用します。
withで必要なパラメータを定義します。

パラメータ
registry Dockerレジストリを指定する
今回はGithub Container Registryにpushするのでghcr.ioを指定
未指定の場合はDocker Hubになる
username Dockerレジストリにpushするユーザを指定する
今回はリポジトリオーナー名を環境変数から指定※1
password DockerレジストリにpushするパスワードもしくはPersonal Access Tokenを指定する
今回はsecretsにCF_PATという名前で格納したPersonal Access Tokenを指定※2

※1: Github Actionsではデフォルトでいくつかの環境変数が用意されており、今回はその中から取得しました。
参考:Environment variables - GitHub Docs

※2: シークレットの設定方法はこちらを参照。
Encrypted secrets - GitHub Docs

Build and push

docker builddocker pushを行います。
docker/build-push-action@v2アクションを利用しています。
withで必要なパラメータを定義します。

パラメータ
context docker buildする際のパスもしくはURLを指定
actions/checkoutアクションを使った場合にパスの指定が可能
今回はcheckoutしたルート配下を指定
未指定の場合はGit contextとなる
push Dockerレジストリにpushする場合はtrueを指定
tags buildするimageにつけるタグを指定
タグは複数指定可能
今回はlatestと1.0.0のタグを付与
file 参照するDockerfileパスを指定
未指定の場合は./Dockerfileとなる
今回はこのパラメータは使用していないがルート直下以外のDockerfileを参照する場合は使用する

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
22