Skip to the content.

CI/CD パイプライン

概要

GitHub Actionsを使用した自動デプロイパイプラインを構築しています。

パイプライン構成

flowchart LR subgraph GitHub["GitHub"] PUSH[Push to main] GA[GitHub Actions] end subgraph Auth["認証"] WIF[Workload Identity
Federation] SA[Service Account] end subgraph GCP["Google Cloud"] AR[Artifact Registry] CR[Cloud Run] end PUSH --> GA GA -->|OIDC| WIF WIF -->|偽装| SA GA -->|Build & Push| AR GA -->|Deploy| CR

ワークフロー

Deploy to Cloud Run

トリガー: main ブランチへのプッシュ(docsとmdファイルを除く)

flowchart TB A[Checkout] --> B[Authenticate to GCP] B --> C[Setup Cloud SDK] C --> D[Configure Docker] D --> E[Build Image] E --> F[Push to Artifact Registry] F --> G[Deploy to Cloud Run] G --> H[Show URL]

ステップ詳細

ステップ 説明
Checkout リポジトリをチェックアウト
Authenticate Workload Identity Federationで認証
Setup Cloud SDK gcloudをセットアップ
Configure Docker Artifact Registry用にDocker認証
Build Image Dockerイメージをビルド(sha + latest)
Push Artifact Registryにプッシュ
Deploy Cloud Runにデプロイ
Show URL デプロイ先URLを表示

GitHub Pages

トリガー: main ブランチへのプッシュ(docsの変更時)

docs/配下のMarkdownをJekyllでビルドし、GitHub Pagesにデプロイします。


認証方式

Workload Identity Federation

サービスアカウントキーを使用せず、OIDCトークンで認証します。

- id: auth
  uses: google-github-actions/auth@v2
  with:
    workload_identity_provider: 'projects/330887614596/locations/global/workloadIdentityPools/github-actions-pool/providers/github-actions-provider'
    service_account: 'github-actions-deployer@sanwa-appsheet-vertex.iam.gserviceaccount.com'

必要なパーミッション

permissions:
  contents: read
  id-token: write  # OIDC認証に必須

設定ファイル

.github/workflows/deploy.yml

name: Deploy to Cloud Run

on:
  push:
    branches:
      - main
    paths-ignore:
      - 'docs/**'
      - '*.md'

env:
  PROJECT_ID: sanwa-appsheet-vertex
  REGION: asia-northeast1
  SERVICE_NAME: appsheet-ai-processor

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

    steps:
      - uses: actions/checkout@v4

      - uses: google-github-actions/auth@v2
        with:
          workload_identity_provider: '...'
          service_account: '...'

      - uses: google-github-actions/setup-gcloud@v2

      - run: gcloud auth configure-docker ...

      - run: docker build ...

      - run: docker push ...

      - run: gcloud run deploy ...

デプロイ設定

Cloud Run

項目
サービス名 appsheet-ai-processor
リージョン asia-northeast1
サービスアカウント ai-processor@
認証 未認証の呼び出しを許可
メモリ 512Mi
タイムアウト 300秒
最小インスタンス 0
最大インスタンス 10

Artifact Registry

項目
リポジトリ appsheet-ai-processor
リージョン asia-northeast1
イメージ名 processor
タグ {commit-sha}, latest
クリーンアップ 最新2バージョン保持

手動デプロイ

GitHub Actionsを使わず手動でデプロイする場合:

# Artifact Registryへの認証
gcloud auth configure-docker asia-northeast1-docker.pkg.dev

# イメージのビルド
docker build -t asia-northeast1-docker.pkg.dev/sanwa-appsheet-vertex/appsheet-ai-processor/processor:latest .

# イメージのプッシュ
docker push asia-northeast1-docker.pkg.dev/sanwa-appsheet-vertex/appsheet-ai-processor/processor:latest

# Cloud Runへのデプロイ
gcloud run deploy appsheet-ai-processor \
  --image=asia-northeast1-docker.pkg.dev/sanwa-appsheet-vertex/appsheet-ai-processor/processor:latest \
  --region=asia-northeast1 \
  --service-account=ai-processor@sanwa-appsheet-vertex.iam.gserviceaccount.com \
  --allow-unauthenticated \
  --memory=512Mi \
  --timeout=300

トラブルシューティング

認証エラー

Error: Unable to retrieve access token

確認事項:

デプロイエラー

Error: Permission denied

確認事項:

イメージプッシュエラー

Error: denied: Permission denied

確認事項: