빌드 이벤트 프로토콜 용어집

각 BEP 이벤트 유형에는 자체 시맨틱이 있으며 최소한 build_event_stream.proto에 문서화되어 있습니다. 다음 용어집에서는 각 이벤트 유형을 설명합니다.

취소됨

다른 이벤트와 달리 Aborted에는 상응하는 ID 유형이 없습니다. Aborted 이벤트가 다른 유형의 이벤트를 대체하기 때문입니다. 이 이벤트는 빌드가 일찍 종료되었고 빌드가 표시되는 이벤트 ID가 정상적으로 생성되지 않았음을 나타냅니다. Aborted에는 빌드가 완료되지 않은 이유를 설명하는 열거형 및 사용자 친화적인 설명이 포함됩니다.

예를 들어, 사용자가 Bazel을 중단할 때 빌드가 대상을 평가하는 경우 BEP에는 다음과 같은 이벤트가 포함됩니다.

{
  "id": {
    "targetCompleted": {
      "label": "//:foo",
      "configuration": {
        "id": "544e39a7f0abdb3efdd29d675a48bc6a"
      }
    }
  },
  "aborted": {
    "reason": "USER_INTERRUPTED"
  }
}

실행됨

빌드의 특정 작업 실행에 관한 세부정보를 제공합니다. 기본적으로 이 이벤트는 빌드 실패의 근본 원인을 식별하는 데 도움이 되도록 실패한 작업의 BEP에만 포함됩니다. 사용자는 모든 ActionExecuted 이벤트를 포함하도록 --build_event_publish_all_actions 플래그를 설정할 수 있습니다.

빌드 완료

명령어가 완료되면 단일 BuildFinished 이벤트가 전송되고 명령어의 종료 코드가 포함됩니다. 이 이벤트는 신뢰할 수 있는 성공/실패 정보를 제공합니다.

빌드 메타데이터

--build_metadata 플래그의 파싱된 콘텐츠를 포함합니다. 이 이벤트는 외부 데이터 (예: 식별자)를 연결하여 다른 도구와의 Bazel 통합을 지원하기 위해 존재합니다.

빌드 측정항목

단일 BuildMetrics 이벤트가 모든 명령어의 끝에 전송되며 명령어 도중 빌드 도구의 동작을 수량화하는 데 유용한 카운터/게이지를 포함합니다. 이러한 측정항목은 실제로 완료된 작업을 나타내며 재사용된 캐시된 작업은 계산하지 않습니다.

명령어 실행 중에 자바 가비지 컬렉션이 없으면 memory_metrics가 채워지지 않을 수 있습니다. 사용자는 --memory_profile=/dev/null 옵션을 설정하여 가비지 컬렉터가 명령어 끝에 실행하여 memory_metrics를 채우도록 할 수 있습니다.

{
  "id": {
    "buildMetrics": {}
  },
  "buildMetrics": {
    "actionSummary": {
      "actionsExecuted": "1"
    },
    "memoryMetrics": {},
    "targetMetrics": {
      "targetsLoaded": "9",
      "targetsConfigured": "19"
    },
    "packageMetrics": {
      "packagesLoaded": "5"
    },
    "timingMetrics": {
      "cpuTimeInMs": "1590",
      "wallTimeInMs": "359"
    }
  }
}

빌드 시작됨

BEP 스트림의 첫 번째 이벤트인 BuildStarted에는 의미 있는 작업이 시작되기 전에 명령어를 설명하는 메타데이터가 포함됩니다.

빌드 도구 로그

빌드 도구의 동작을 이해하거나 디버그하는 데 도움이 될 수 있는 빌드 도구에서 생성된 파일의 URI를 포함하여 단일 BuildToolLogs 이벤트가 명령어 끝에 전송됩니다. 일부 정보는 인라인으로 포함될 수 있습니다.

{
  "id": {
    "buildToolLogs": {}
  },
  "lastMessage": true,
  "buildToolLogs": {
    "log": [
      {
        "name": "elapsed time",
        "contents": "MC4xMjEwMDA="
      },
      {
        "name": "process stats",
        "contents": "MSBwcm9jZXNzOiAxIGludGVybmFsLg=="
      },
      {
        "name": "command.profile.gz",
        "uri": "file:///tmp/.cache/bazel/_bazel_foo/cde87985ad0bfef34eacae575224b8d1/command.profile.gz"
      }
    ]
  }
}

CommandLine

BEP에는 모든 명령줄 인수 (옵션 및 해석되지 않은 인수 포함)의 표현이 포함된 여러 CommandLine 이벤트가 포함되어 있습니다. 각 CommandLine 이벤트의 StructuredCommandLineId에는 전달하는 표현을 나타내는 라벨이 있습니다. 이러한 이벤트 세 개는 BEP에 표시됩니다.

  • "original": Bazel이 Bazel 클라이언트에서 받은 명령줄을 다시 구성했으며 시작 옵션은 .rc 파일에서 가져오지 않았습니다.
  • "canonical": .rc 파일이 확장되고 호출 정책이 적용된 유효 명령줄입니다.
  • "tool": --experimental_tool_command_line 옵션에서 입력됩니다. 이는 BEP를 통해 Bazel을 래핑하는 도구의 명령줄을 전달하는 데 유용합니다. 직접 사용되는 base64로 인코딩된 CommandLine 바이너리 프로토콜 버퍼 메시지이거나 파싱되었지만 해석되지 않은 문자열일 수 있습니다 (이 도구의 옵션은 Bazel의 옵션과 다를 수 있음).

구성

Configuration 이벤트는 빌드의 최상위 타겟에 사용된 모든 configuration에 대해 전송됩니다. 항상 하나 이상의 구성 이벤트가 있습니다. idTargetConfiguredTargetComplete 이벤트 ID에 의해 재사용되며 다중 구성 빌드에서 이러한 이벤트를 구별하는 데 필요합니다.

{
  "id": {
    "configuration": {
      "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
    }
  },
  "configuration": {
    "mnemonic": "k8-fastbuild",
    "platformName": "k8",
    "cpu": "k8",
    "makeVariable": {
      "COMPILATION_MODE": "fastbuild",
      "TARGET_CPU": "k8",
      "GENDIR": "bazel-out/k8-fastbuild/bin",
      "BINDIR": "bazel-out/k8-fastbuild/bin"
    }
  }
}

편리한 심볼릭 링크 식별

실험용. --experimental_convenience_symlinks_bep_event 옵션이 설정되면 build 명령어로 단일 ConvenienceSymlinksIdentified 이벤트가 생성되어 작업공간의 심볼릭 링크를 관리하는 방법을 나타냅니다. 이렇게 하면 Bazel을 원격으로 호출하는 빌드 도구를 사용할 수 있으며, 그런 다음 Bazel이 로컬에서 실행된 것처럼 로컬 작업공간을 정렬할 수 있습니다.

{
  "id": {
    "convenienceSymlinksIdentified":{}
  },
  "convenienceSymlinksIdentified": {
    "convenienceSymlinks": [
      {
        "path": "bazel-bin",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/bin"
      },
      {
        "path": "bazel-genfiles",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/genfiles"
      },
      {
        "path": "bazel-out",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out"
      }
    ]
  }
}

Fetch

가져오기 작업이 명령어 실행의 일부로 발생했음을 나타냅니다. 다른 이벤트와 달리 캐시된 가져오기 결과가 재사용되면 이 이벤트는 BEP 스트림에 표시되지 않습니다.

이름이 지정된 파일

NamedSetOfFiles 이벤트는 명령어 평가 중에 생성된 파일의 depset와 일치하는 구조를 보고합니다. 전이적으로 포함된 구분은 NamedSetOfFilesId로 식별됩니다.

스트림의 NamedSetOfFiles 이벤트를 해석하는 방법에 관한 자세한 내용은 BEP 예시 페이지를 참고하세요.

옵션 파싱됨

단일 OptionsParsed 이벤트는 명령어에 적용되는 모든 옵션을 나열하여 시작 옵션과 명령어 옵션을 구분합니다. InvocationPolicy(있는 경우)도 포함되어 있습니다.

{
  "id": {
    "optionsParsed": {}
  },
  "optionsParsed": {
    "startupOptions": [
      "--max_idle_secs=10800",
      "--noshutdown_on_low_sys_mem",
      "--connect_timeout_secs=30",
      "--output_user_root=/tmp/.cache/bazel/_bazel_foo",
      "--output_base=/tmp/.cache/bazel/_bazel_foo/a61fd0fbee3f9d6c1e30d54b68655d35",
      "--deep_execroot",
      "--expand_configs_in_place",
      "--idle_server_tasks",
      "--write_command_log",
      "--nowatchfs",
      "--nofatal_event_bus_exceptions",
      "--nowindows_enable_symlinks",
      "--noclient_debug",
    ],
    "cmdLine": [
      "--enable_platform_specific_config",
      "--build_event_json_file=/tmp/bep.json"
    ],
    "explicitCmdLine": [
      "--build_event_json_file=/tmp/bep.json"
    ],
    "invocationPolicy": {}
  }
}

패턴 펼침

PatternExpanded 이벤트는 명령줄에 제공된 패턴과 일치하는 모든 타겟의 집합을 나타냅니다. 성공적인 명령어의 경우 단일 이벤트가 PatternExpandedId의 모든 패턴과 PatternExpanded 이벤트의 하위 요소에 모든 타겟과 함께 존재합니다. 패턴이 test_suite로 확장되면 test_suite에 포함된 테스트 타겟 집합입니다. 확인되지 않는 각 패턴에 대해 BEP에는 패턴을 식별하는 PatternExpandedId가 있는 추가 Aborted 이벤트가 포함됩니다.

{
  "id": {
    "pattern": {
      "pattern":["//base:all"]
    }
  },
  "children": [
    {"targetConfigured":{"label":"//base:foo"}},
    {"targetConfigured":{"label":"//base:foobar"}}
  ],
  "expanded": {
    "testSuiteExpansions": {
      "suiteLabel": "//base:suite",
      "testLabels": "//base:foo_test"
    }
  }
}

Progress

진행 이벤트에는 명령어 실행 중에 Bazel에서 생성된 표준 출력과 표준 오류가 포함됩니다. 이러한 이벤트는 논리적인 '상위' 이벤트 (특히 NamedSetOfFiles)에 의해 공지되지 않은 이벤트를 알리는 데 필요한 경우 자동으로 생성됩니다.

타겟 완료

실행 단계를 완료하는 각 (target, configuration, aspect) 조합의 경우 TargetComplete 이벤트가 BEP에 포함됩니다. 이벤트에는 대상의 성공/실패와 대상에서 요청한 출력 그룹이 포함됩니다.

{
  "id": {
    "targetCompleted": {
      "label": "//examples/py:bep",
      "configuration": {
        "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
      }
    }
  },
  "completed": {
    "success": true,
    "outputGroup": [
      {
        "name": "default",
        "fileSets": [
          {
            "id": "0"
          }
        ]
      }
    ]
  }
}

타겟 구성됨

분석 단계를 완료하는 각 대상의 경우 TargetConfigured 이벤트가 BEP에 포함됩니다. 이는 대상의 '규칙 종류' 속성에 대한 신뢰할 수 있는 소스입니다. 대상에 적용된 구성이 이벤트의 발표된 하위 요소에 표시됩니다.

예를 들어 --experimental_multi_cpu 옵션으로 빌드하면 구성 두 개가 있는 단일 타겟에 다음과 같은 TargetConfigured 이벤트가 생성될 수 있습니다.

{
  "id": {
    "targetConfigured": {
      "label": "//starlark_configurations/multi_arch_binary:foo"
    }
  },
  "children": [
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "c62b30c8ab7b9fc51a05848af9276529842a11a7655c71327ade26d7c894c818"
        }
      }
    },
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "eae0379b65abce68d54e0924c0ebcbf3d3df26c6e84ef7b2be51e8dc5b513c99"
        }
      }
    }
  ],
  "configured": {
    "targetKind": "foo_binary rule"
  }
}

타겟 요약

실행되는 각 (target, configuration) 쌍의 경우 TargetSummary 이벤트는 구성된 타겟의 실행과 구성된 타겟에 적용된 모든 측면을 포괄하는 성공 성공 결과에 포함됩니다.

TestResult

테스트가 요청되면 테스트마다 테스트 시도, 샤드, 실행마다 TestResult 이벤트가 전송됩니다. 이를 통해 BEP 소비자는 테스트에 실패한 테스트 작업을 정확하게 식별하고 각 테스트 작업의 테스트 출력 (예: 로그, test.xml 파일)을 식별할 수 있습니다.

테스트 요약

테스트가 요청되면 각 테스트 (target, configuration)의 테스트 TestSummary가 전송되어 테스트 결과를 해석하는 데 필요한 정보를 포함합니다. BEP 소비자가 이러한 측정기준에서 아티팩트를 구분할 수 있도록 테스트당 시도 횟수, 샤드, 실행 횟수가 포함되어 있습니다. 테스트마다 시도와 실행은 FLAKY 테스트와 FAILED 테스트를 구분하기 위해 집계 TestStatus를 생성하는 동안 고려됩니다.

구조화되지 않은 명령줄

CommandLine과 달리 이 이벤트는 빌드 도구에서 모든 .bazelrc 파일을 확장하고 --config 플래그를 고려한 후 파싱되지 않은 명령줄 플래그를 문자열 형식으로 전달합니다.

UnstructuredCommandLine 이벤트는 지정된 명령어 실행을 정밀하게 재현하기 위해 사용할 수 있습니다.

작업공간 구성

단일 WorkspaceConfig 이벤트에는 실행 루트와 같은 작업공간에 대한 구성 정보가 포함됩니다.

작업공간 상태

단일 WorkspaceStatus 이벤트에는 작업공간 상태 명령어의 결과가 포함됩니다.