プルリクエストコメントの承認
CodeBuild は、プルリクエストによってトリガーされるビルドをさらに制御するプルリクエストビルドポリシーをサポートしています。不明なユーザーからのプルリクエストは、変更がレビュー可能になるまで自動的に構築しないのが理想的です。この機能を使用すると、チームメンバーの 1 人に、まずコードを確認してからパイプラインを実行するよう要求できます。これは、不明なコントリビューターによって送信されたコードを構築する際のセキュリティ対策としてよく使用されます。
プルリクエストビルドポリシーを使用すると、コントリビューターのアクセス許可と承認ステータスに基づいて CodeBuild がプルリクエストのビルドをトリガーするタイミングを制御できます。これは、外部コラボレーターからのコントリビューションを受け入れるパブリックリポジトリまたはリポジトリにとって特に重要です。
この機能を有効にすると、次のいずれかの場合にのみプルリクエストに対してビルドがトリガーされます。
-
プルリクエストが、信頼できるコントリビューターによって作成された。
-
信頼されたコントリビューターが、特定のコメントを投稿してプルリクエストを承認した。
仕組み
- 信頼できるコントリビューター
-
信頼できるコントリビューターは、ソース管理システムの現在のロールがプルリクエストベースのポリシーで承認者ロールとして設定されているユーザーです。信頼できるコントリビューターがプルリクエストを作成すると、CodeBuild はビルドを自動的にトリガーし、現在の動作を維持します。
- 信頼できないコントリビューター
-
信頼できないコントリビューターは、承認者ロールのリストにロールが設定されていないユーザーです。信頼できないコントリビューターがプルリクエストを作成した場合:
-
CodeBuild は、ビルドステータスを「失敗」とマークし、「ビルドの開始に必要なプルリクエストの承認」というメッセージを表示します。
-
信頼されたコントリビューターが変更を確認し、
/codebuild_run(にコメントを投稿してビルドをトリガーする必要があります。例えば、<SHA_OF_THE_LATEST_COMMIT>)/codebuild_run(。046e8b67481d53bdc86c3f6affdd5d1afae6d369) -
CodeBuild はコメンダーのアクセス許可を検証し、承認されるとビルドをトリガーします。
-
ビルド結果がプルリクエストページで報告されます。
-
- コメント承認構文
-
信頼できるコントリビューターは、次のコメント形式を使用してビルドを承認できます。
-
/codebuild_run(- 指定されたコミット SHA に基づいてビルドをトリガーします。046e8b67481d53bdc86c3f6affdd5d1afae6d369)
-
設定
- デフォルトの動作
-
プルリクエストビルドポリシーは、新しく作成されたすべての CodeBuild プロジェクトでデフォルトで有効になっています。
- API パラメータ
-
プルリクエストのビルドポリシーは、次のアクションで
PullRequestBuildPolicyパラメータを使用して設定されます。-
CreateWebhook -
UpdateWebhook
-
PullRequestBuildPolicyの構造-
{ "requiresCommentApproval": "string", "approverRoles": ["string", ...] } requiresCommentApproval-
プルリクエストでビルドをトリガーする前に、コメントベースの承認が必要なタイミングを指定します。この設定では、ビルドを自動的に実行するか、コメントによる明示的な承認を必要とするかが決まります。
タイプ: 文字列
有効な値:
-
DISABLED- コメントの承認を必要とせずにトリガーを自動的に構築します。 -
FORK_PULL_REQUESTS- フォークされたリポジトリからのプルリクエストにのみコメントの承認が必要です (コントリビューターがいずれかの承認者ロールである場合を除く)。 -
ALL_PULL_REQUESTS- すべてのプルリクエストに、ビルドの実行前にコメントの承認が必要です (コントリビューターがいずれかの承認者ロールである場合を除く)。これは、デフォルト値です。
-
approverRoles-
コメントの承認が必要な場合にプルリクエストビルドの承認権限を持つリポジトリロールのリスト。これらのロールを持つユーザーのみが有効なコメント承認を行うことができます。プルリクエストコントリビューターがこれらのロールのいずれかである場合、そのプルリクエストビルドは自動的にトリガーされます。
型: 文字列の配列
GitHub プロジェクトの有効な値 (値は GitHub ロールにマッピングされます)。
-
GITHUB_ADMIN- リポジトリ管理者 -
GITHUB_MAINTAIN- リポジトリメンテナンス担当者 -
GITHUB_WRITE- 書き込みアクセス許可を持つユーザー -
GITHUB_TRIAGE- トリアージアクセス許可を持つユーザー -
GITHUB_READ- 読み取りアクセス許可を持つユーザー -
デフォルト:
["GITHUB_ADMIN", "GITHUB_MAINTAINER", "GITHUB_WRITE"]
GitLab プロジェクトの有効な値 (値は GitLab ロールにマッピングされます)。
-
GITLAB_OWNER- リポジトリ所有者 -
GITLAB_MAINTAINER- リポジトリメンテナンス担当者 -
GITLAB_DEVELOPER- 開発者アクセス許可を持つユーザー -
GITLAB_REPORTER- 報告者アクセス許可を持つユーザー -
GITLAB_PLANNER- プランナーアクセス許可を持つユーザー -
GITLAB_GUEST- ゲストアクセス許可を持つユーザー -
デフォルト:
["GITLAB_OWNER", "GITLAB_MAINTAINER", "GITLAB_DEVELOPER"]
Bitbucket プロジェクトの有効な値 (値は Bitbucket ロールにマッピングされます)。
-
BITBUCKET_ADMIN- リポジトリ管理者 -
BITBUCKET_WRITE- 書き込みアクセス許可を持つユーザー -
BITBUCKET_READ- 読み取りアクセス許可を持つユーザー -
デフォルト:
["BITBUCKET_ADMIN", "BITBUCKET_WRITE"]
-
例
- すべてのプルリクエストのコメント承認を有効にする
-
AWS CodeBuild SDK を使用してウェブフックのプルリクエストビルドポリシーを有効または無効にするには、
CreateWebhookまたはUpdateWebhookAPI メソッドのリクエスト構文でpullRequestBuildPolicyフィールドを使用します。詳細については、CodeBuild API リファレンスの「WebhookFilter」を参照してください。Github ロール「管理者」、「メンテナンス」、「書き込み」を持つユーザーが、信頼できるコントリビューターとして扱われます。
"pullRequestBuildPolicy": { "requiresCommentApproval": "ALL_PULL_REQUESTS", "approverRoles": ["GITHUB_ADMIN", "GITHUB_MAINTAIN", "GITHUB_WRITE"] } - リポジトリ管理者およびメンテナンス担当者に対してのみコメント承認を有効にする
-
GitHub ロール「管理者」、「メンテナンス」を持つユーザーが、信頼できるコントリビューターとして扱われます。
"pullRequestBuildPolicy": { "requiresCommentApproval": "FORK_PULL_REQUESTS", "approverRoles": ["GITHUB_ADMIN", "GITHUB_MAINTAINER"] } - コメント承認を無効にする
-
"pullRequestBuildPolicy": { "requiresCommentApproval": "DISABLED" }
AWS CloudFormation
AWS CloudFormation テンプレートを使用してウェブフックのプルリクエストビルドポリシーを有効または無効にするには、PullRequestBuildPolicy プロパティを使用します。AWS CloudFormation テンプレートの次の YAML 形式の部分は、すべてのプルリクエストに対してプルリクエストビルドポリシーが有効になっているウェブフックを持つプロジェクトを作成します。承認者として指定されたメンテナンスロールと管理者ロール。
CodeBuildProject: Type: AWS::CodeBuild::Project Properties: Name: MyProject ServiceRole: service-role Artifacts: Type: NO_ARTIFACTS Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:5.0 Source: Type: BITBUCKET Location: source-location Triggers: Webhook: true FilterGroups: - - Type: EVENT Pattern: PULL_REQUEST_CREATED,PULL_REQUEST_UPDATED - Type: BASE_REF Pattern: ^refs/heads/main$ ExcludeMatchedPattern: false PullRequestBuildPolicy: RequiresCommentApproval: ALL_PULL_REQUESTS ApproverRoles: - GITHUB_MAINTAIN - GITHUB_ADMIN
コンソール設定
AWS マネジメントコンソールを使用してウェブフックイベントをフィルタリングするには:
-
[コメント承認] では、すべてのプルリクエスト (
ALL_PULL_REQUEST) に対して無効または有効、またはフォークからのプルリクエスト (FORK_PULL_REQUEST) に対してのみ有効を選択します。 -
[承認者ロール] では、コメントの承認が必要な場合にプルリクエストビルドの承認権限を持つリポジトリロールを選択します。
詳細については、「CodeBuild API リファレンス」の「ビルドプロジェクトの作成 (コンソール)」および「WebhookFilter」を参照してください。