ビルドログを保存、管理する

ビルドを実行すると、Cloud Build がビルドログを収集して保存します。このページでは、ビルドログを保存、表示、削除する方法について説明します。

ビルドログの保存場所を選択する

ビルドログを Cloud Logging または Cloud Storage に保存するように Cloud Build を構成するには、Cloud Build 構成ファイルlogging フィールドを追加します。 ビルド構成ファイルで logging フィールドを指定しない場合、Cloud Build はビルドログを Logging と Cloud Storage の両方に保存します。

次の手順では、ビルドログを Logging にのみ保存します。

  1. ビルド構成ファイルで、logging の値を CLOUD_LOGGING_ONLY に設定します。

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'us-east1-docker.pkg.dev/myproject/myimage', '.']
    options:
      logging: CLOUD_LOGGING_ONLY
    

    JSON

    {
      "steps": [
      {
        "name": "gcr.io/cloud-builders/docker",
        "args": [
          "build",
          "-t",
          "us-east1-docker.pkg.dev/myproject/myimage",
          "."
        ]
      }
      ],
      "options": {
        "logging": "CLOUD_LOGGING_ONLY"
      }
    }
    
  2. ビルド構成ファイルを使用して、コマンドライン、API、またはトリガーでビルドを開始します。

ビルドログ フィールドをログエントリ フィールドにマッピングする

ビルドログが Logging に送信されるときに、指定されたビルドログ フィールドが LogEntry フィールドにマッピングされるように、ビルドログの JSON を構成できます。たとえば、ビルドログに message が含まれている場合、生成されたログエントリの textPayload または jsonPayload.message にメッセージが表示されます。マッピングできないビルドログ フィールドは、ログエントリ jsonPayload に表示されます。

ビルドログでフィールド マッピングを有効にするには、BuildOptions フィールドの enableStructuredLoggingTRUE に設定します。

次の表に、ログエントリ フィールドにマッピングされるビルドログ フィールドを示します。

BuildLog フィールド(JSON) LogEntry フィールド 説明 メモ
message textPayload または jsonPayload.message ユーザーがログメッセージを設定できるようにする

文字列にする必要があります。

マッピング可能なフィールドのみがビルドログに含まれている場合、textPayload にメッセージが表示されます。それ以外の場合は、jsonPayload.message にメッセージが表示されます。

ビルドログに複数のステップが含まれている場合、ステップ ID がメッセージの先頭に表示されます。

severity severity ユーザーがログの重大度を設定できるようにします。 LogSeverity の列挙型にする必要があります。

次のビルドログ フィールドはマッピングできないため、ビルドログに表示されている場合はログエントリから削除されます。

  • httpRequest
  • logging.googleapis.com/insertId
  • logging.googleapis.com/labels
  • logging.googleapis.com/operation
  • logging.googleapis.com/sourceLocation
  • logging.googleapis.com/spanId
  • logging.googleapis.com/trace
  • logging.googleapis.com/trace_sampled
  • time
  • timestamp
  • timestampSeconds
  • timestampNanos

他のビルドログ フィールドはすべて、ログエントリの jsonPayload の一部として表示されます。

Google が作成したデフォルト バケットへのビルドログの保存

デフォルトでは、Cloud Build は Google が作成した Cloud Storage バケットにビルドログを保存します。Google が作成した Cloud Storage バケットでビルドログ ストアを表示できますが、それ以外の変更はできません。ログバケットを完全に制御する必要がある場合は、ユーザー作成の Cloud Storage バケットにログを保存します。

ユーザーが作成したバケットへのビルドログの保存

IAM の権限:

独自の Cloud Storage バケットにビルドログを保存するには、まずビルドに使用しているサービス アカウントに必要な IAM 権限を付与する必要があります。

  • Cloud Storage バケットと Cloud Build が同じ Google Cloud プロジェクト内にあり、Cloud Build の従来のサービス アカウントを使用している場合、Cloud Build の従来のサービス アカウントには必要な IAM 権限がデフォルトで付与されています。別途権限を付与する必要はありません。

  • それ以外の場合は、ビルドに使用しているサービス アカウントにストレージ管理者のロールを付与します。

    1. Cloud Storage バケットが配置されているプロジェクトの [IAM] ページを開きます。

      [IAM] ページを開く

    2. [アクセス権を付与] をクリックします。

    3. サービス アカウントのメールアドレスを入力します。

    4. [Cloud Storage] > [Storage Admin] を選択します。

    5. [保存] をクリックします。

ビルドログを保存する Cloud Storage バケットを指定するには:

  1. Google Cloud プロジェクトで、保持ポリシーを設定せずに、ビルドログを保存する Cloud Storage バケットを作成します。

  2. ビルド構成ファイルに、ビルドログを保存するために作成した Cloud Storage バケットを指す logsBucket フィールドを追加します。次のビルド構成ファイルの例では、コンテナ イメージをビルドし、ビルドログを mylogsbucket という名前のバケットに保存します。

    YAML

        steps:
        - name: 'gcr.io/cloud-builders/docker'
          args: [ 'build', '-t', 'us-east1-docker.pkg.dev/myproject/myimage', '.' ]
        logsBucket: 'gs://mylogsbucket'
        options:
          logging: GCS_ONLY
    

    JSON

        {
          "steps": [
           {
             "name": "gcr.io/cloud-builders/docker",
             "args": [
               "build",
               "-t",
               "us-east1-docker.pkg.dev/myproject/myimage",
               "."
             ]
           }
           ],
           "logsBucket": "gs://mylogsbucket",
           "options": {
             "logging": "GCS_ONLY"
           }
        }
    
  3. ビルド構成ファイルを使用して、コマンドライン、API、またはトリガーでビルドを開始します。

ビルドが完了すると、Cloud Build はビルド構成ファイルで指定した Cloud Storage バケットにログを保存します。

ユーザー所有のリージョン化されたバケットへのビルドログの保存

デフォルトでは、Cloud Build は Google 指定のリージョンにビルドログを保存します。このリージョンは、ビルドを実行するロケーションとは異なる場合があります。defaultLogsBucketBehavior オプションを使用すると、ビルドと同じリージョンに、独自のプロジェクト内でデフォルトのログバケットを使用するように Cloud Build を構成できます。この構成では、ログデータのロケーションをより細かく制御できるため、データ所在地に関する要件を遵守できます。

独自のプロジェクトにログを保存すると費用が発生します。価格設定の詳細については、Cloud Storage の料金体系をご覧ください。

リージョン化されたユーザー所有のログを使用するように Cloud Build を構成します。

  1. 必要な IAM 権限を付与します。

    • Cloud Build の従来のサービス アカウントを使用している場合、Cloud Build の従来のサービス アカウントには必要な IAM 権限がデフォルトで付与されています。別途権限を付与する必要はありません。

    • 他のサービス アカウントの場合は、ビルドに使用しているサービス アカウントにストレージ管理者のロールを付与します。サービス アカウントにロールを付与する手順については、プロジェクトでのロールの付与をご覧ください。

  2. ビルド構成で、defaultLogsBucketBehavior オプションを追加し、その値を REGIONAL_USER_OWNED_BUCKET に設定します。

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: [ 'build', '-t', 'us-central1-docker.pkg.dev/myproject/myrepo/myimage', '.' ]
    options:
      defaultLogsBucketBehavior: REGIONAL_USER_OWNED_BUCKET
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "build",
            "-t",
            "us-central1-docker.pkg.dev/myproject/myrepo/myimage",
            "."
          ]
        }
        ],
        "options": {
          "defaultLogsBucketBehavior": "REGIONAL_USER_OWNED_BUCKET"
        }
    }
    
  3. ビルド構成ファイルを使用して、コマンドライン、API、またはトリガーでビルドを開始します。

    ビルドを実行すると、Cloud Build はビルドを実行しているリージョンに新しいログバケットを作成し、そのバケットにビルドログを保存します。同じプロジェクトとリージョンでの後続のビルドでは、デフォルトで既存のバケットが使用されます。

defaultLogsBucketBehavior オプションを設定して複数のリージョンでビルドを作成すると、Cloud Build はビルドログ用に複数のバケットを作成します。

独自のプロジェクトに保存されるリージョン化されたビルドログには保持ポリシーがありません。この設定は変更できません。

ログ設定間の優先度

既存のビルド構成ファイルに defaultLogsBucketBehavior オプションを追加する場合、以前に logging オプションまたは logsBucket オプションを構成している場合は、設定の競合を防ぐために、それらの設定を削除することをおすすめします。

具体的には、次の設定では、defaultLogsBucketBehavior は機能しません。

  • ビルドログを Cloud Logging に保存する logging: CLOUD_LOGGING_ONLY
  • ロギングをオフにする logging: NONE

ビルド構成でロギング オプションを設定せずにビルドを実行すると、Cloud Build は logging: LEGACY を設定し、Google が作成したデフォルトの Cloud Storage バケットにログを保存します。defaultLogsBucketBehavior: REGIONAL_USER_OWNED_BUCKET を追加すると、このオプションは logging: LEGACY をオーバーライドします。

ビルドログを表示

IAM の権限:

  • ビルドログが Logging にある場合、ビルドログを表示したいプリンシパルにビルドが構成されているプロジェクトのログ閲覧者のロールを付与します。

    1. [IAM] ページを開きます。

      [IAM] ページを開く

    2. プロジェクトを選択し、[開く] をクリックします。

    3. 権限の表でプリンシパルのメール ID を探し、鉛筆アイコンをクリックします。

    4. [Logging] > [ログ閲覧者] ロールを選択します。

    5. [保存] をクリックします。

  • ビルドログが Google 作成のデフォルトの Cloud Storage バケットに存在する場合、ビルドログを表示したいプリンシパルに、ビルドが構成されているプロジェクトのプロジェクト閲覧者ロールを付与します。

    1. [IAM] ページを開きます。

      [IAM] ページを開く

    2. プロジェクトを選択し、[開く] をクリックします。

    3. 権限の表でプリンシパルのメール ID を探し、鉛筆アイコンをクリックします。

    4. [プロジェクト] > [閲覧者] のロールを選択します。

    5. [保存] をクリックします。

    ビルドログがユーザー作成またはユーザー所有の Cloud Storage バケットに存在する場合、ビルドログを表示させたいプリンシパルにストレージ オブジェクト閲覧者のロールを付与します。

    1. [IAM] ページを開きます。

      [IAM] ページを開く

    2. プロジェクトを選択し、[開く] をクリックします。

    3. 権限の表でプリンシパルのメール ID を探し、鉛筆アイコンをクリックします。

    4. [Cloud Storage] > [Storage Object Viewer] のロールを選択します。

    5. [保存] をクリックします。

Cloud Build でビルドログを表示するには:

コンソール

  1. Google Cloud Console で Cloud Build ページを開きます。

    Cloud Build ページを開く

  2. プロジェクトを選択し、[開く] をクリックします。

  3. [リージョン] プルダウン メニューで、ビルドのリージョンを選択します。

  4. [ビルド履歴] ページで、特定のビルドをクリックします。

  5. [ビルドの詳細] ページの [ステップ] で、[ビルドの概要] をクリックしてビルド全体のビルドログを表示するか、ビルドステップをクリックして対象のステップのビルドログを表示します。

    [ビルドの詳細] ページのビルドログのスクリーンショット

  6. ログが Logging に保存されている場合は、[ビルドログ] パネルで アイコンをクリックしてログ エクスプローラでログを表示します。

    ログ エクスプローラのビルドログのスクリーンショット

gcloud

gcloud builds log コマンドを実行します。ここで、build-id はビルドログを取得するビルドの ID です。ビルド ID は、gcloud builds submit の実行時にビルド送信プロセスの最後に表示されるか、gcloud builds list の実行時に ID 列に表示されます。

gcloud builds log build-id

GitHub と GitHub Enterprise でビルドログを表示するには:

GitHub トリガーまたは GitHub Enterprise トリガーを作成し、オプションとして --include-logs-with-status を指定した場合、GitHub と GitHub Enterprise でビルドログを表示できます。

GitHub と GitHub Enterprise でビルドログを表示するには:

  1. トリガーに関連付けられているリポジトリに移動します。

  2. commit のリストに移動します。

  3. ビルドログを表示する commit の行を見つけます。

  4. commit の行にある結果アイコンをクリックします。

    commit に関連付けられているチェックのリストが表示されます。

  5. ビルドログを表示する行の [詳細] をクリックします。

    commit に関連付けられている [概要] ページが表示されます。--include-logs-with-status フラグを使用してトリガーを作成した場合、ページの [詳細] セクションにビルドログが表示されます。

ビルドログを削除する

Google が作成したログバケットからビルドログを削除することはできません。

ユーザー作成のログバケットからビルドログを削除する場合は、以下の手順に従います。

  1. ログを削除するユーザーまたはサービス アカウントにストレージ オブジェクト管理者のロールを付与します。

  2. オブジェクトの削除に記載の Cloud Storage オブジェクトを削除する手順に従って、ビルドログを削除します。

ユーザー作成のログバケットを削除するには、以下の手順に従います。

  1. ログバケットを削除するユーザーまたはサービス アカウントにストレージ管理者のロールを付与します。

  2. バケットの削除に記載のバケットを削除するための手順に従い、ログバケットを削除します。

次のステップ