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

문제 신고 <ph type="x-smartling-placeholder"></ph> 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

각 BEP 이벤트 유형에는 고유한 시맨틱이 있으며, 이 내용은 build_event_stream.proto. 다음 용어집에서는 각 이벤트 유형을 설명합니다.

취소됨

다른 이벤트와 달리 Aborted에는 상응하는 ID 유형이 없습니다. Aborted 이벤트는 다른 유형의 이벤트를 대체합니다. 이 이벤트는 빌드가 조기에 종료되었고 아래에 표시되는 이벤트 ID가 생성되지 않았습니다. 평소처럼요. Aborted에는 설명하는 열거형 및 사용자 친화적인 설명이 포함되어 있습니다. 확인할 수 있습니다

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

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

ActionExecuted

특정 애플리케이션의 실행에 대한 세부정보를 제공합니다. 빌드의 작업 기본적으로 이 이벤트는 근본 원인 파악을 지원하기 위해 실패한 작업에 대해서만 BEP에 포함됨 빌드 실패의 비율 사용자는 --build_event_publish_all_actions 플래그를 설정할 수 있습니다. ActionExecuted 이벤트를 모두 포함합니다.

BuildFinished

명령어가 완료된 후 단일 BuildFinished 이벤트가 전송되며 명령어에 대한 종료 코드가 포함됩니다. 이 이벤트는 신뢰할 수 있는 성공/실패 정보

BuildMetadata

--build_metadata 플래그의 파싱된 콘텐츠를 포함합니다. 이미 존재하는 이벤트입니다. 외부 데이터 (예: 참조).

BuildMetrics

단일 BuildMetrics 이벤트가 모든 명령어가 끝날 때 전송되며 카운터/게이지를 사용하여 전체 프로세스 동안 빌드 도구의 동작을 명령어와 함께 사용하면 됩니다 이러한 측정항목은 실제로 완료된 작업이며 캐시된 것으로 집계되지 않음을 나타냅니다. 공유하는 것입니다.

Java 가비지가 없으면 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"
    }
  }
}

BuildStarted

BEP 스트림의 첫 번째 이벤트인 BuildStarted에는 명령을 실행합니다.

BuildToolLogs

명령어 끝에 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 이벤트가 전송됩니다. 사용되는 객체입니다. 1개 이상의 구성 이벤트가 항상 존재해야 합니다. idTargetConfigured에서 재사용되며 TargetComplete 이벤트 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"
    }
  }
}

ConvenienceSymlinksIdentified

실험용. --experimental_convenience_symlinks_bep_event 옵션이 설정되면 단일 ConvenienceSymlinksIdentified 이벤트는 작업공간의 심볼릭 링크를 관리하는 방법을 나타내는 build 명령어입니다. 이를 통해 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"
      }
    ]
  }
}

가져오기

명령어 실행 과정에서 가져오기 작업이 발생했음을 나타냅니다. 다른 이벤트와 달리 캐시된 가져오기 결과를 다시 사용하는 경우 이 이벤트는 BEP 스트림에 표시됩니다.

NamedSetOfFiles

NamedSetOfFiles 이벤트는 다음과 일치하는 구조를 보고합니다. 명령어 평가 중에 생성된 파일의 depset 임시로 포함된 종속 항목은 NamedSetOfFilesId로 식별됩니다.

스트림의 NamedSetOfFiles 이벤트 해석에 관한 자세한 내용은 BEP 예시 페이지

OptionsParsed

단일 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

PatternExpanded 이벤트는 패턴과 일치하는 모든 타겟 집합을 나타냅니다. 사용할 수 있습니다 성공적인 명령어의 경우 단일 이벤트가 있습니다. PatternExpandedId의 모든 패턴 및 PatternExpanded 이벤트의 하위 요소입니다. 패턴이 test_suite: test_suite에 의해 포함된 테스트 타겟 집합입니다. 각 BEP에 추가 Aborted가 포함되어 있는 경우 이벤트를 식별하는 PatternExpandedId로 반환됩니다.

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

진행률

진행률 이벤트에는 Bazel에서 생성된 표준 출력 및 표준 오류가 포함됩니다. kube-APIserver입니다 이러한 이벤트는 논리적 '상위 요소'가 발표하지 않은 이벤트를 공지 이벤트( 특히 NamedSetOfFiles에 해당해야 합니다.)

TargetComplete

다음을 완료하는 각 (target, configuration, aspect) 조합의 경우 실행 단계에서는 TargetComplete 이벤트가 BEP에 포함되어 있습니다. 이벤트에 포함 대상의 성공/실패 및 대상의 요청된 출력 그룹

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

TargetConfigured

분석 단계를 완료하는 각 대상에 대해 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"
  }
}

TargetSummary

실행되는 각 (target, configuration) 쌍의 경우 TargetSummary 이벤트는 구성된 대상의 실행 및 구성된 타겟에 적용된 모든 관점을 보여줍니다.

TestResult

테스트가 요청되면 테스트를 시도할 때마다 TestResult 이벤트가 전송됩니다. 샤드를 생성하고 테스트별로 실행합니다. 이를 통해 BEP 소비자는 테스트 작업이 테스트에 실패했으며 테스트 결과 (예: 로그, test.xml 파일)이 있는지 확인하세요.

TestSummary

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

UnstructuredCommandLine

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

UnstructuredCommandLine 이벤트를 사용하면 실행할 수 있습니다

WorkspaceConfig

단일 WorkspaceConfig 이벤트에는 다른 작업공간도 마찬가지입니다(예: 실행 루트).

WorkspaceStatus

단일 WorkspaceStatus 이벤트에 작업공간 상태의 결과가 포함됩니다. 명령어를 사용하세요.