4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Intimate MergerAdvent Calendar 2024

Day 15

GitHub AppとCloud Runを活用した組織向けPR Agent環境構築

Last updated at Posted at 2024-12-14

はじめに

前回の記事では、PR Agent導入までのプロセスと導入した感想について記述しました。

この記事では、GitHub Appを活用し、Cloud Run上で動作するPR Agent環境の構築手順を解説します。本記事を読むことで、以下の内容を習得できます。

  • GitHub Appを使ったリポジトリ運用の効率化
  • Cloud Runを利用したセキュアなデプロイ方法

組織でPR Agentを利用する場合に、リポジトリごとの個別設定を不要にし、全体で統一的に利用可能な環境を目指します。

本記事では、Google Cloudを利用した構築を中心に解説しますが、AWS環境での利用については公式リポジトリをご参照ください。

PR Agent公式ドキュメント(AWS Lambda版)

全体の流れ

本記事で構築するシステムでは、GitHub AppとCloud Runを活用し、組織全体で効率的にPR Agentを運用できる環境を作ります。そのための手順を大まかに示すと、次のようになります。

  1. GitHub Appの作成と設定: GitHubリポジトリのイベントを受信するアプリを作成
  2. OpenAIのAPI設定: PRレビューの生成に使用するAPIキーを取得
  3. Google Cloud環境の構築: Terraformを用いて、Cloud Runをデプロイする環境を構築
  4. Webhook設定とアプリインストール: GitHub AppをWebhook経由でCloud Runと連携

次に、これらの手順に基づくシステム全体の動作イメージを図示します。

システム全体図

以下の図は、GitHub AppとCloud Runを活用したPR Agentの動作フローを示します。

image.png

処理の流れは以下の通りです。

  1. Pull Request(PR)上で /review/improve のコマンドをコメントとして送信
  2. GitHub Appに設定されたWebhook URLへイベントを送信
  3. Webhookを受け取ったCloud RunのWebサーバーがPRの情報を取得
  4. WebサーバーがPRの情報を基にプロンプトを生成し、OpenAIのAPIに送信
  5. APIからのレスポンスを基にレビューコメントを作成し、PRにコメントを投稿

構築手順

前提条件

以下のアカウントや環境が準備されていることを前提とします。

  • GitHubアカウント: 組織の管理権限が付与されていること
  • OpenAIアカウント: 支払い情報などが設定されていること
  • Google Cloudアカウント: アカウントとプロジェクトが作成されていること

GitHub Appの作成と設定

Open AIの設定

Google Cloudでの環境構築

Secret Managerにシークレットを追加

Google Cloud Secret Managerで以下の名前でシークレットを作成

  • pr-agent-github-private-key: GitHub Appの秘密鍵
  • pr-agent-github-webhook-secret: 任意の推測されづらい文字列を入力
  • pr-agent-openai-key: OpenAIで発行したAPIキー

セキュリティ上、シークレット値はTerraformで直接扱わず、Google Cloudコンソールで作成したものを参照します。

pr-agent-github-webhook-secretの値は後のGitHub Appの設定で利用します。
値が流出すると、デプロイしたCloud Runを不正利用される恐れがあるので推測されづらい値を指定することが重要です。

Cloud Runの構築

Terraformを使用してCloud Run環境を構築します。ここは各セクションに分割して要点のみ記述しています。
実際に利用できるtfファイルについてはこちらを参照してください。

1. サービスアカウントの作成

Cloud Runの実行に必要な権限を持つアカウントを作成

resource "google_service_account" "pr-agent" {
  account_id   = "pr-agent"
  display_name = "PR Agent service account"
  description  = "Managed by Terraform."
}

2. シークレットへのアクセス権限付与

Secret Managerに格納したAPIキーやWebhookのシークレットを読み取る権限をサービスアカウントに付与

data "google_secret_manager_secret" "pr-agent-openai-key" {
  secret_id = "pr-agent-openai-key"
}

resource "google_secret_manager_secret_iam_member" "secret-accessor-pr-agent-openai-key" {
  secret_id = data.google_secret_manager_secret.pr-agent-openai-key.secret_id
  role      = "roles/secretmanager.secretAccessor"
  member    = "serviceAccount:${google_service_account.pr-agent.email}"
}

# 以下、他のシークレットについても設定

3. Cloud Runサービスの作成

PR Agentが動作する実行環境を作成

resource "google_cloud_run_v2_service" "pr-agent" {
  name     = "im-pr-agent"
  location = "asia-northeast1"

  template {
    containers {
      name  = "app"
      image = "codiumai/pr-agent:0.24-github_app"
      ports {
        name           = "http1"
        container_port = 3000
      }
      env {
        name  = "OPENAI.KEY"
        value_source {
          secret_key_ref {
            secret  = "pr-agent-openai-key"
            version = "latest"
          }
        }
      }
      # 以下、その他環境変数やprobeの設定を指定
    }

    service_account = google_service_account.pr-agent.email
    timeout         = "300s"
  }
}

4. Cloud Runの公開設定

GitHubからのWebhookを受け取るためにCloud Runサービスを公開

resource "google_cloud_run_service_iam_binding" "pr-agent" {
  role    = "roles/run.invoker"
  members = ["allUsers"]
}

デプロイ完了後、Cloud RunコンソールからCloud RunのURLを取得します。

Cloud Runの環境変数でPR Agentの設定を変更することができます。

設定項目一覧は以下のファイルで確認できるので、動作を変更したい場合は参照してみてください。(環境変数で指定する場合は大文字で指定します)
https://github.com/Codium-ai/pr-agent/blob/v0.24/pr_agent/settings/configuration.toml

Webhook設定とアプリインストール

以上の手順で構築完了です!
許可したリポジトリのPRコメントで/reviewなどで動作するでしょう。

image.png

おわりに

PR Agentを組織で利用するために、GitHub AppとCloud Runにより構築する手順を紹介しました。

引き続き、明日以降のアドベントカレンダーの記事もぜひお楽しみに!

4
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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?