LoginSignup
0
0

More than 1 year has passed since last update.

Github Actions にてコンテナを作成する

Posted at

GitHub Actions でコンテナを作成し、GitHub Container Registry へ格納します。これまでも同様の処理はやっていたのですが、暫く関連するライブラリのバージョンを更新しておらず、古くなってしまっていたため、最新の記述方法を整理しました。

やる事

  • GitHub Actions でコンテナを作成する
  • コンテナをGitHub Container Registry へ格納する
  • 2022/12/24時点の最新の書き方に変更する

Before

私がこれまで使っていたワークフローはこちらです。結構古くなってますね。

build.yml
name: Publish Docker image
on:
  push:
    branches:
      - main
jobs:
  main:
    name: Push Docker image to Github Container Registry
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login
        run: echo $CR_PAT | docker login ghcr.io -u ${OWNER,,} --password-stdin
        env:
          CR_PAT: ${{ secrets.GITHUB_TOKEN }}
          OWNER: ${{ github.repository_owner }}
      - name: Push to GitHub Container Registry
        uses: docker/build-push-action@v3
        with:
          push: true
          tags: ghcr.io/example/container_name:latest # ここは都度書き換え

After

以下の通り書き換えました。コード数は少し長くなりましたが、これで一安心です。
途中でコンテナのバージョンを指定する為に package.json からバージョン情報を取得していますが、これは私がたまたま node.js プロジェクトでの開発が多いからそうているだけですので、ここはご自身のお好みの方法に変えていただければ幸いです。

build.yml
name: Docker

on:
  workflow_dispatch:
  push:
    branches: ["master", "main"]
    tags: ["v*.*.*"]
  pull_request:
    branches: ["master", "main"]

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
      id-token: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Setup Docker buildx
        uses: docker/setup-buildx-action@v2.2.1

      - name: Log into registry ${{ env.REGISTRY }}
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v2.1.0
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      # 私は主にnode.jsで開発をしているのでpackage.jsonから取得していますが、ここは消しても問題ありません
      # 消した場合は最後の処理のバージョン取得方法を任意の方法へ書き換え下さい
      - name: Get version in package.json
        id: get-package-version
        run: echo VERSION=$(cat package.json | jq -r '.version') >> $GITHUB_OUTPUT

      - name: Build and push Docker image (latest)
        uses: docker/build-push-action@v3.2.0
        with:
          context: .
          push: ${{ github.event_name != 'pull_request' }}
          tags: 
            - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
            - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.get-package-version.outputs.VERSION }}
          cache-from: type=gha
          cache-to: type=gha,mode=max
0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0