Closed7

GitHub Packages with Container registry(Private)へGitHub Actionからpushしてみる

shuntakashuntaka

既定では、ユーザー インターフェイスで personal access token (classic) の write:packages スコープを選択すると、repo スコープも選択されます。 repo スコープは不要に広いアクセス権を提供するので、特に GitHub Actions ワークフローでの利用は避けることをお勧めします。 詳細については、「GitHub Actions のセキュリティ強化」を参照してください。 回避策として、URL https://github.com/settings/tokens/new?scopes=write:packages のユーザー インターフェイスで自分の personal access token (classic) だけの write:packages スコープを選択できます。

これ面白いな。https://github.com/settings/tokens/new?scopes=write:packages だとrepoスコープがつかない。出来れば最低限にしたいから、活用しない手はない

shuntakashuntaka

コンテナのビルドとpush

export IMAGE_NAME=backend
# 個人のpackagesにアップロードする場合は、GitHubのgithub.com/OWNER名を指定
export OWNER=shuntaka9576
export REGISTORY_NAME=ghcr.io/$OWNER
export COMMITHASH=$(git rev-parse --short HEAD)

export CR_PAT="$TOKEN" 
echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin

docker build -t $IMAGE_NAME . -f Dockerfile.backend
docker tag $IMAGE_NAME \
  $REGISTORY_NAME/$IMAGE_NAME:$COMMITHASH

docker push $REGISTORY_NAME/$IMAGE_NAME:$COMMITHASH

こんな感じに見えるようになる。多分デフォルトprivate

shuntakashuntaka

PAT(CR_PAT)なしで、secrets.GITHUB_TOKENで行けました。以下の設定は最後を除いて必要です。

リポジトリをリンク。これは単にREADME.mdが連携されるだけ

リポジトリから実行されるGHAのアクセス許可をする


実行権限をWriteへ変更

この設定は不要!!!

shuntakashuntaka

GHAファイルを書く。ポイントは、packages: write

.github/workflows/release-backend-container.yml
name: Release backend container

on:
  push:
    branches:
      - main
    paths:
      - backend/Dockerfile
      - backend/src/*
      - .github/workflows/release-backend-container.yml
      - .github/workflows/dispatch-create-backend-container.yml

permissions:
  id-token: write
  contents: read
  actions: read
  packages: write

jobs:
  build-backend-container:
    name: build backend container
    uses: ./.github/workflows/dispatch-create-backend-container.yml
    secrets: inherit

.github/workflows/dispatch-create-backend-container.yml
name: Create backend container

on:
  workflow_call:

env:
  REGISTORY_NAME: ghcr.io/shuntaka9576
  IMAGE_NAME: backend
  CACHE_PATH: /tmp/.buildx-cache-backend

permissions:
  id-token: write
  contents: read
  actions: read
  packages: write

jobs:
  build-backend-container:
    runs-on: ubuntu-latest
    timeout-minutes: 15

    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Cache Docker layers
        uses: actions/cache@v3
        with:
          path: ${{ env.CACHE_PATH }}
          key: ${{ runner.os }}-${{ env.CACHE_PATH }}-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-${{ env.CACHE_PATH }}
      - name: Create tag
        run: |
          COMMIT_HASH=$(git rev-parse --short "$GITHUB_SHA")
          TAG=${{ env.REGISTORY_NAME }}/${{ env.IMAGE_NAME }}:$COMMIT_HASH
          echo "TAGS=$TAG" >> $GITHUB_ENV
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v3
        with:
          context: .
          tags: ${{ env.TAGS }}
          push: true
          file: Dockerfile.backend
          cache-from: type=local,src=${{ env.CACHE_PATH }}
          cache-to: type=local,dest=${{ env.CACHE_PATH }}-new,mode=max
      - name: Move cache
        run: |
          rm -rf ${{ env.CACHE_PATH }}
          mv ${{ env.CACHE_PATH }}-new ${{ env.CACHE_PATH }}

このスクラップは2023/02/25にクローズされました