ビルドを実行すると、Cloud Build はビルドログを収集してログバケットに保存します。ビルド構成ファイルの設定に基づいて、ビルドログは Cloud Logging バケット、Cloud Storage バケット、または両方の場所に保存されます。ログを含む Logging または Cloud Storage バケットのタイプを構成することもできます。バケットの場所とタイプは、ビルドログを分析する機能と、バケット設定を制御できる範囲に影響します。
概要
ビルド構成ファイルをセットアップする際は、次の点を考慮してください。
保存されたビルドログの保持期間を制御する場合は、Logging に送信します。Logging のログビューアでは、Cloud Storage と比較して、バケットで特定のビルドログを検索するためのオプションも多く用意されています。ただし、Logging を使用すると、ビルドログが生成されてから Logging が受信するまでに遅延が生じることがあります。
ビルドログが生成されてから Logging が受信するまでのレイテンシを短縮する場合は、ビルドログを Cloud Storage のバケットに送信します。
バケットの所有権は、保存されたビルドログの操作方法にも影響します。たとえば、ユーザー所有のバケットではバケットの設定を構成できますが、 Google Cloud所有のバケットは Google Cloudによって作成され、ユーザーが変更することはできません。Logging と Cloud Storage には、ビルドログを受信するバケットのタイプを構成するためのオプションがいくつか用意されています。
バケットのロケーション
ビルド構成ファイルで logging フィールドを設定して、ビルドログの送信先を決定します。
GCS_ONLY: ビルドログが Cloud Storage バケットに送信されます。CLOUD_LOGGING_ONLY: ビルドログが Logging バケットに送信されます。LEGACY: ビルドログは両方のロケーションのバケットに送信されます。loggingが未定義の場合、Cloud Build はこの値を使用します。NONE: ビルドログが保存されません。
ビルドログを Logging に送信する場合は、Logging バケット オプションについて、Cloud Logging のルーティング構成をご覧ください。ビルドログを Cloud Storage に送信する場合は、次のセクションで利用可能な Cloud Storage バケットについて確認してください。バケットの所有権に関する考慮事項セクションでは、バケットのロケーションに関係なく、バケットの所有権に基づくバケットのメリットと考慮事項について説明します。
Cloud Storage のバケット オプション
ビルドログが Cloud Storage に送信される場合、Cloud Build はビルド構成ファイルの logsBucket フィールドと defaultLogsBucketBehavior フィールドを評価して、ビルドログを受信する Cloud Storage バケットのタイプを決定します。
logsBucket フィールドには任意のタイプのバケットを指定できます。logsBucket が定義されている場合、defaultLogsBucketBehavior の値に関係なく、ログは常に Cloud Storage のそのバケットに送信されます。logsBucket が未定義の場合、defaultLogsBucketBehavior の値は次のように使用されます。
REGIONAL_USER_OWNED_BUCKET: ビルドログは、Cloud Storage の Cloud Build が作成したユーザー所有のバケットに送信されます。このバケットはユーザーのプロジェクトにあり、ビルドと同じリージョンを使用します。LEGACY_BUCKET: ビルドログは、 Google Cloud所有のプロジェクト内の Cloud Build が作成し、 Google Cloudが所有するバケットに送信されます。この値は、このフィールドを未定義のままにするのと同じです。
Dockerfile からビルドする際のログの保存
Dockerfile からビルドするときにビルドログの保存を設定するには、gcloud builds
submit の実行時に default-buckets-behavior フラグ値のいずれかを含めます。
regional-user-owned-bucket: ビルドログは、Cloud Storage の Cloud Build が作成したユーザー所有のバケットに送信されます。このバケットはユーザーのプロジェクトにあり、ビルドと同じリージョンを使用します。legacy-bucket: ビルドログは、 Google Cloud所有のプロジェクト内の Cloud Build が作成し、 Google Cloudが所有するバケットに送信されます。この値は、このフィールドを未定義のままにするのと同じです。
バケットの所有権に関する考慮事項
Cloud Storage を使用するか Logging を使用するかにかかわらず、ビルドログをユーザー所有のバケットに送信することをおすすめします。これは、ユーザーが作成したバケット(たとえば、作成したバケットに logsBucket を設定した場合)か、Cloud Build が作成したユーザー所有のバケット(たとえば、リージョン ユーザー所有のバケットの設定を構成した場合)のいずれかになります。これにより、バケットの特定のプロパティを編集し、バケット内のログをいつでも表示できます。 Google Cloud所有のバケットはGoogle Cloud所有のプロジェクトにあるため、バケットを表示または編集することはできません。また、ビルドログは [ビルドの詳細] ページの [ビルドログ] セクションでのみ表示できます。
一般に、ユーザーが作成したバケットは、バケットの作成中と作成後の両方でバケット設定を構成するうえで最も柔軟性があります。ただし、この場合は、ユーザーが作成したバケットがビルドのニーズに合致していることを常に確認する必要があります。バケット リージョンの管理など、Cloud Build で作成され、ユーザーが所有するバケットを使用すると、Cloud Storage でデフォルトで使用可能で、常にビルドと同じリージョンにあるバケットにビルドログを送信できます。次のセクションでは、このユースケースについて詳しく説明します。
バケット リージョンに関する考慮事項
この設定はデータ所在地の要件を満たすのに役立つ可能性があるため、ビルドのリージョンに合わせてビルドバケットを構成することをおすすめします。このようにリージョンを調整する場合は、次の点を考慮してください。
Logging と Cloud Storage でユーザーが作成したバケットは、バケットの作成時に定義されたリージョンを使用します。ユーザーが作成したバケットをビルドの
logging値として設定する場合は、そのリージョンがビルドのリージョンと一致していることを確認します。Cloud Storage でリージョン ユーザー所有バケットを使用するようにビルドログを構成した場合、ビルドログは常にビルドと同じリージョンのバケットに送信されます。
Google Cloud所有のバケットは、 Google Cloudで定義されたリージョンに設定されます。そのため、このリージョンはビルドのリージョンと常に一致するとは限りません。
既存のビルド構成ファイルに defaultLogsBucketBehavior を追加する
logging または logsBucket を以前に構成した既存のビルド構成ファイルに defaultLogsBucketBehavior オプションを追加する場合は、すべてのログ ストレージ設定を評価して、ログが意図したとおりに保存されるようにすることをおすすめします。次のいずれかに該当する場合、Cloud Build は defaultLogsBucketBehavior を無視します。
loggingがCLOUD_LOGGING_ONLYまたはNONEに設定されている。loggingがGCS_ONLYまたはLEGACYに設定され、logsBucketが定義されている。
ビルド構成ファイルでログ保存フィールドを定義せずにビルドを実行すると、Cloud Build は logging を LEGACY に設定します。
次のステップ
- ビルドログを保存、表示、削除する方法を確認する
- Cloud Build によって作成される監査ログについて学習する。
- ビルド結果を表示する方法を学習する。
- Cloud Build IAM 権限の詳細を確認する。