チュートリアル: CodeBuildホストされた GitHubアクションランナーを設定する - AWS CodeBuild

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

チュートリアル: CodeBuildホストされた GitHubアクションランナーを設定する

このチュートリアルでは、 GitHub アクションジョブを実行するように CodeBuild プロジェクトを設定する方法について説明します。で GitHub アクションを使用する方法の詳細については、 CodeBuild 「」を参照してくださいチュートリアル: CodeBuildホストされた GitHubアクションランナーを設定する。

このチュートリアルを完了するには、まず以下を行う必要があります。

  • 個人用アクセストークン、Secrets Manager シークレット、OAuthアプリ、または GitHub アプリに接続します。OAuth アプリに接続する場合は、 CodeBuild コンソールを使用して接続する必要があります。個人用アクセストークンを作成する場合は、 CodeBuild コンソールを使用するか、 を使用できますImportSourceCredentials API。詳細な手順については、「GitHub および での GitHub Enterprise Server アクセス CodeBuild」を参照してください。

  • GitHub アカウント CodeBuild に接続します。これを行うには、次のいずれかで実行できます。

    • コンソールでソースプロバイダー GitHub として を追加できます。個人用アクセストークン、Secrets Manager シークレット、OAuthアプリ、または GitHub アプリのいずれかに接続できます。手順については、GitHub および での GitHub Enterprise Server アクセス CodeBuild を参照してください。

    • GitHub 認証情報は 経由でインポートできますImportSourceCredentials API。これは、個人用アクセストークンでのみ実行できます。OAuth アプリを使用して接続する場合は、代わりに コンソールを使用して接続する必要があります。手順については、 アクセストークン (CLI) GitHub で接続する を参照してください。

    注記

    これは、 GitHub アカウントの に接続していない場合にのみ実行する必要があります。

ステップ 1: ウェブフックを使用してプロジェクトを作成する CodeBuild

このステップでは、ウェブフックを使用して CodeBuild プロジェクトを作成し、 GitHub コンソールで確認します。ソースプロバイダーとして GitHub Enterprise を選択することもできます。 GitHub Enterprise 内でウェブフックを作成する方法の詳細については、「」を参照してくださいGitHub 手動ウェブフック

ウェブフックを使用して CodeBuild プロジェクトを作成するには
  1. https://console.aws.amazon.com/codesuite/Codebuild/home で AWS CodeBuild コンソールを開きます。

  2. ビルドプロジェクトを作成します。詳細については、「ビルドプロジェクトの作成 (コンソール)」および「ビルドの実行 (コンソール)」を参照してください。

    • [Source (ソース)] で、次のようにします。

      • ソースプロバイダー で、 を選択しますGitHub

      • リポジトリ の場合は、 GitHub アカウント でリポジトリ を選択します。

      • リポジトリ URLには、 と入力しますhttps://github.com/user-name/repository-name

      注記

      デフォルトでは、プロジェクトは 1 つのリポジトリのWORKFLOW_JOB_QUEUEDイベントのみを受信します。組織またはエンタープライズ内のすべてのリポジトリのイベントを受信する場合は、「」を参照してくださいGitHub グローバルおよび組織のウェブフック

    • プライマリソースウェブフックイベント

      • Webhook - オプション の場合、コード変更がこのリポジトリ にプッシュされるたびに再構築を選択します。

      • イベントタイプ で、WORKFLOW_JOB_QUEUED を選択します。これを有効にすると、ビルドはGitHubアクションワークフロージョブイベントによってのみトリガーされます。

        注記

        CodeBuild は、ウェブフックに WORKFLOW_JOB_QUEUED イベントフィルターを含むフィルターグループがある場合にのみ、 GitHub アクションワークフロージョブイベントを処理します。

        GitHub Actions ワークフロージョブイベントによってのみトリガーされるように設定を構築します。
    • [環境] で以下の操作を行います。

      • サポートされている環境イメージを選択し、 を計算します。 GitHub アクションワークフロー のラベルを使用して、イメージとインスタンスの設定を上書きするオプションがあることに注意してくださいYAML。詳細については、「ステップ 2: アクションワークフローを更新する GitHub YAML」を参照してください

    • [Buildspec (Buildspec)] で、次のようにします。

      • がラベルとして追加されない限り、buildspec buildspec-override:trueは無視されることに注意してください。代わりに、 CodeBuild はセルフホストランナーを設定するコマンドを使用するように上書きします。

  3. デフォルト値を続行し、ビルドプロジェクトの作成 を選択します。

  4. で GitHub コンソールを開きhttps://github.com/user-name/repository-name/settings/hooks、ウェブフックが作成され、ワークフロージョブイベントを配信できることを確認します。

ステップ 2: アクションワークフローを更新する GitHub YAML

このステップでは、 の GitHub アクションワークフローYAMLファイルを更新GitHubしてビルド環境を設定し、 で GitHub アクションセルフホストランナーを使用します CodeBuild。詳細については、「セルフホストランナーでのラベルの使用」および「」を参照してください CodeBuildホストされた GitHub アクションランナーでサポートされているラベルオーバーライド

アクションワークフローを更新する GitHub YAML

GitHub アクションワークフローruns-onの設定に移動GitHubして更新YAMLし、ビルド環境を設定します。これを行うには、次のいずれかで実行できます。

  • プロジェクト名と実行 ID を指定できます。その場合、ビルドはコンピューティング、イメージ、イメージバージョン、インスタンスサイズに既存のプロジェクト設定を使用します。 GitHub アクションジョブの AWS関連設定を特定の CodeBuildプロジェクトにリンクするには、プロジェクト名が必要です。にプロジェクト名を含めることでYAML、 CodeBuild は正しいプロジェクト設定でジョブを呼び出すことができます。実行 ID を指定することで、 CodeBuild はビルドを特定のワークフロー実行にマッピングし、ワークフロー実行がキャンセルされたときにビルドを停止します。詳細については、github「コンテキスト」を参照してください。

    runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
    注記

    <project-name> は、前のステップで作成したプロジェクトの名前と一致します。一致しない場合、 CodeBuild はウェブフックを処理しず、アクションワークフローが GitHubハングする可能性があります。

    GitHub アクションワークフローの例を次に示しますYAML。

    name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} steps: - run: echo "Hello World!"
  • ラベルでイメージとコンピューティングタイプを上書きすることもできます。使用可能なイメージのリスト CodeBuildホストされた GitHub アクションランナーでサポートされているイメージを計算しますについては、「」を参照してください。ラベルのコンピューティングタイプとイメージは、プロジェクトの環境設定を上書きします。または Lambda コンピューティングビルドの CodeBuild EC2環境設定を上書きするには、次の構文を使用します。

    runs-on: - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }} - image:<environment-type>-<image-identifier> - instance-size:<instance-size>

    GitHub アクションワークフローの例を次に示しますYAML。

    name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - image:arm-3.0 - instance-size:small steps: - run: echo "Hello World!"
  • ラベルでビルドに使用されるフリートを上書きできます。これにより、指定されたフリートを使用するようにプロジェクトで設定されたフリート設定が上書きされます。詳細については、「予約済みキャパシティフリートでビルドを実行する」を参照してください。Amazon EC2コンピューティングビルドのフリート設定を上書きするには、次の構文を使用します。

    runs-on: - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }} - fleet:<fleet-name>

    フリートとビルドに使用されるイメージの両方を上書きするには、次の構文を使用します。

    runs-on: - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }} - fleet:<fleet-name> - image:<environment-type>-<image-identifier>

    GitHub アクションワークフローの例を次に示しますYAML。

    name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - image:arm-3.0 - instance-size:small steps: - run: echo "Hello World!"
  • カスタムイメージで GitHub アクションジョブを実行するために、 CodeBuild プロジェクトでカスタムイメージを設定し、イメージオーバーライドラベルを指定しないようにできます。 CodeBuild は、イメージオーバーライドラベルが指定されていない場合、プロジェクトで設定されたイメージを使用します。

  • 必要に応じて、 が CodeBuild サポートするラベルの外部にラベルを提供できます。これらのラベルは、ビルドの属性を上書きする目的で無視されますが、ウェブフックリクエストは失敗しません。例えば、 をラベルtestLabelとして追加しても、ビルドの実行は妨げられません。

注記

GitHubホストされたランナーによって提供される依存関係が 環境で CodeBuild使用できない場合は、ワークフロー実行の GitHub アクションを使用して依存関係をインストールできます。例えば、 setup-pythonアクションを使用してビルド環境に Python をインストールできます。

buildspec コマンドを実行する INSTALL、PRE_BUILD、および POST_BUILD フェーズ

デフォルトでは、セルフホスト GitHub アクションビルドを実行するときに、 は buildspec コマンド CodeBuild を無視します。ビルド中に buildspec コマンドを実行するには、ラベルにサフィックスとして buildspec-override:true を追加できます。

runs-on: - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }} - buildspec-override:true

このコマンドを使用すると、 CodeBuild はコンテナのプライマリソースフォルダactions-runnerに というフォルダを作成します。 GitHub アクションランナーがBUILDフェーズ中に開始されると、ランナーは actions-runner ディレクトリで実行されます。

セルフホスト GitHub アクションビルドで buildspec オーバーライドを使用する場合、いくつかの制限があります。

  • CodeBuild は、セルフホストランナーがBUILDフェーズで実行されるため、BUILDフェーズ中に buildspec コマンドを実行しません。

  • CodeBuild はDOWNLOAD_SOURCE、フェーズ中にプライマリソースまたはセカンダリソースをダウンロードしません。buildspec ファイルが設定されている場合、そのファイルのみがプロジェクトのプライマリソースからダウンロードされます。

  • ビルドコマンドが PRE_BUILDまたは INSTALLフェーズで失敗した場合、 CodeBuild はセルフホストランナーを起動せず、 GitHub アクションワークフロージョブを手動でキャンセルする必要があります。

  • CodeBuild は、有効期間が 1 時間のDOWNLOAD_SOURCEフェーズ中にランナートークンを取得します。PRE_BUILD または INSTALLフェーズが 1 時間を超えると、 GitHub セルフホストランナーが起動する前にランナートークンの有効期限が切れる可能性があります。

ステップ 3: 結果を確認する

GitHub アクションワークフローが実行されるたびに、 はウェブフックを介してワークフロージョブイベント CodeBuild を受け取ります。ワークフロー内のジョブごとに、 は一時的な GitHub アクションランナーを実行するビルド CodeBuild を開始します。ランナーは、単一のワークフロージョブを実行する責任があります。ジョブが完了すると、ランナーと関連付けられたビルドプロセスはすぐに終了します。

ワークフロージョブログを表示するには、 のリポジトリに移動し GitHub、アクション を選択し、目的のワークフローを選択し、ログを確認する特定のジョブを選択します。

ジョブが でセルフホストランナーによってピックアップされるのを待っている間、ログでリクエストされたラベルを確認できます CodeBuild。

ジョブのログをロードします。

ジョブが完了すると、ジョブのログを表示できます。

ジョブのログ。

フィルター GitHub アクションのウェブフックイベント (AWS CloudFormation)

テンプレートの AWS CloudFormation 次のYAMLフォーマットされた部分は、true と評価されたときにビルドをトリガーするフィルターグループを作成します。次のフィルターグループは、正規表現 に一致するワークフロー名を持つ GitHub アクションワークフロージョブリクエストを指定します\[CI-CodeBuild\]

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: GITHUB Location: CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION Triggers: Webhook: true ScopeConfiguration: Name: organization-name FilterGroups: - - Type: EVENT Pattern: WORKFLOW_JOB_QUEUED - Type: WORKFLOW_NAME Pattern: \[CI-CodeBuild\]

フィルター GitHub アクションのウェブフックイベント (AWS CDK)

次の AWS CDK テンプレートは、ビルドが true と評価されたときにビルドをトリガーするフィルターグループを作成します。次のフィルターグループは、 GitHub アクションワークフロージョブリクエストを指定します。

import { aws_codebuild as codebuild } from 'aws-cdk-lib'; import {EventAction, FilterGroup} from "aws-cdk-lib/aws-codebuild"; const source = codebuild.Source.gitHub({ owner: 'owner', repo: 'repo', webhook: true, webhookFilters: [FilterGroup.inEventOf(EventAction.WORKFLOW_JOB_QUEUED)], })

フィルター GitHub アクションのウェブフックイベント (Terraform)

次の Terraform テンプレートは、true と評価されたときにビルドをトリガーするフィルターグループを作成します。次のフィルターグループは、 GitHub アクションワークフロージョブリクエストを指定します。

resource "aws_codebuild_webhook" "example" { project_name = aws_codebuild_project.example.name build_type = "BUILD" filter_group { filter { type = "EVENT" pattern = "WORKFLOW_JOB_QUEUED" } } }