AWS CodeBuild で AWS CodePipeline を使用してコードをテストし、ビルドを実行する - AWS CodeBuild

AWS CodeBuild で AWS CodePipeline を使用してコードをテストし、ビルドを実行する

リリースプロセスを自動化するには、AWS CodePipeline を使用してコードをテストし、AWS CodeBuild でビルドを実行します。

次の表に示しているのは、タスクとその実行に使用できるメソッドです。を使用してこれらのタスクを実行することは、このトピックでは取り上げません。AWSSDKs

タスク 使用可能なアプローチ このトピックで説明するアプローチ
CodeBuild でビルドを自動化する CodePipeline を使用して、継続的な配信 (CD) パイプラインを作成する
  • CodePipeline コンソール

  • AWS CLI

  • AWS SDKs

  • CodePipelineコンソールの使用

  • を使用するには AWS CLI

  • このトピックの情報は、 を使用するように調整できますAWSSDKs。 詳細については、 用のcreate pipelineツールのSDKsセクションのプログラミング言語のアクションドキュメントAmazon Web Servicesを参照するか、CreatePipelineまたは の「」を参照してくださいAWS CodePipeline API リファレンス

既存の CodePipeline のパイプラインに CodeBuild でのテストおよびビルドの自動化を追加する
  • CodePipeline コンソール

  • AWS CLI

  • AWS SDKs

Prerequisites

  1. ビルドを計画する の質問に答えます。

  2. AWS ルートアカウントや管理者 IAM ユーザーの代わりに、IAM ユーザーを CodePipeline へのアクセスに使用している場合、AWSCodePipelineFullAccess という名前の管理ポリシーをユーザー (またはユーザーが属する IAM グループ) にアタッチします。AWS ルートアカウントは使用しないでください。このポリシーは、CodePipeline でパイプラインを作成するためのアクセス許可をユーザーに付与します。詳細については、 https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-consoleユーザーガイドの「 管理ポリシーのアタッチ」を参照してくださいIAM。

    注記

    ポリシーをユーザー (またはユーザーが属する IAM グループ) にアタッチする IAM エンティティは、ポリシーをアタッチするために IAM でのアクセス許可を持っている必要があります。詳細については、 ユーザーガイドの「ユーザー、グループ、および認証情報を管理するための権限の委任」を参照してくださいIAM。IAM

  3. CodePipeline サービスロールを作成します (AWS アカウントに既存のものがない場合)。CodePipeline は、このサービスロールを使用してユーザーに代わって AWS の他のサービス (AWS CodeBuild など) とやり取りします。たとえば、AWS CLI を使用して CodePipeline のサービスロールを作成するには、IAM の create-role コマンドを実行します。

    Linux, macOS, or Unix の場合:

    aws iam create-role --role-name AWS-CodePipeline-CodeBuild-Service-Role --assume-role-policy-document '{"Version":"2012-10-17","Statement":{"Effect":"Allow","Principal":{"Service":"codepipeline.amazonaws.com"},"Action":"sts:AssumeRole"}}'

    Windows の場合:

    aws iam create-role --role-name AWS-CodePipeline-CodeBuild-Service-Role --assume-role-policy-document "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"codepipeline.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}}"
    注記

    この CodePipeline のサービスロールを作成する IAM エンティティは、サービスロールを作成するために IAM のアクセス許可を持っている必要があります。

  4. CodePipelineサービスロールを作成した後、または、既存のものを識別した後、 CodePipeline ユーザーガイドの「デフォルトのCodePipelineサービスロールポリシーを確認する」の説明のとおりに、サービスロールにデフォルトのサービスロールポリシーを追加する必要があります (ロールのポリシーにまだ含まれていない場合)。AWS CodePipeline

    注記

    この CodePipeline サービスロールのポリシーを追加する IAM エンティティは、サービスロールポリシーをサービスロールに追加するために IAM のアクセス許可を持っている必要があります。

  5. 、 CodeBuild 、 CodePipeline など、 CodeCommit と でサポートされているリポジトリタイプにソースコードを作成してアップロードします (現在 Amazon S3は Bitbucket をサポートしていません)。GitHubCodePipeline ソースコードには buildspec ファイルが含まれている必要がありますが、このトピックの後半でビルドプロジェクトを定義するときにそのファイルを宣言できます。詳細については、ビルド仕様 (buildspec) に関するリファレンス を参照してください。

    重要

    パイプラインを使用してビルド済みのソースコードをデプロイする場合、ビルド出力アーティファクトには、使用するデプロイシステムとの互換性が必要です。

CodeBuild を使用するパイプラインの作成 (CodePipeline コンソール)

CodeBuild を使用してソースコードをビルドおよびデプロイするパイプラインを作成するには、次の手順を実行します。

ソースコードのみをテストするパイプラインを作成するには、以下の操作を行います。

CodePipeline でパイプライン作成ウィザードを使用して、CodeBuild を使用するパイプラインを作成するには

  1. 以下を使用して AWS マネジメントコンソール にサインインします。

    • AWS ルートアカウント。これは推奨されません。詳細については、 ユーザーガイドIAMの アカウントルートユーザーを参照してください

    • AWS アカウントの管理者 IAM ユーザー。詳細については、 ユーザーガイドの「最初の IAM 管理者のユーザーおよびグループの作成」を参照してください。IAM

    • 次の最小限のアクションを使用する権限がある AWS アカウントの IAM ユーザー。

      codepipeline:* iam:ListRoles iam:PassRole s3:CreateBucket s3:GetBucketPolicy s3:GetObject s3:ListAllMyBuckets s3:ListBucket s3:PutBucketPolicy codecommit:ListBranches codecommit:ListRepositories codedeploy:GetApplication codedeploy:GetDeploymentGroup codedeploy:ListApplications codedeploy:ListDeploymentGroups elasticbeanstalk:DescribeApplications elasticbeanstalk:DescribeEnvironments lambda:GetFunctionConfiguration lambda:ListFunctions opsworks:DescribeStacks opsworks:DescribeApps opsworks:DescribeLayers
  2. AWS CodePipeline コンソール (https://console.aws.amazon.com/codesuite/codepipeline/home) を開きます。

  3. AWS リージョンセレクターで、ビルドプロジェクトの AWS リソースがある AWS リージョンを選択します。この AWS リージョンでは、CodeBuild をサポートしている必要があります。詳細については、アマゾン ウェブ サービス全般のリファレンス の「AWS CodeBuild」を参照してください。

  4. パイプラインを作成します。CodePipeline 情報ページが表示された場合、[パイプラインの作成] を選択します。[Pipelines (パイプライン)] ページが表示された場合は、[Create pipeline (パイプラインの作成)] を選択します。

  5. ステップ 1: パイプラインの設定ページを選択し、パイプラインの名前 ( など) を入力しますCodeBuildDemoPipeline別の名前を選択した場合は、この手順全体でそれを使用してください。

  6. [Role name (ロール名)] として、以下のいずれかの操作を行います。

    [New service role (新しいサービスロール)] を選択し、[Role Name (ロール名)] に、新しいサービスロールの名前を入力します。

    [Existing service role (既存のサービスロール)] を選択し、このトピックの前提条件の一部として作成または特定した CodePipeline​ サービスロールを選択します。

  7. [Artifact store (アーティファクトストア)] で、次のいずれかの操作を行います。

    • パイプライン用に選択した AWS リージョンでパイプラインのデフォルトの S3 アーティファクトストア (デフォルトとして指定した S3 アーティファクトバケットなど) を使用するには、[デフォルトの場所] を選択します。

    • S3 アーティファクトバケットなど、作成済みのアーティファクトストアがパイプラインと同じ AWS リージョンにある場合は、[Custom location (カスタムの場所)] を選択します。

    注記

    これはパイプラインのソースコードのソースバケットではありません。パイプラインのアーティファクトストアです。パイプラインごとに別個のアーティファクトストア (S3 バケットなど) が、パイプラインと同じ AWS リージョンに必要です。

  8. [] を選択します。

  9. ステップ 2: ソースプロバイダの [Add source stage (ソースステージの追加)] ページで、次のいずれかの操作を行います。

    • ソースコードの保存先が S3 バケットである場合は、[Amazon S3] を選択します。[バケット] で、ソースコードが含まれている S3 バケットを選択します。[S3 オブジェクトキー] に、ソースコードを含むファイルの名前 (例: file-name.zip) を入力します。[] を選択します。

    • ソースコードが AWS CodeCommit リポジトリに保存されている場合は、[CodeCommit] を選択します。[Repository name] で、ソースコードが含まれているリポジトリの名前を選択します。[ブランチ名] で、ビルドするソースコードのバージョンが含まれているブランチの名前を選択します。[] を選択します。

    • ソースコードがGitHubリポジトリに保存されている場合は、[] を選択しますGitHub。 [Connect to GitHub ( に接続)] を選択し、手順に従って で認証GitHubします。 [Repository] で、ソースコードが含まれているリポジトリの名前を選択します。[ブランチ] で、ビルドするソースコードのバージョンが含まれているブランチの名前を選択します。

    [] を選択します。

  10. ステップ 3: ビルドプロバイダのビルドステージページを追加するときは、[] を選択しますCodeBuild。

  11. 既存のビルドプロジェクトを使用する場合は、[プロジェクト名] で、ビルドプロジェクトの名前を選択し、この手順のステップ 22 にスキップします。それ以外の場合は、次の手順に従って、CodeBuild にプロジェクトを作成します。

    既存のビルドプロジェクトを選択した場合、ビルド出力アーティファクトの設定がすでに定義されている必要があります (CodePipeline によってビルド出力の設定が上書きされます)。詳細については、「ビルドプロジェクトの作成 (コンソール)」または「ビルドプロジェクトの設定の変更 (コンソール)」を参照してください。

    重要

    CodeBuild プロジェクトのウェブフックを有効にして、プロジェクトを CodePipeline のビルドステップとして使用すると、コミットごとに 2 つの等しいビルドが作成されます。一方のビルドはウェブフックを通じてトリガーされ、もう一方は CodePipeline を通じてトリガーされます。請求はビルド単位で発生するため、両方のビルドに対して課金されます。したがって、CodePipeline を使用する場合は、CodeBuild でウェブフックを無効にすることをお勧めします。AWS CodeBuild コンソールで、[Webhook] ボックスをオフにします。詳細については、を参照してください ビルドプロジェクトの設定の変更 (コンソール)

  12. ステップ 4: [Add deploy stage (デプロイステージの追加)] ページでは、次のいずれかを実行します。

    • ビルド出力アーティファクトをデプロイしない場合は、[Skip (スキップ)] を選択し、プロンプトが表示されたら、これを選択したことを確認します。

    • ビルド出力アーティファクトをデプロイする場合は、[Deployment provider (デプロイプロバイダ)] でデプロイプロバイダを選択し、次にプロンプトに応じて設定を指定します。

    [] を選択します。

  13. [確認] ページで、選択内容を確認し、[パイプラインの作成] を選択します。

  14. パイプラインが正常に実行されたら、ビルド出力アーティファクトを取得できます。CodePipeline コンソールに表示されたパイプラインを使用して、[Build (ビルド)] アクションで、ツールヒントを選択します。出力アーティファクトの値 ( など) を書き留めますMyAppBuild

    注記

    ビルド出力アーティファクトを取得するには、CodeBuild コンソールのビルドの詳細ページで [ビルドアーティファクト] リンクを選択することもできます。このページを表示するには、この手順の残りのステップを省略して、「ビルドの詳細の表示 (コンソール)」を参照してください。

  15. https://console.aws.amazon.com/s3/ にある Amazon S3 コンソールを開きます。

  16. バケットのリストで、パイプラインで使用されるバケットを開きます。バケットの名前は の形式に従う必要がありますcodepipeline-region-ID-random-number。 を使用して、バケットの名前を取得するAWS CLICodePipelineコマンドを実行できます。get-pipelinemy-pipeline-name はパイプラインの表示名です。

    aws codepipeline get-pipeline --name my-pipeline-name

    出力では、pipeline オブジェクトには artifactStore オブジェクトが含まれ、それには、バケットの名前と location の値が含まれます。

  17. パイプラインの名前と一致するフォルダを開きます (パイプライン名の長さによってはフォルダ名が切り詰められている場合があります)。次に、前に書き留めた [出力アーティファクト] の値と一致するフォルダを開きます。

  18. ファイルの内容を展開します。そのフォルダに複数のファイルがある場合は、[Last Modified] タイムスタンプが最新であるファイルの内容を抽出します。(システムの ZIP ユーティリティーで作業するため、ファイルに.zip拡張子を付ける必要があるかもしれません)。 ビルド出力アーティファクトは、展開されたファイルの内容に含まれます。

  19. CodePipeline にビルド出力アーティファクトをデプロイするよう指示した場合は、デプロイプロバイダの説明を活用してデプロイターゲットのビルド出力アーティファクトを取得します。

CodeBuild を使用するパイプラインの作成 (AWS CLI)

CodeBuild を使用してソースコードをビルドするパイプラインを作成するには、次の手順を実行します。

を使用して、ビルドされたソースコードをデプロイする、または、ソースコードのテストのみを行うパイプラインを作成するには、「パイプラインAWS CLIを編集する ()」の手順AWS CLIと、 CodePipelineパイプライン構造リファレンスを適用できますAWS CodePipeline ユーザーガイド。

  1. CodeBuild でビルドプロジェクトを作成または識別します。詳細については、を参照してください ビルドプロジェクトの作成

    重要

    ビルドプロジェクトは、ビルド出力アーティファクトの設定を定義する必要があります (CodePipeline によって上書きされます)。詳細については、「ビルドプロジェクトの作成 (AWS CLI)」で artifacts の説明を参照してください。

  2. このトピックで説明している IAM エンティティの 1 つに対応する AWS アクセスキーと AWS シークレットアクセスキーで AWS CLI を設定していることを確認してください。詳細については、 AWS Command Line Interfaceユーザーガイドの「 のセットアップ」を参照してください。AWS Command Line Interface

  3. パイプラインの構造を表す JSON 形式のファイルを作成します。ファイルに create-pipeline.json のような名前を付けます。たとえば、この JSON 形式の構造では、S3 入力バケットを参照するソースアクションと CodeBuild を使用するビルドアクションを使用してパイプラインを作成します。

    { "pipeline": { "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name", "stages": [ { "name": "Source", "actions": [ { "inputArtifacts": [], "name": "Source", "actionTypeId": { "category": "Source", "owner": "AWS", "version": "1", "provider": "S3" }, "outputArtifacts": [ { "name": "MyApp" } ], "configuration": { "S3Bucket": "my-input-bucket-name", "S3ObjectKey": "my-source-code-file-name.zip" }, "runOrder": 1 } ] }, { "name": "Build", "actions": [ { "inputArtifacts": [ { "name": "MyApp" } ], "name": "Build", "actionTypeId": { "category": "Build", "owner": "AWS", "version": "1", "provider": "CodeBuild" }, "outputArtifacts": [ { "name": "default" } ], "configuration": { "ProjectName": "my-build-project-name" }, "runOrder": 1 } ] } ], "artifactStore": { "type": "S3", "location": "AWS-CodePipeline-internal-bucket-name" }, "name": "my-pipeline-name", "version": 1 } }

    この JSON 形式のデータは以下のようになっています。

    • roleArn の値は、前提条件の一部として作成または識別した CodePipeline のサービスロールの ARN と一致する必要があります。

    • configurationS3BucketS3ObjectKey の値は、ソースコードの保存先が S3 バケットであることを前提としています。その他のソースコードリポジトリタイプの設定については、 CodePipelineユーザーガイドのパイプライン構造リファレンスを参照してくださいAWS CodePipeline。

    • ProjectName の値は、この手順の前半で作成した CodeBuild ビルドプロジェクトの名前です。

    • location の値は、このパイプラインで使用する S3 バケットの名前です。詳細については、 CodePipelineユーザーガイドの「 のアーティファクトストアとして使用する S3 バケットのポリシーを作成するAWS CodePipeline」を参照してください

    • name の値は、このパイプラインの名前です。すべてのパイプラインの名前はアカウントに対して一意である必要があります。

    このデータにはソースアクションとビルドアクションのみが記述されていますが、テスト、ビルド出力アーティファクトのデプロイ、AWS Lambda 関数の呼び出しなどに関連したアクティビティのためにアクションを追加できます。詳細については、 AWS CodePipelineユーザーガイドの「パイプライン構造リファレンス」を参照してくださいAWS CodePipeline。

  4. JSON ファイルが保存されているフォルダに切り替え、CodePipeline create-pipeline コマンドを実行し、ファイル名を指定します。

    aws codepipeline create-pipeline --cli-input-json file://create-pipeline.json
    注記

    パイプラインは、CodeBuild がサポートされている AWS リージョンで作成する必要があります。詳細については、アマゾン ウェブ サービス全般のリファレンス の「AWS CodeBuild」を参照してください。

    JSON 形式のデータが出力に表示され、CodePipeline がパイプラインを作成します。

  5. パイプラインのステータスに関する情報を取得するには、CodePipeline get-pipeline-state コマンドを実行して、パイプラインの名前を指定します。

    aws codepipeline get-pipeline-state --name my-pipeline-name

    出力で、ビルドが成功したことを確認する情報を探します。省略記号 (...) は、簡潔にするために省略されたデータを表すために使用されます。

    { ... "stageStates": [ ... { "actionStates": [ { "actionName": "CodeBuild", "latestExecution": { "status": "SUCCEEDED", ... }, ... } ] } ] }

    このコマンドをあまりに早く実行すると、ビルドアクションに関する情報が表示されないことがあります。パイプラインがビルドアクションの実行を終了するまで、このコマンドを複数回実行する必要があります。

  6. ビルドが成功したら、次の手順に従ってビルド出力アーティファクトを取得します。https://console.aws.amazon.com/s3/ にある Amazon S3 コンソールを開きます。

    注記

    ビルド出力アーティファクトを取得するには、CodeBuild コンソールの関連するビルドの詳細ページで [ビルドアーティファクト] リンクを選択することもできます。このページを表示するには、この手順の残りのステップを省略して、「ビルドの詳細の表示 (コンソール)」を参照してください。

  7. バケットのリストで、パイプラインで使用されるバケットを開きます。バケットの名前は の形式に従う必要がありますcodepipeline-region-ID-random-number。 ファイルからバケット名を取得するか、またはcreate-pipeline.jsonCodePipelineバケット名を取得するコマンドを実行できます。get-pipeline

    aws codepipeline get-pipeline --name my-pipeline-name

    出力では、pipeline オブジェクトには artifactStore オブジェクトが含まれ、それには、バケットの名前と location の値が含まれます。

  8. パイプラインの名前と一致するフォルダを開きます (例:my-pipeline-name)。

  9. そのフォルダで、default という名前のフォルダを開きます。

  10. ファイルの内容を展開します。そのフォルダに複数のファイルがある場合は、[Last Modified] タイムスタンプが最新であるファイルの内容を抽出します。(システムの ZIP ユーティリティーで作業するため、ファイルに.zip拡張子を付ける必要があるかもしれません)。 ビルド出力アーティファクトは、展開されたファイルの内容に含まれます。

CodeBuild ビルドアクションをパイプラインに追加する (CodePipeline コンソール)

  1. 以下を使用して AWS マネジメントコンソール にサインインします。

    • AWS ルートアカウント。これは推奨されません。詳細については、 ユーザーガイドIAMの アカウントルートユーザーを参照してください

    • AWS アカウントの管理者 IAM ユーザー。詳細については、 ユーザーガイドの「最初の IAM 管理者のユーザーおよびグループの作成」を参照してください。IAM

    • 次の最小限のアクションを実行する権限がある AWS アカウントの IAM ユーザー。

      codepipeline:* iam:ListRoles iam:PassRole s3:CreateBucket s3:GetBucketPolicy s3:GetObject s3:ListAllMyBuckets s3:ListBucket s3:PutBucketPolicy codecommit:ListBranches codecommit:ListRepositories codedeploy:GetApplication codedeploy:GetDeploymentGroup codedeploy:ListApplications codedeploy:ListDeploymentGroups elasticbeanstalk:DescribeApplications elasticbeanstalk:DescribeEnvironments lambda:GetFunctionConfiguration lambda:ListFunctions opsworks:DescribeStacks opsworks:DescribeApps opsworks:DescribeLayers
  2. CodePipeline コンソール (https://console.aws.amazon.com/codesuite/codepipeline/home) を開きます。

  3. AWS リージョンセレクターで、パイプラインがある AWS リージョンを選択します。このリージョンでは、CodeBuild をサポートしている必要があります。詳細については、アマゾン ウェブ サービス全般のリファレンス の「CodeBuild」を参照してください。

  4. [Pipelines (パイプライン)] ページで、パイプラインの名前を選択します。

  5. パイプラインの詳細ページの [ソース] アクションで、ツールヒントを選択します。出力アーティファクトの値 ( など) を書き留めますMyApp

    注記

    この手順では、[Source] ステージと [Beta] ステージの間のビルドステージ内にビルドアクションを追加する方法について説明します。ビルドアクションを別の場所に追加する場合は、ビルドアクションを追加する場所の直前のアクションのツールヒントを選択し、[Output artifact (出力アーティファクト)] の値をメモします。

  6. [Edit (編集)] を選択します。

  7. [ソース] と [ベータ] ステージの間で、[Add (追加)] を選択します。

    注記

    この手順では、パイプラインの [Source] ステージと [Beta] ステージの間にビルドアクションを追加する方法について説明します。既存のステージにビルドアクションを追加するには、ステージで [Edit stage (ステージを編集)] を選択し、この手順のステップ 8 に進みます。ビルドステージを別の場所に追加するには、目的の場所で [Add stage (ステージの追加)] を選択します。

  8. [Stage name (ステージ名)] に、ビルドステージの名前 (例: Build) を入力します。別の名前を選択する場合は、この手順全体でそれを使用します。

  9. 選択したステージの中で、[アクションの追加] を選択します。

    注記

    この手順では、ビルドステージの中にビルドアクションを追加する方法について説明します。ビルドアクションを別の場所に追加するには、目的の場所で [Add action (アクションの追加)] を選択します。まず、ビルドアクションを追加する既存のステージで [Edit stage (ステージを編集)] アイコンを選択する必要があります。

  10. [アクションの編集] の [アクション名] に、アクションの名前 (例: CodeBuild) を入力します。別の名前を選択する場合は、この手順全体でそれを使用します。

  11. [Action provider (アクションプロバイダ)] で、[CodeBuild] を選択します。

  12. CodeBuild にビルドプロジェクトがすでにある場合は、[プロジェクト名] で、ビルドプロジェクトの名前を選択し、この手順のステップ 22 に進みます。

    既存のビルドプロジェクトを選択した場合、ビルド出力アーティファクトの設定がすでに定義されている必要があります (CodePipeline によってビルド出力の設定が上書きされます)。詳細については、「ビルドプロジェクトの作成 (コンソール)」にある [Artifacts (アーティファクト)] の説明、または「ビルドプロジェクトの設定の変更 (コンソール)」を参照してください。

    重要

    CodeBuild プロジェクトのウェブフックを有効にして、プロジェクトを CodePipeline のビルドステップとして使用すると、コミットごとに 2 つの等しいビルドが作成されます。一方のビルドはウェブフックを通じてトリガーされ、もう一方は CodePipeline を通じてトリガーされます。請求はビルド単位で発生するため、両方のビルドに対して課金されます。したがって、CodePipeline を使用する場合は、CodeBuild でウェブフックを無効にすることをお勧めします。CodeBuild コンソールで、[Webhook] ボックスをオフにします。詳細については、「ビルドプロジェクトの設定の変更 (コンソール)」を参照してください

  13. Open the AWS CodeBuild console at https://console.aws.amazon.com/codesuite/codebuild/home.

  14. If a CodeBuild information page is displayed, choose Create build project. Otherwise, on the navigation pane, expand Build, choose Build projects, and then choose Create build project.

  15. [プロジェクト名] に、このビルドプロジェクトの名前を入力します。ビルドプロジェクト名は、各 アカウントで一意である必要があります。

  16. (省略可能) 説明を入力します。

  17. [環境] で、次のいずれかを行います。

    • CodeBuild で管理する Docker イメージに基づいてビルド環境を使用するには、[Managed image (マネージドイメージ)] を選択します。[オペレーティングシステム]、[ランタイム]、および [ランタイムバージョン] の各ドロップダウンリストで適切な選択を行います。詳細については、「CodeBuild に用意されている Docker イメージ」を参照してください。

    • AWS アカウントの Amazon ECR リポジトリの Docker イメージに基づいてビルド環境を使用するには、[カスタムイメージ] を選択します。[Environment type (環境タイプ)] で環境タイプを選択し、[Amazon ECR] を選択します。[Amazon ECR レポジトリ] および [Amazon ECR イメージ] の各ドロップダウンリストを使用して、Amazon ECR リポジトリおよびそのリポジトリ内の Docker イメージを選択します。

    • Docker Hub で公開されている Docker イメージに基づいてビルド環境を使用するには、[Other location (その他の場所)] を選択します。[Other location (その他の場所)] に Docker イメージ ID を入力します。形式として docker repository/docker-image-name を使用します。

    [特権付与] を選択するのは、このビルドプロジェクトを使用して Docker イメージをビルドする際に、Docker をサポートする CodeBuild 提供のビルド環境イメージ以外のイメージを選択した場合に限ります。それ以外の場合、関連付けられているビルドで Docker デーモンと通信しようとすると、すべて失敗します。必要に応じて、ビルドで Docker デーモンを操作できるように、Docker デーモンも起動する必要があります。そのためには、以下のビルドコマンドを実行して、ビルド仕様の install フェーズで Docker デーモンを初期化します。(Docker をサポートする CodeBuild 提供のビルド環境イメージを選択した場合は、以下のビルドコマンドを実行しないでください。)

    - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 & - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
  18. In Service role, do one of the following:

    • If you do not have a CodeBuild service role, choose New service role. In Role name, enter a name for the new role.

    • If you have a CodeBuild service role, choose Existing service role. In Role ARN, choose the service role.

    注記

    When you use the console to create or update a build project, you can create a CodeBuild service role at the same time. By default, the role works with that build project only. If you use the console to associate this service role with another build project, the role is updated to work with the other build project. A service role can work with up to 10 build projects.

  19. [Additional configuration (追加設定)] を展開します。

    60 分 (デフォルト) 以外のビルドタイムアウトを指定するには、[hours (時間数)] ボックスと [minutes (分数)] ボックスを使用してタイムアウトを 5〜480 分 (8 時間) に設定します。

    [Compute (コンピューティング)] で、以下のいずれかの利用可能なオプションを選択します。

    [環境変数] で、[名前] と [] を使用して、ビルド環境で使用するオプションの環境変数を指定します。さらに環境変数を追加するには、[環境変数の追加] を選択します。

    重要

    機密情報、特に AWS アクセスキー ID やシークレットアクセスキーを環境変数に保存しないよう強くお勧めします。環境変数は、CodeBuild コンソールや AWS CLI を使用してプレーンテキストで表示できます。

    重要な値を保存および取得するには、ビルドコマンドで AWS CLI を使用して Amazon EC2 Systems Manager パラメータストアを操作することをお勧めします。AWS CLI は、CodeBuild が提供するすべてのビルド環境にインストール済みであり、設定済みです。詳細については、Amazon EC2 Systems Manager ユーザーガイドの「Systems Manager パラメータストア」および「Systems Manager パラメータストア CLI のチュートリアル」を参照してください。

  20. [Buildspec] で、次のいずれかを行います。

    • ソースコードにビルド仕様ファイルが含まれている場合は、[Use a buildspec file (buildspec ファイルを使用)] を選択します。

    • ソースコードに buildspec ファイルが含まれていない場合は、[ビルドコマンドの挿入] を選択します。[Build commands (ビルドコマンド)] に、ビルド環境のビルドフェーズで実行するコマンドを入力します。複数のコマンドを入力する場合は、各コマンドを && (Linux ベースのビルド環境) または ; (Windows ベースのビルド環境) で区切ります。[出力ファイル] に、ビルド環境で CodePipeline に送信するビルド出力ファイルへのパスを入力します。複数のファイルを入力する場合は、各ファイルパスをカンマで区切ります。

  21. [Create build project (ビルドプロジェクトの作成)] を選択します。

  22. CodePipeline コンソールに戻ります。

  23. [入力アーティファクト] で、この手順で前に書き留めた出力アーティファクトを選択します。

  24. [出力アーティファクト] で、出力アーティファクトの名前を入力します (例: MyAppBuild)。

  25. [アクションの追加] を選択します。

  26. [Save (保存)]、[Save (保存)] の順に選択し、パイプラインの変更を保存します。

  27. [Release change] を選択します。

  28. パイプラインが正常に実行されたら、ビルド出力アーティファクトを取得できます。CodePipeline コンソールに表示されたパイプラインを使用して、[Build (ビルド)] アクションで、ツールヒントを選択します。出力アーティファクトの値 ( など) を書き留めますMyAppBuild

    注記

    ビルド出力アーティファクトを取得するには、CodeBuild コンソールのビルドの詳細ページで [ビルドアーティファクト] リンクを選択することもできます。このページの内容を表示するには、「ビルドの詳細の表示 (コンソール)」を参照して、この手順のステップ 31 に進みます。

  29. https://console.aws.amazon.com/s3/ にある Amazon S3 コンソールを開きます。

  30. バケットのリストで、パイプラインで使用されるバケットを開きます。バケットの名前は の形式に従う必要がありますcodepipeline-region-ID-random-number。 を使用してAWS CLICodePipelineバケットの名前を取得するコマンドを実行できます。get-pipeline

    aws codepipeline get-pipeline --name my-pipeline-name

    出力では、pipeline オブジェクトには artifactStore オブジェクトが含まれ、それには、バケットの名前と location の値が含まれます。

  31. パイプラインの名前と一致するフォルダを開きます (パイプライン名の長さによってはフォルダ名が切り詰められている場合があります)。次に、この手順で前に書き留めた [出力アーティファクト] の値と一致するフォルダを開きます。

  32. ファイルの内容を展開します。そのフォルダに複数のファイルがある場合は、[Last Modified] タイムスタンプが最新であるファイルの内容を抽出します。(システムの ZIP ユーティリティーで作業するため、ファイルに.zip拡張子を付ける必要があるかもしれません)。 ビルド出力アーティファクトは、展開されたファイルの内容に含まれます。

  33. CodePipeline にビルド出力アーティファクトをデプロイするよう指示した場合は、デプロイプロバイダの説明を活用してデプロイターゲットのビルド出力アーティファクトを取得します。

パイプラインに CodeBuild テストアクションを追加する (CodePipeline コンソール)

  1. 以下を使用して AWS マネジメントコンソール にサインインします。

    • AWS ルートアカウント。これは推奨されません。詳細については、 ユーザーガイドIAMの アカウントルートユーザーを参照してください

    • AWS アカウントの管理者 IAM ユーザー。詳細については、 ユーザーガイドの「最初の IAM 管理者のユーザーおよびグループの作成」を参照してください。IAM

    • 次の最小限のアクションを実行する権限がある AWS アカウントの IAM ユーザー。

      codepipeline:* iam:ListRoles iam:PassRole s3:CreateBucket s3:GetBucketPolicy s3:GetObject s3:ListAllMyBuckets s3:ListBucket s3:PutBucketPolicy codecommit:ListBranches codecommit:ListRepositories codedeploy:GetApplication codedeploy:GetDeploymentGroup codedeploy:ListApplications codedeploy:ListDeploymentGroups elasticbeanstalk:DescribeApplications elasticbeanstalk:DescribeEnvironments lambda:GetFunctionConfiguration lambda:ListFunctions opsworks:DescribeStacks opsworks:DescribeApps opsworks:DescribeLayers
  2. CodePipeline コンソール (https://console.aws.amazon.com/codesuite/codepipeline/home) を開きます。

  3. AWS リージョンセレクターで、パイプラインがある AWS リージョンを選択します。この AWS リージョンでは、CodeBuild をサポートしている必要があります。詳細については、アマゾン ウェブ サービス全般のリファレンス の「AWS CodeBuild」を参照してください。

  4. [Pipelines (パイプライン)] ページで、パイプラインの名前を選択します。

  5. パイプラインの詳細ページの [ソース] アクションで、ツールヒントを選択します。出力アーティファクトの値 ( など) を書き留めますMyApp

    注記

    この手順では、[Source] ステージと [Beta] ステージの間のテストステージ内にテストアクションを追加する方法について説明します。テストアクションを別の場所に追加する場合は、直前のアクションにマウスポインタを合わせ、[Output artifact] の値をメモします。

  6. [Edit (編集)] を選択します。

  7. [ソース] ステージのすぐ後で、[Add stage (ステージの追加)] を選択します。

    注記

    この手順では、パイプラインの [Source] ステージの直後にテストステージを追加する方法を示します。既存のステージにテストアクションを追加するには、ステージで [Edit stage (ステージを編集)] を選択し、この手順のステップ 8 に進みます。テストステージを別の場所に追加するには、目的の場所で [Add stage (ステージの追加)] を選択します。

  8. [ステージ名] に、テストステージの名前 (例: Test) を入力します。別の名前を選択する場合は、この手順全体でそれを使用します。

  9. 選択されたステージで、[アクションの追加] を選択します。

    注記

    この手順は、テストステージにテストアクションを追加する方法を示します。テストアクションを別の場所に追加するには、目的の場所で [Add action (アクションの追加)] を選択します。まず、テストアクションを追加する既存のステージで [Edit (編集)] アイコンを選択する必要があります。

  10. [アクションの編集] の [アクション名] に、アクションの名前 (例: Test) を入力します。別の名前を選択する場合は、この手順全体でそれを使用します。

  11. [Action provider (アクションプロバイダー)] で、[Test (テスト)] の [CodeBuild] を選択します。

  12. CodeBuild にビルドプロジェクトがすでにある場合は、[プロジェクト名] で、ビルドプロジェクトの名前を選択し、この手順のステップ 22 に進みます。

    重要

    CodeBuild プロジェクトのウェブフックを有効にして、プロジェクトを CodePipeline のビルドステップとして使用すると、コミットごとに 2 つの等しいビルドが作成されます。一方のビルドはウェブフックを通じてトリガーされ、もう一方は CodePipeline を通じてトリガーされます。請求はビルド単位で発生するため、両方のビルドに対して課金されます。したがって、CodePipeline を使用する場合は、CodeBuild でウェブフックを無効にすることをお勧めします。CodeBuild コンソールで、[Webhook] ボックスをオフにします。詳細については、「ビルドプロジェクトの設定の変更 (コンソール)」を参照してください

  13. Open the AWS CodeBuild console at https://console.aws.amazon.com/codesuite/codebuild/home.

  14. If a CodeBuild information page is displayed, choose Create build project. Otherwise, on the navigation pane, expand Build, choose Build projects, and then choose Create build project.

  15. [プロジェクト名] に、このビルドプロジェクトの名前を入力します。ビルドプロジェクト名は、各 アカウントで一意である必要があります。

  16. (省略可能) 説明を入力します。

  17. [環境] で、次のいずれかを行います。

    • CodeBuild で管理する Docker イメージに基づいてビルド環境を使用するには、[Managed image (マネージドイメージ)] を選択します。[オペレーティングシステム]、[ランタイム]、および [ランタイムバージョン] の各ドロップダウンリストで適切な選択を行います。詳細については、「CodeBuild に用意されている Docker イメージ」を参照してください。

    • AWS アカウントの Amazon ECR リポジトリの Docker イメージに基づいてビルド環境を使用するには、[カスタムイメージ] を選択します。[Environment type (環境タイプ)] で環境タイプを選択し、[Amazon ECR] を選択します。[Amazon ECR レポジトリ] および [Amazon ECR イメージ] の各ドロップダウンリストを使用して、Amazon ECR リポジトリおよびそのリポジトリ内の Docker イメージを選択します。

    • Docker Hub で公開されている Docker イメージに基づいてビルド環境を使用するには、[Other location (その他の場所)] を選択します。[Other location (その他の場所)] に Docker イメージ ID を入力します。形式として docker repository/docker-image-name を使用します。

    [特権付与] を選択するのは、このビルドプロジェクトを使用して Docker イメージをビルドする際に、Docker をサポートする CodeBuild 提供のビルド環境イメージ以外のイメージを選択した場合に限ります。それ以外の場合、関連付けられているビルドで Docker デーモンと通信しようとすると、すべて失敗します。必要に応じて、ビルドで Docker デーモンを操作できるように、Docker デーモンも起動する必要があります。そのためには、以下のビルドコマンドを実行して、ビルド仕様の install フェーズで Docker デーモンを初期化します。(Docker をサポートする CodeBuild 提供のビルド環境イメージを選択した場合は、以下のビルドコマンドを実行しないでください。)

    - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 & - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
  18. In Service role, do one of the following:

    • If you do not have a CodeBuild service role, choose New service role. In Role name, enter a name for the new role.

    • If you have a CodeBuild service role, choose Existing service role. In Role ARN, choose the service role.

    注記

    When you use the console to create or update a build project, you can create a CodeBuild service role at the same time. By default, the role works with that build project only. If you use the console to associate this service role with another build project, the role is updated to work with the other build project. A service role can work with up to 10 build projects.

  19. [Additional configuration (追加設定)] を展開します。

    60 分 (デフォルト) 以外のビルドタイムアウトを指定するには、[hours (時間数)] ボックスと [minutes (分数)] ボックスを使用してタイムアウトを 5〜480 分 (8 時間) に設定します。

    [Compute (コンピューティング)] で、以下のいずれかの利用可能なオプションを選択します。

    [環境変数] で、[名前] と [] を使用して、ビルド環境で使用するオプションの環境変数を指定します。さらに環境変数を追加するには、[環境変数の追加] を選択します。

    重要

    機密情報、特に AWS アクセスキー ID やシークレットアクセスキーを環境変数に保存しないよう強くお勧めします。環境変数は、CodeBuild コンソールや AWS CLI を使用してプレーンテキストで表示できます。

    重要な値を保存および取得するには、ビルドコマンドで AWS CLI を使用して Amazon EC2 Systems Manager パラメータストアを操作することをお勧めします。AWS CLI は、CodeBuild が提供するすべてのビルド環境にインストール済みであり、設定済みです。詳細については、Amazon EC2 Systems Manager ユーザーガイドの「Systems Manager パラメータストア」および「Systems Manager パラメータストア CLI のチュートリアル」を参照してください。

  20. [Buildspec] で、次のいずれかを行います。

    • ソースコードにビルド仕様ファイルが含まれている場合は、[Use a buildspec file (buildspec ファイルを使用)] を選択します。

    • ソースコードに buildspec ファイルが含まれていない場合は、[ビルドコマンドの挿入] を選択します。[Build commands (ビルドコマンド)] に、ビルド環境のビルドフェーズで実行するコマンドを入力します。複数のコマンドを入力する場合は、各コマンドを && (Linux ベースのビルド環境) または ; (Windows ベースのビルド環境) で区切ります。[出力ファイル] に、ビルド環境で CodePipeline に送信するビルド出力ファイルへのパスを入力します。複数のファイルを入力する場合は、各ファイルパスをカンマで区切ります。

  21. [Create build project (ビルドプロジェクトの作成)] を選択します。

  22. CodePipeline コンソールに戻ります。

  23. [入力アーティファクト] で、この手順で前に書き留めた [出力アーティファクト] の値を選択します。

  24. (オプション) テストアクションで出力アーティファクトを生成し、それに応じてビルド仕様を設定する場合は、出力アーティファクトに割り当てる値を [出力アーティファクト] に入力します。

  25. [Save] を選択します。

  26. [Release change] を選択します。

  27. パイプラインが正常に実行された後、テスト結果を取得できます。パイプラインの [Test (テスト)] ステージで [CodeBuild] ハイパーリンクを選択し、CodeBuild コンソールで関連するビルドプロジェクトのページを開きます。

  28. ビルドプロジェクトページの [Build history] エリアで、[Build run] ハイパーリンクを選択します。

  29. ビルドの実行ページの [ビルドログ] エリアで、[ログ全体の表示] ハイパーリンクを選択し、Amazon CloudWatch コンソールでビルドログを開きます。

  30. ビルドログをスクロールして、テスト結果を表示します。