の buildspec で GitHub Actions 構文を使用する AWS CodeBuild - AWS CodeBuild

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

の buildspec で GitHub Actions 構文を使用する AWS CodeBuild

CodeBuildマネージドアクションランナーを使用して、 内で GitHub アクションを実行できます CodeBuild。これを行うには、buildspec ファイルの任意のフェーズに steps を追加します。

CodeBuild buildspecs は、 CodeBuild コマンドとは別のフェーズで実行されるシーケンシャル GitHub アクションステップのリストをサポートします。これらの GitHub アクションは、依存関係のキャッシュ、バッチビルド、 へのアクセスなど、 CodeBuildの既存の機能と統合されています AWS Secrets Manager。

buildspec で GitHub アクションの使用を開始するにはどうすればよいですか?

buildspec で GitHub アクションを使用する大まかな手順は次のとおりです。

  1. プロジェクトを に接続していない場合は、接続します GitHub。

    これを行うには、次のいずれかで実行できます。

    注記

    これは、別のプロジェクト GitHub で に接続していない場合にのみ行う必要があります。

  2. プロジェクトの buildspec で、 を追加できます。steps各 は GitHub アクションを参照します。これは、 CodeBuild コンソールまたはソースリポジトリで編集できます。各ビルドフェーズは、コマンドのリストまたはステップのリストのどちらかをサポートしますが、両方を同じフェーズで使用することはできません。詳細については、「の buildspec で GitHub Actions 構文を使用する AWS CodeBuild」を参照してください。

buildspec ではどの GitHub アクションを使用できますか?

これらの制限と競合しない任意のアクションを GitHub Marketplace で使用できます。

buildspec で GitHub アクション GitHub を使用する場合以外のソースプロバイダーを使用できますか?

はい。ただし、 を使用して GitHub認証し、 GitHub アクションにアクセスするには、 への接続 GitHub が引き続き必要です。詳細については、「GitHub および GitHub Enterprise Server アクセストークン」を参照してください。

buildspec で GitHub アクションを使用するには、ソースプロバイダーとして に接続 GitHub する必要があるのはなぜですか?

buildspec で GitHub Actions を使用するには、ソースをビルドコンピューティングにダウンロードする必要があります。匿名ダウンロードはレート制限されるため、 に接続することで GitHub、一貫したアクセスを確保できます。

buildspec で GitHub アクションを使用するにはどのくらいのコストがかかりますか?

buildspec での GitHub アクションの使用は、追加料金なしでサポートされます。

buildspec での GitHub アクションの使用がサポートされているリージョン

buildspec での GitHub アクションの使用は、すべての CodeBuild リージョンでサポートされています。 CodeBuild が利用可能な の場所の詳細については AWS リージョン 、AWS 「リージョン別の のサービス」を参照してください。

buildspec で GitHub アクションを使用するためのベストプラクティス

GitHub アクションはオープンソースであり、コミュニティによって構築され、管理されています。責任共有モデルに従い、 GitHub アクションのソースコードを、お客様の責任を持つ顧客データと見なします。 GitHub アクションには、シークレット、リポジトリトークン、ソースコード、およびアカウントリンクへのアクセス権を付与できます。実行する予定の GitHub アクションの信頼性とセキュリティに自信があることを確認してください。

GitHub アクションのより具体的なガイダンスとセキュリティのベストプラクティス:

で buildspec の GitHub アクションを使用する場合の制限 CodeBuild

  • GitHub githubコンテキストに内部的に依存する、またはプルリクエストや問題などの GitHub固有のリソースを参照する buildspec 内のアクションは、 ではサポートされていません CodeBuild。例えば、次のアクションは では機能しません CodeBuild。

    • GitHub プルリクエストを更新したり、 で問題を作成したりするアクションなど、リソースの追加、変更、更新 GitHubを試みるアクション GitHub。

    注記

    https://github.com/actions に記載されているほとんどの公式 GitHub アクションは、githubコンテキストに依存しています。代わりに、 GitHub Marketplace で利用できるアクションを使用してください。

  • GitHub Docker コンテナアクションである buildspec のアクションは機能しますが、ビルドプロジェクトで特権モードが有効になっていて、デフォルトの Docker ユーザー (ルート) によって実行する必要があります。

    • アクションは root ユーザーとして実行する必要があります。詳細については、Dockerfile support for Actions の「USER」トピックを参照してください。 GitHub

  • GitHub buildspec のアクションは、Windows で実行するように設定された CodeBuild プロジェクトではサポートされていません。

  • GitHub buildspec のアクションジョブ (ステップのグループ) と GitHub アクションジョブのプロパティはサポートされていません。

  • GitHub buildspec のアクションは、パブリック Git リポジトリのウェブフックによってトリガーされるように設定された CodeBuild プロジェクトではサポートされていません。詳細については、「」を参照してくださいgit-credential-helper

  • パブリックインターネットアクセスのない VPC ビルドでは、buildspec で GitHub アクションを実行できません。

  • 各ビルドフェーズはコマンドのリストまたはステップのリストのどちらかをサポートしますが、両方を同じフェーズで使用することはできません。例えば、次の例では、ビルド前のフェーズでステップを使用して GitHub アクションを一覧表示し、ビルドフェーズでコマンドを使用して CodeBuild コマンドを一覧表示します。

    version: 0.2 phases: pre-build: steps: - name: Lint Code Base uses: github/super-linter@v4 env: VALIDATE_ALL_CODEBASE: 'true' DEFAULT_BRANCH: main build: commands: - echo "Building..." - npm run build

GitHub Action Runner buildspec リファレンス

このトピックには、 GitHub Action ランナープロパティの buildspec リファレンスが含まれています。

steps

オプションのシーケンス。ステップは、 でコマンドとアクションを実行するために使用されます CodeBuild。詳細については、「の buildspec で GitHub Actions 構文を使用する AWS CodeBuild」を参照してください。

注記

各ビルドフェーズは、commands のリストまたは steps のリストのどちらかをサポートしますが、両方を同じフェーズで使用することはできません。

各ビルドステップには、以下のプロパティが含まれます。

id

オプション。他のコンテキストでステップを参照するために使用できるステップの識別子。

if

オプション。条件が満たされない限り、ステップが実行されないようにするために使用できる条件付きステートメント。このステートメントでは、 からの環境変数の参照や https://docs.github.com/en/actions/learn-github-actions/contextsなど CodeBuild、サポートされているコンテキスト を使用できます。

name

オプション。ステップの名前。名前を指定しないと、名前はデフォルトで run コマンドで指定したテキストになります。

uses

ステップで実行するアクション。一部のアクションでは、with を使用して入力を設定する必要があります。アクションの README を参照して、どの入力が必要かを判断してください。詳細については、「buildspec ではどの GitHub アクションを使用できますか?」を参照してください。

ビルドフェーズで uses を指定した場合、run を併用することはできません。

注記

使用しているアクションのバージョンを含めることをお勧めします。これを行うには、Git ref、SHA、または Docker タグを指定します。詳細については、「steps.uses 構文」を参照してください。

run

コマンドラインプログラムを実行するコマンド。1 行のコマンドでも、複数行のコマンドでもかまいません。デフォルトでは、これらのコマンドは非ログインシェルを使用して実行されます。別のシェルを選択するには、shell を使用します。

ビルドフェーズで run を指定した場合、uses を併用することはできません。

shell

オプション。このシーケンスで指定したシェル。サポートされているシェルパラメータについては、「steps.shell」を参照してください。指定しない場合、使用されるシェルは bash です。bash が使用できない場合は、 sh が使用されます。

with

オプション。アクションによって定義された入力パラメータのマップ。各パラメータはキーと値のペアです。

with.args

オプション。Docker コンテナの入力を定義する文字列。

with.entrypoint

オプション。Dockerfile に指定した Docker エントリポイント。

env

オプション。環境で使用するためにステップに指定した変数。

continue-on-error

オプション。このステップシーケンスの失敗を無視できるかどうかを示すブール値。

false

デフォルト値。このステップシーケンスが失敗すると、ビルドは失敗します。

true

このステップシーケンスが失敗しても、ビルドは成功する可能性があります。

timeout-minutes

オプション。ステップが、終了するまでに実行できる最大分数。デフォルトでは、タイムアウトがありません。ステップのタイムアウトがビルドのタイムアウトを超えている場合、ビルドのタイムアウトに達すると、ステップは停止します。

Super-Linter GitHub アクションを使用した例を次に示します。

version: 0.2 phases: build: steps: - name: Lint Code Base uses: github/super-linter@v5 env: VALIDATE_ALL_CODEBASE: true USE_FIND_ALGORITHM: true FILTER_REGEX_INCLUDE: '/github/workspace/buildspec.yml'

GitHub でのアクション構文の例 AWS CodeBuild

これらのサンプルグループは、 の buildspec で GitHub アクションを試すために使用できます CodeBuild。

Super-Linter GitHub Action サンプル

このサンプルでは、 Super-Linter GitHub アクションを CodeBuild プロジェクトに追加する方法を示します。Super-Linter アクションは、コードを検査し、コードにエラー、フォーマットの問題、疑わしいコンストラクトがある領域を検出し、結果を CodeBuild コンソールに出力します。

buildspec ファイルの phase セクションを更新 CodeBuild することで、プロジェクトに Super-Linter GitHub アクションを追加できます。

version: 0.2 phases: build: steps: - name: Lint Code Base uses: github/super-linter@v5 env: VALIDATE_ALL_CODEBASE: true

Super-Linter ログは次のようになります。

/github/workspace/hello-world/app.js:3:13: Extra semicolon. /github/workspace/hello-world/app.js:9:92: Trailing spaces not allowed. /github/workspace/hello-world/app.js:21:7: Unnecessarily quoted property 'body' found. /github/workspace/hello-world/app.js:31:1: Expected indentation of 2 spaces but found 4. /github/workspace/hello-world/app.js:32:2: Newline required at end of file but not found.

バッチビルドグラフのサンプル

次の例では、依存関係チェーンを作成し、steps を使用してコマンドを実行するビルドグラフを定義します。この例では、依存関係を持たない build1 が最初に実行されます。build2 は build1 への依存関係があるため、build1 の完了後に build2 が実行されます。詳細については、「ビルドグラフ」を参照してください。

version: 0.2 batch: fast-fail: false build-graph: - identifier: build1 env: variables: BUILD_ID: build1 ignore-failure: false - identifier: build2 env: variables: BUILD_ID: build2 depend-on: - build1 phases: build: steps: - run: echo $BUILD_ID

Amazon CodeGuru Reviewer サンプル

Amazon CodeGuru Reviewer は、Java および Python コードで問題を検出し、修正方法を推奨します。次の例では、 CodeGuru レビュー担当者を使用してリポジトリ分析コードの完全なレビューを提供します。これらのコードレビューは、指定されたブランチ内のすべてのコードをスキャンします。詳細については、「Amazon CodeGuru Reviewer ユーザーガイド」の GitHub 「アクションを使用してコードレビューを作成する」を参照してください。

version: 0.2 phases: build: steps: - name: Amazon CodeGuru Reviewer Scanner if: ${{ always() }} uses: aws-actions/codeguru-reviewer@v1.1 with: s3_bucket: codeguru-reviewer-user artifacts: files: - codeguru-results.sarif.json
注記

Amazon S3 バケットは codeguru-reviewer- プレフィックスで始まる必要があります。

ログは、次のようになります。

INFO CodeReview created with arn=arn:aws:codeguru-reviewer:region:account-id:association:id:code-review:RepositoryAnalysis-job for job=job INFO SARIF persisted to /github/workspace/codeguru-results.sarif.json INFO Amazon CodeGuru Reviewer job execution completed

Amazon CodeGuru Reviewer ジョブが完了すると、sarif レポートが CodeBuild アーティファクトとして生成されます。詳細については、「Amazon CodeGuru Reviewer ユーザーガイド」の「完全なリポジトリ分析」を参照してください。

AWS Secrets Manager サンプル

AWS Secrets Manager は、データベース認証情報、アプリケーション認証情報、OAuth トークン、API キー、およびその他のシークレットをライフサイクルを通じて管理、取得、ローテーションするのに役立ちます。次の例では、Secrets Manager を使用してシークレットを定義し、steps を使用してコマンドを実行します。詳細については、「 AWS Secrets Manager ユーザーガイド」の「 とは AWS Secrets Manager」を参照してください。

version: 0.2 env: secrets-manager: SECRET_VALUE: "arn:aws:secretsmanager:us-east-1:xxxx:secret:/secret-l3IJg9:my_super_secret_key" phases: build: steps: - run: echo $SECRET_VALUE

ログは、次のようになります。

echo $SECRET_VALUE env: SECRET_VALUE: *** ***

環境変数のサンプル

次の例では、env シーケンスの下に環境変数を定義します。S3_BUCKET 変数は buildspec で定義され、その値として <bucket-name> が割り当てられます。この変数は、ドル記号 ($) を使用して GitHub Action env コンテキストにアクセスすることにより、通常の環境変数と同様に if 条件で参照されます。詳細については、「env シーケンス」を参照してください。

version: 0.2 env: variables: S3_BUCKET: "<bucket-name>" phases: build: steps: - if: ${{ env.S3_BUCKET == '<bucket-name>' }} run: echo "S3 bucket is $S3_BUCKET"

ログは、次のようになります。

echo "S3 bucket is $S3_BUCKET" env: S3_BUCKET: my-s3-bucket S3 bucket is my-s3-bucket

エクスポートされた環境変数のサンプル

エクスポートされた環境変数は、 と組み合わせて使用され CodePipeline 、現在のビルドステージからパイプラインの後続のステージに環境変数をエクスポートします。次の例では、エクスポートされた環境変数を MY_VARIABLE  という名前の env シーケンスで定義し、GITHUB_ENV 環境ファイルに書き込みます。

version: 0.2 env: exported-variables: - MY_VARIABLE phases: build: steps: - run: echo "MY_VARIABLE=my-value" >> $GITHUB_ENV

詳細については、 AWS CodeBuild API リファレンスの ExportedEnvironmentVariable「」を参照してください。