AWS CodeBuild
ユーザーガイド (API バージョン 2016-10-06)

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

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

次の表に示しているのは、タスクとその実行に使用できるメソッドです。これらのタスクを AWS SDK で達成する方法については、このトピックの対象外です。

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

  • AWS CLI

  • AWS SDK

  • CodePipeline コンソールの使用

  • AWS CLI の使用

  • このトピックの情報は、AWS SDK を使用するように調整できます。詳細については、Amazon Web Services 用のツールSDK セクションから、プログラミング言語のパイプラインアクションの作成ドキュメントを参照するか、『AWS CodePipeline API Reference』の「CreatePipeline」を参照してください。

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

  • AWS CLI

  • AWS SDK

前提条件

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

  2. AWS ルートアカウントや管理者 IAM ユーザーの代わりに、IAM ユーザーを CodePipeline へのアクセスに使用している場合、AWSCodePipelineFullAccess という名前の管理ポリシーをユーザー (またはユーザーが属する IAM グループ) にアタッチします。(AWS ルートアカウントを使用することは推奨されません。) これにより、ユーザーは CodePipeline でパイプラインを作成できます。詳細については、『IAM ユーザーガイド』の「管理ポリシーをアタッチする」を参照してください。

    注記

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

  3. AWS アカウントに CodePipeline のサービスロールがまだない場合は、作成します。このサービスロールにより、CodePipeline は AWS CodeBuild を含む他の AWS のサービスとやり取りできます。たとえば、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 サービスロールのポリシーを追加する」の説明のとおりに、サービスロールにデフォルト CodePipeline のサービスロールポリシーを追加します。

    注記

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

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

    重要

    パイプラインを使用してビルドされたソースコードをデプロイする場合、ビルド出力アーティファクトは、使用するデプロイシステムと互換性がなければなりません。

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

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

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

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

  1. https://console.aws.amazon.com/codesuite/codepipeline/home で CodePipeline コンソールを開きます。

    次のいずれかを使用して、AWS Management Console に既にサインインしている必要があります。

    • 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 リージョンセレクタで、ビルドプロジェクトの AWS リソースが配置されているリージョンを選択します。このリージョンも CodeBuild をサポートしている必要があります。詳細については、『Amazon Web Services General Reference』の「リージョンとエンドポイント」トピックにある「CodeBuild」を参照してください。

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

  4. [Step 1: Choose pipeline settings (ステップ 1: パイプラインの設定の選択)] ページで、[Pipeline name (パイプライン名)] にパイプラインの名前を入力します (例: CodeBuildDemoPipeline)。別の名前を選択した場合は、この手順全体でそれを使用してください。

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

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

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

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

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

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

    注記

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

  7. [Next (次へ)] を選択します。

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

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

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

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

    [Next (次へ)] を選択します。

  9. [Step 3: Add build stage (ステップ 3: ビルドステージの追加)] ページの [Build provider (ビルドプロバイダ)] で、[CodeBuild] を選択します。

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

    注記

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

    重要

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

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

  12. CodeBuild の情報ページが表示された場合は、[ビルドプロジェクトの作成] を選択します。それ以外の場合は、ナビゲーションペインで [ビルド] を展開し、[ビルドプロジェクト] を選択してから、[Create build project (ビルドプロジェクトの作成)] を選択します。

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

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

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

    • 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=overlay& - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
  16. [Service role (サービスロール)] で、次のいずれかの操作を行います。

    • CodeBuild サービスロールがない場合は、[New service role (新しいサービスロール)] を選択します。[Role name (ロール名)] で、デフォルト名を受け入れるか、独自の名前を入力します。

    • CodeBuild サービスロールがある場合は、[Existing service role (既存のサービスロール)] を選択します。[Role name (ロール名)] で、サービスロールを選択します。

    注記

    コンソールでは、ビルドプロジェクトの作成時や更新時に CodeBuild サービスロールも作成できます。デフォルトでは、ロールはそのビルドプロジェクトでのみ使用できます。コンソールでは、このサービスロールを別のビルドプロジェクトと関連付けると、この別のビルドプロジェクトで使用できるようにロールが更新されます。サービスロールでは最大 10 個のビルドプロジェクトを使用できます。

  17. [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 のチュートリアル」を参照してください。

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

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

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

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

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

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

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

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

    [Next (次へ)] を選択します。

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

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

    注記

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

  24. Open the Amazon S3 console at https://console.aws.amazon.com/s3/.

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

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

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

  26. パイプラインの名前と一致するフォルダを開きます (パイプライン名の長さによってはフォルダ名が切り捨てられる場合があります)。次に、この手順のステップ 24 でメモした [Output artifact] の値に一致するフォルダを開きます。

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

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

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

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

AWS CLI を使用して、ビルドされたソースコードをデプロイする、または、ソースコードのテストのみを行うパイプラインを作成するには、AWS CodePipeline User Guide の「パイプラインの編集 (AWS CLI)」および「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 形式の構造は、Amazon 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 の値は、ソースコードが Amazon S3 バケットに保存されることを想定しています。その他のソースコードのリポジトリタイプの設定については、『CodePipeline ユーザーガイド』の「CodePipeline パイプライン構造のリファレンス」を参照してください。

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

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

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

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

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

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

    注記

    CodeBuild をサポートするパイプラインを AWS リージョンに作成する必要があります。詳細については、『Amazon Web Services General Reference』の「リージョンとエンドポイント」トピックにある「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.json ファイルからバケット名を取得するか、または、CodePipeline 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. https://console.aws.amazon.com/codesuite/codepipeline/home で CodePipeline コンソールを開きます。

    次のいずれかを使用して、AWS Management Console に既にサインインしている必要があります。

    • 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 リージョンセレクタで、パイプラインが配置されているリージョンを選択します。このリージョンも CodeBuild をサポートしている必要があります。詳細については、『Amazon Web Services General Reference』の「リージョンとエンドポイント」トピックにある「CodeBuild」を参照してください。

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

  4. パイプラインの詳細ページの [ソース] アクションで、ツールヒントを選択します。[Output artifact (出力アーティファクト)] の値 (例: MyApp) をメモします。

    注記

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

  5. [Edit] を選択します。

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

    注記

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

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

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

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

    注記

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

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

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

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

    注記

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

    重要

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

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

  13. CodeBuild の情報ページが表示された場合は、[ビルドプロジェクトの作成] を選択します。それ以外の場合は、ナビゲーションペインで [ビルド] を展開し、[ビルドプロジェクト] を選択してから、[Create build project (ビルドプロジェクトの作成)] を選択します。

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

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

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

    • 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=overlay& - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
  17. [Service role (サービスロール)] で、次のいずれかの操作を行います。

    • CodeBuild サービスロールがない場合は、[New service role (新しいサービスロール)] を選択します。[Role name (ロール名)] で、デフォルト名を受け入れるか、独自の名前を入力します。

    • CodeBuild サービスロールがある場合は、[Existing service role (既存のサービスロール)] を選択します。[Role name (ロール名)] で、サービスロールを選択します。

    注記

    コンソールでは、ビルドプロジェクトの作成時や更新時に CodeBuild サービスロールも作成できます。デフォルトでは、ロールはそのビルドプロジェクトでのみ使用できます。コンソールでは、このサービスロールを別のビルドプロジェクトと関連付けると、この別のビルドプロジェクトで使用できるようにロールが更新されます。サービスロールでは最大 10 個のビルドプロジェクトを使用できます。

  18. [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 のチュートリアル」を参照してください。

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

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

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

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

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

  22. [Input artifacts (入力アーティファクト)] で、この手順のステップ 4 で書き留めた出力アーティファクトを選択します。

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

  24. [Add action] を選択します。

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

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

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

    注記

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

  28. Open the Amazon S3 console at https://console.aws.amazon.com/s3/.

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

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

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

  30. パイプラインの名前と一致するフォルダを開きます (パイプライン名の長さによってはフォルダ名が切り捨てられる場合があります)。次に、この手順のステップ 28 でメモした [Output artifact] の値に一致するフォルダを開きます。

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

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

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

  1. https://console.aws.amazon.com/codesuite/codepipeline/home で CodePipeline コンソールを開きます。

    次のいずれかを使用して、AWS Management Console に既にサインインしている必要があります。

    • 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 リージョンセレクタで、パイプラインが配置されているリージョンを選択します。このリージョンも CodeBuild をサポートしている必要があります。詳細については、『Amazon Web Services General Reference』の「リージョンとエンドポイント」トピックにある「CodeBuild」を参照してください。

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

  4. パイプラインの詳細ページの [ソース] アクションで、ツールヒントを選択します。[Output artifact] の値をメモします (例: MyApp)。

    注記

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

  5. [Edit] を選択します。

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

    注記

    この手順では、パイプラインに新しいテストステージを追加する方法について説明します。既存のステージにテストアクションを追加するには、ステージで [Edit stage (ステージを編集)] を選択し、この手順のステップ 8 に進みます。

    また、この手順は、[Source] ステージのすぐ後にテストステージを追加する方法を示します。テストステージを別の場所に追加するには、目的の場所で [Add stage (ステージの追加)] を選択します。

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

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

    注記

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

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

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

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

    重要

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

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

  13. CodeBuild の情報ページが表示された場合は、[ビルドプロジェクトの作成] を選択します。それ以外の場合は、ナビゲーションペインで [ビルド] を展開し、[ビルドプロジェクト] を選択してから、[Create build project (ビルドプロジェクトの作成)] を選択します。

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

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

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

    • 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=overlay& - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
  17. [Service role (サービスロール)] で、次のいずれかの操作を行います。

    • CodeBuild サービスロールがない場合は、[New service role (新しいサービスロール)] を選択します。[Role name (ロール名)] で、デフォルト名を受け入れるか、独自の名前を入力します。

    • CodeBuild サービスロールがある場合は、[Existing service role (既存のサービスロール)] を選択します。[Role name (ロール名)] で、サービスロールを選択します。

    注記

    コンソールでは、ビルドプロジェクトの作成時や更新時に CodeBuild サービスロールも作成できます。デフォルトでは、ロールはそのビルドプロジェクトでのみ使用できます。コンソールでは、このサービスロールを別のビルドプロジェクトと関連付けると、この別のビルドプロジェクトで使用できるようにロールが更新されます。サービスロールでは最大 10 個のビルドプロジェクトを使用できます。

  18. [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 のチュートリアル」を参照してください。

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

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

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

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

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

  22. [Input artifacts (入力アーティファクト)] で、この手順のステップ 4 で書き留めた [出力アーティファクト] の値を選択します。

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

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

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

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

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

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

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