G-gen の武井です。当記事では GitHub の release
イベントをトリガーにして、Docker イメージを Artifact Registry にプッシュする方法について解説します。
はじめに
概要
当記事では、GitHub の release
イベントが発生すると、それをトリガーとして Docker イメージをビルドしたのち、Artifact Registry にプッシュするワークフローについて解説します。
ワークフロー
GitHub Actions で自動化したい処理とその内容・条件を定義したものを ワークフロー と言います。
ワークフローは YAML 形式 で記述して .github/workflows ディレクトリ に配置することで利用できます。
- 参考:ワークフローについて
GitHub Actions
GitHub Actions とは、ソースコード管理ツールである GitHub に組み込まれた機能の一つで、リポジトリで管理されるソースコードをもとに CI/CD(継続的インティグレーション / 継続的デリバリー)を実現します。
ワークフロー
概要
今回作成するワークフローの概要(処理の流れ)は以下のようになります。
リリースの検知
- GitHub の
release
イベントが発生したときにワークフローをトリガーします。
- GitHub の
Docker イメージのビルド
- ワークフロー内で Docker を使用してイメージを作成します。
Google Artifact Registry にプッシュ
- ビルドした Docker イメージを Artifact Registry にアップロードします。
release とは
GitHub のリリース機能は、ソフトウェアのリリース管理を行うための仕組みで、リリースタグを用いて特定のバージョンを管理できます。
本ワークフローでは、このリリースタグを活用し、新しいリリースが作成されるたび(release
イベントの発生時)に Docker イメージをビルドし、同じリリースタグを付与したイメージとして Artifact Registry にプッシュします。
これにより、GitHub のリリース管理とコンテナのバージョニングを統合し、一貫性のある運用が可能になります。
構成
ワークフローと Google Cloud の関係性を表すと以下の通りです。
ソースコード
免責事項
当記事で紹介するプログラムのソースコードは、ご自身の責任のもと、使用、引用、改変、再配布して構いません。
ただし、同ソースコードが原因で発生した不利益やトラブルについては、当社は一切の責任を負いません。
ディレクトリ構成
. ├── .github │ └── workflows │ └── release.yaml └── apps ├── demoapp1 │ ├── Dockerfile │ ├── main.py │ └── requirements.txt └── demoapp2 ├── Dockerfile ├── main.py └── requirements.txt
ワークフロー(release.yaml)
50行目
の Workload Identity プールおよびプロバイダの作成方法は以下の記事をご参照ください。
name: Build and Push images with release tag # リリースイベント(published)をトリガーにワークフローを実行 on: release: types: [published] jobs: # Google Cloud SDK のセットアップジョブ sdk: runs-on: ubuntu-latest steps: - name: 'Set up Cloud SDK' uses: 'google-github-actions/setup-gcloud@v2' with: version: '>= 363.0.0' # Dockerイメージのビルドおよび Artifact Registry へのプッシュジョブ build-and-push: runs-on: ubuntu-latest timeout-minutes: 300 needs: [sdk] strategy: matrix: # 複数のアプリケーション(例: demoapp1, demoapp2)に対して並列実行 appName: - demoapp1 - demoapp2 permissions: id-token: write contents: read env: REPO: 'release-event-demo-repository' GAR: 'asia-northeast1-docker.pkg.dev/yutakei' steps: # ステップ1: リポジトリのコードをチェックアウト - uses: actions/checkout@v4 name: 'Checkout code' id: checkout-code # ステップ2: Google Cloud に認証(Workload Identity を利用) - uses: 'google-github-actions/auth@v2' name: 'Authenticate with Google Cloud' id: auth-gcloud with: project_id: yutakei workload_identity_provider: 'projects/933617552181/locations/global/workloadIdentityPools/gha-demo-pool/providers/gha-demo-provider' # ステップ3: アプリケーションディレクトリのパスを環境変数 APP_DIR に設定 - name: 'Set up app dir name' id: set-app-dir run: echo "APP_DIR=apps/${{ matrix.appName }}" >> $GITHUB_ENV # ステップ4: Dockerイメージ名として利用する変数 IMAGE_NAME を設定 - name: 'Set up app name variable' id: set-app-name run: echo "IMAGE_NAME=${{ matrix.appName }}" >> "$GITHUB_ENV" # ステップ5: Dockerイメージのビルド、タグ付け、Artifact Registry へのプッシュ - name: Build and Push image to Google Cloud Artifact Registry id: build-and-push-image run: | # Dockerクライアントで Artifact Registry へアクセスするための認証を設定 gcloud auth configure-docker asia-northeast1-docker.pkg.dev --quiet # APP_DIR 内のDockerfileを使ってイメージをビルド(linux/amd64プラットフォーム指定) docker build --platform linux/amd64 -t "${REPO}/${IMAGE_NAME}" ${APP_DIR} # ビルドされたイメージに、GitHubリリースタグ(github.ref_name)を付与 docker tag "${REPO}/${IMAGE_NAME}:latest" "${GAR}/${REPO}/${IMAGE_NAME}:${{github.ref_name}}" # タグ付けされたイメージをArtifact Registryにプッシュ docker push "${GAR}/${REPO}/${IMAGE_NAME}:${{github.ref_name}}"
デモ
リリース作成
ワークフローを起動するには、GitHub 上でリリースを作成します。
1. GitHub のリポジトリページにアクセスし、「Releases」タブをクリック
2. 「New release」ボタンをクリック
3. 「タグ」を作成(例:
v1.0.0
)
4. 「タイトル」などを入力(任意)し、「Publish release」をクリックし
ワークフロー実行
リリース作成後、ワークフローが起動します。ワークフローは「Actions」タブから確認できます。
demoapp1 と demoapp2 に対し、リリースタグ(v1.0.0
)付きの Docker イメージをビルドし、Artifact Registry にプッシュしています。
関連記事
武井 祐介 (記事一覧)
クラウドソリューション部クラウドエンジニアリング課。
Google Cloud Partner Top Engineer 2025 選出。
趣味はロードレースやサッカー観戦、あとはゴルフと筋トレ。
Follow @ggenyutakei