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

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

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

このチュートリアルでは、 GitLab CI/CD パイプラインジョブを実行するように CodeBuild プロジェクトを設定する方法について説明します。 GitLab または で GitLab セルフマネージドを使用する方法の詳細については CodeBuild、「」を参照してくださいのセルフマネージド GitLab ランナー AWS CodeBuild

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

  • を使用してOAuthアプリに接続します CodeConnections。OAuth アプリに接続するときは、 CodeBuild コンソールを使用して接続する必要があることに注意してください。詳細な手順については、「GitLab でのアクセス CodeBuild」を参照してください。

  • GitLab アカウント CodeBuild に接続します。これを行うには、 コンソールでソースプロバイダー GitLab として を追加できます。手順については、GitLab でのアクセス CodeBuild を参照してください。

    注記

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

    この機能では、 アプリmanage_runnerからの create_runner GitLab OAuth や などの追加のアクセス許可 CodeBuild が必要です。 CodeConnections 特定の GitLab アカウントに が存在する場合、アクセス許可の更新は自動的にリクエストされません。これを行うには、 CodeConnections コンソールに移動し、同じ GitLab アカウントへのダミー接続を作成して、追加の prmission を取得するための再認証をトリガーします。これにより、すべての既存の接続でランナー機能を使用できます。完了したら、ダミー接続を削除できます。

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

このステップでは、ウェブフックを使用して CodeBuild プロジェクトを作成し、 GitLab コンソールで確認します。

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

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

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

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

      • 認証情報 では、次のいずれかを選択します。

        • デフォルトのソース認証情報 を選択します。デフォルトの接続は、すべてのプロジェクトにデフォルトの GitLab 接続を適用します。

        • カスタムソース認証情報 を選択します。カスタム接続は、アカウントのデフォルト設定を上書きするカスタム GitLab接続を適用します。

        注記

        プロバイダーへの接続をまだ作成していない場合は、新しい GitLab接続を作成する必要があります。手順については、 CodeBuild に接続する GitLab を参照してください。

      • リポジトリ では、名前空間でプロジェクトパスを指定 GitLab して、 でプロジェクトの名前を選択します。

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

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

      • イベントタイプ で、WORKFLOW_JOB_QUEUED を選択します。これを有効にすると、ビルドは GitLab CI/CD パイプラインジョブイベントによってのみトリガーされます。

        注記

        CodeBuild は、ウェブフックに WORKFLOW_JOB_QUEUED イベントフィルターを含むフィルターグループがある場合にのみ、 GitLab CI/CD パイプラインジョブイベントを処理します。

        GitLab CI/CD パイプラインジョブイベントによってのみトリガーされるように設定を構築します。
    • [環境] で以下の操作を行います。

      • サポートされている環境イメージを選択し、 を計算します。 GitLab CI/CD パイプラインのラベルを使用して、イメージとインスタンスの設定を上書きするオプションがあることに注意してくださいYAML。詳細については、「ステップ 2: リポジトリに .gitlab-ci.yml ファイルを作成する」を参照してください。

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

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

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

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

ステップ 2: リポジトリに .gitlab-ci.yml ファイルを作成する

このステップでは、 で.gitlab-ci.ymlファイルを作成してビルド環境GitLabを設定し、 で GitLab セルフマネージドランナーを使用します CodeBuild。詳細については、「セルフマネージドランナーの使用」を参照してください。

GitLab CI/CD パイプラインを更新する YAML

リポジトリに移動https://gitlab.com/user-name/project-name/-/tree/branch-nameして.gitlab-ci.ymlファイルを作成します。ビルド環境を設定するには、次のいずれかを実行します。

  • CodeBuild プロジェクト名を指定できます。この場合、ビルドはコンピューティング、イメージ、イメージバージョン、インスタンスサイズに既存のプロジェクト設定を使用します。 GitLab ジョブの AWS関連設定を特定の CodeBuildプロジェクトにリンクするには、プロジェクト名が必要です。にプロジェクト名を含めることでYAML、 CodeBuild は正しいプロジェクト設定でジョブを呼び出すことができます。

    tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME

    $CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME は、ビルドを特定のパイプラインジョブの実行にマッピングし、パイプラインの実行がキャンセルされたときにビルドを停止するために必要です。

    注記

    必ず <project-name> は、 で作成したプロジェクトの名前と一致します CodeBuild。一致しない場合、 CodeBuild はウェブフックを処理しず、 GitLab CI/CD パイプラインがハングする可能性があります。

    GitLab CI/CD パイプライン の例を次に示しますYAML。

    workflow: name: HelloWorld stages: # List of stages for jobs, and their order of execution - build build-job: # This job runs in the build stage, which runs first. stage: build script: - echo "Hello World!" tags: - codebuild-myProject-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME
  • タグでイメージとコンピューティングタイプを上書きすることもできます。使用可能なイメージのリスト CodeBuildホストされた GitLab ランナーでサポートされているイメージをコンピューティングするについては、「」を参照してください。ラベル内のコンピューティングタイプとイメージは、プロジェクトの環境設定を上書きします。Amazon EC2コンピューティングビルドの環境設定を上書きするには、次の構文を使用します。

    tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - image:<environment-type>-<image-identifier> - instance-size:<instance-size>

    GitLab CI/CD パイプライン の例を次に示しますYAML。

    stages: - build build-job: stage: build script: - echo "Hello World!" tags: - codebuild-myProject-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - image:arm-3.0 - instance-size:small
  • タグでビルドに使用されるフリートを上書きできます。これにより、指定されたフリートを使用するようにプロジェクトで設定されたフリート設定が上書きされます。詳細については、「予約済みキャパシティフリートでビルドを実行する」を参照してください。Amazon EC2コンピューティングビルドのフリート設定を上書きするには、次の構文を使用します。

    tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:<fleet-name>

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

    tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:<fleet-name> - image:<environment-type>-<image-identifier>

    GitLab CI/CD パイプライン の例を次に示しますYAML。

    stages: - build build-job: stage: build script: - echo "Hello World!" tags: - codebuild-myProject-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:myFleet - image:arm-3.0
  • カスタムイメージで GitLab CI/CD パイプラインジョブを実行するために、 CodeBuild プロジェクトでカスタムイメージを設定し、イメージオーバーライドラベルを指定しないようにできます。 CodeBuild は、イメージオーバーライドラベルが指定されていない場合、プロジェクトで設定されたイメージを使用します。

に変更をコミットすると.gitlab-ci.yml、 GitLab パイプラインがトリガーされ、 build-jobはウェブフック通知を送信して、 でビルドを開始します CodeBuild。

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

デフォルトでは、 はセルフマネージドビルドを実行するときに buildspec コマンド CodeBuild を無視します GitLab 。ビルド中に buildspec コマンドを実行するには、 を のサフィックスとして追加buildspec-override:trueできますtags

tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - buildspec-override:true

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

セルフマネージドビルドで buildspec オーバーライドを使用する場合、いくつかの制限があります GitLab 。

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

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

  • ビルドコマンドが PRE_BUILDまたは INSTALLフェーズで失敗した場合、 CodeBuild はセルフマネージドランナーを起動せず、 GitLab CI/CD パイプラインジョブを手動でキャンセルする必要があります。

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

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

パイプラインジョブの場合 GitLab CI/CD pipeline run occurs, CodeBuild would receive the CI/CD pipeline job events through the webhook. For each job in the CI/CD pipeline, CodeBuild starts a build to run an ephemeral GitLab runner. The runner is responsible for executing a single CI/CD。ジョブが完了すると、ランナーと関連するビルドプロセスはすぐに終了します。

CI/CD パイプラインジョブログを表示するには、 のリポジトリに移動し GitLab、ビルド ジョブ を選択し、ログを確認する特定のジョブを選択します。

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

GitLab ウェブフックイベントをフィルタリングする (AWS CloudFormation)

テンプレートの AWS CloudFormation 次のYAMLフォーマットされた部分は、true と評価されたときにビルドをトリガーするフィルターグループを作成します。次のフィルターグループは、 GitLab CI/CD pipeline job request with a CI/CD正規表現 に一致するパイプライン名を指定します\[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: GITLAB Location: CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION Triggers: Webhook: true ScopeConfiguration: Name: group-name FilterGroups: - - Type: EVENT Pattern: WORKFLOW_JOB_QUEUED - Type: WORKFLOW_NAME Pattern: \[CI-CodeBuild\]