Bảng chú giải thuật ngữ về giao thức sự kiện về bản dựng

Báo cáo sự cố Xem nguồn

Mỗi loại sự kiện BEP có ngữ nghĩa riêng, được ghi lại tối thiểu trong build_event_stream.proto. Bảng thuật ngữ sau đây mô tả từng loại sự kiện.

Đã hủy

Không giống như các sự kiện khác, Aborted không có loại mã nhận dạng tương ứng, vì sự kiện Aborted sẽ thay thế sự kiện thuộc các loại khác. Sự kiện này cho biết bản dựng đã chấm dứt sớm và mã sự kiện mà bản dựng xuất hiện không được tạo bình thường. Aborted chứa một enum và nội dung mô tả thân thiện với con người để giải thích lý do bản dựng chưa hoàn tất.

Ví dụ: nếu một bản dựng đang đánh giá một mục tiêu khi người dùng làm gián đoạn Bazel, thì BEP sẽ chứa một sự kiện như sau:

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

ActionExecuted

Cung cấp thông tin chi tiết về việc thực thi một Hành động cụ thể trong bản dựng. Theo mặc định, sự kiện này chỉ được đưa vào BEP cho các hành động không thành công, để hỗ trợ việc xác định nguyên nhân gốc rễ gây ra lỗi bản dựng. Người dùng có thể đặt cờ --build_event_publish_all_actions để bao gồm tất cả các sự kiện ActionExecuted.

BuildFinished

Một sự kiện BuildFinished được gửi sau khi lệnh hoàn tất và chứa mã thoát cho lệnh đó. Sự kiện này cung cấp thông tin đáng tin cậy về thành công/thất bại.

BuildMetadata

Chứa nội dung đã phân tích cú pháp của cờ --build_metadata. Sự kiện này nhằm hỗ trợ quá trình tích hợp Bazel với các công cụ khác bằng cách lấy dữ liệu bên ngoài (chẳng hạn như giá trị nhận dạng).

BuildMetrics

Một sự kiện BuildMetrics sẽ được gửi ở cuối mỗi lệnh và bao gồm các bộ đếm/bộ đo lường hữu ích cho việc định lượng hành vi của công cụ tạo bản dựng trong lệnh đó. Các chỉ số này cho biết công việc thực sự đã hoàn tất và không tính công việc được lưu vào bộ nhớ đệm được sử dụng lại.

Xin lưu ý rằng memory_metrics có thể không được điền nếu không có sự kiện thu thập rác Java trong quá trình thực thi lệnh. Người dùng có thể thiết lập tuỳ chọn --memory_profile=/dev/null để buộc trình thu thập rác chạy ở cuối lệnh để điền vào memory_metrics.

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

BuildStarted

Sự kiện đầu tiên trong luồng BEP, BuildStarted bao gồm siêu dữ liệu mô tả lệnh trước khi bắt đầu bất kỳ công việc có ý nghĩa nào.

BuildToolLogs

Một sự kiện BuildToolLogs sẽ được gửi ở cuối lệnh, bao gồm cả URI của các tệp do công cụ xây dựng tạo ra có thể hỗ trợ việc tìm hiểu hoặc gỡ lỗi hành vi của công cụ bản dựng. Một số thông tin có thể được đưa vào cùng dòng.

{
  "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 chứa nhiều sự kiện CommandLine chứa nội dung đại diện cho tất cả đối số dòng lệnh (bao gồm cả các tuỳ chọn và đối số chưa được diễn giải). Mỗi sự kiện CommandLine có một nhãn trong StructuredCommandLineId cho biết nội dung biểu thị mà sự kiện đó truyền tải; 3 sự kiện như vậy sẽ xuất hiện trong BEP:

  • "original": Tạo lại dòng lệnh khi Bazel nhận lệnh này từ ứng dụng khách Bazel mà không có các tuỳ chọn khởi động nguồn từ tệp .rc.
  • "canonical": Dòng lệnh hiệu quả có tệp .rc được mở rộng và chính sách gọi được áp dụng.
  • "tool": Được điền sẵn từ tuỳ chọn --experimental_tool_command_line. Thao tác này rất hữu ích khi truyền tải dòng lệnh của công cụ gói Bazel thông qua BEP. Đây có thể là thông báo vùng đệm giao thức nhị phân CommandLine được mã hoá base64 được sử dụng trực tiếp hoặc một chuỗi được phân tích cú pháp nhưng không được diễn giải (vì các tuỳ chọn của công cụ có thể khác với Bazel).

Cấu hình

Hệ thống sẽ gửi một sự kiện Configuration cho mỗi configuration dùng trong các mục tiêu cấp cao nhất trong một bản dựng. Luôn có ít nhất một sự kiện cấu hình. id được mã sự kiện TargetConfiguredTargetComplete sử dụng lại. Đây là điều cần thiết để phân biệt những sự kiện đó trong các bản dựng nhiều cấu hình.

{
  "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

Thử nghiệm. Nếu bạn đặt tuỳ chọn --experimental_convenience_symlinks_bep_event, thì một sự kiện ConvenienceSymlinksIdentified sẽ được tạo bằng các lệnh build để cho biết cách quản lý các đường liên kết tượng trưng trong không gian làm việc. Điều này cho phép xây dựng các công cụ gọi Bazel từ xa, sau đó sắp xếp không gian làm việc tại địa phương như thể Bazel đã được điều hành trên máy tính.

{
  "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"
      }
    ]
  }
}

Tìm nạp

Cho biết rằng một hoạt động Tìm nạp diễn ra trong quá trình thực thi lệnh. Không giống như các sự kiện khác, nếu kết quả tìm nạp đã lưu vào bộ nhớ đệm được sử dụng lại, thì sự kiện này sẽ không xuất hiện trong luồng BEP.

NamedSetOfFiles

Các sự kiện NamedSetOfFiles báo cáo một cấu trúc khớp với depset tệp được tạo trong quá trình đánh giá lệnh. Các phần phụ thuộc đi kèm mang tính bắc cầu được xác định bởi NamedSetOfFilesId.

Để biết thêm thông tin về cách diễn giải các sự kiện NamedSetOfFiles của luồng, hãy xem trang ví dụ về BEP.

OptionsParsed

Một sự kiện OptionsParsed liệt kê tất cả tuỳ chọn áp dụng cho lệnh đó, tách biệt các tuỳ chọn khởi động với các tuỳ chọn lệnh. Bản ghi này cũng bao gồm InvocationPolicy, nếu có.

{
  "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

Sự kiện PatternExpanded cho biết tập hợp tất cả mục tiêu khớp với các mẫu được cung cấp trên dòng lệnh. Đối với các lệnh thành công, một sự kiện duy nhất sẽ hiện ra với tất cả các mẫu trong PatternExpandedId và mọi mục tiêu trong phần tử con của sự kiện PatternExpanded. Nếu mẫu mở rộng thành bất kỳ test_suite nào thì tập hợp mục tiêu kiểm thử có trong test_suite. Đối với mỗi mẫu không phân giải được, BEP chứa một sự kiện Aborted bổ sung có PatternExpandedId xác định mẫu đó.

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

Tiến độ

Các sự kiện tiến trình chứa dữ liệu đầu ra tiêu chuẩn và lỗi tiêu chuẩn do Bazel tạo ra trong quá trình thực thi lệnh. Các sự kiện này cũng được tạo tự động khi cần để thông báo các sự kiện chưa được thông báo bằng sự kiện "parent" logic (cụ thể là NamedSetOfFiles).

TargetComplete

Đối với mỗi tổ hợp (target, configuration, aspect) hoàn tất giai đoạn thực thi, một sự kiện TargetComplete sẽ được đưa vào BEP. Sự kiện chứa trạng thái thành công/thất bại của mục tiêu và các nhóm đầu ra được yêu cầu của mục tiêu.

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

TargetConfigured

Đối với mỗi Mục tiêu hoàn thành giai đoạn phân tích, sự kiện TargetConfigured sẽ được đưa vào BEP. Đây là nguồn đáng tin cậy cho thuộc tính "loại quy tắc" của mục tiêu. (Các) cấu hình áp dụng cho mục tiêu sẽ xuất hiện trong phần tử con đã công bố của sự kiện.

Ví dụ: việc tạo bản dựng bằng các tuỳ chọn --experimental_multi_cpu có thể tạo ra sự kiện TargetConfigured sau cho một mục tiêu duy nhất có 2 cấu hình:

{
  "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

Đối với mỗi cặp (target, configuration) được thực thi, sự kiện TargetSummary sẽ đi kèm với một kết quả thành công tổng hợp, bao gồm quá trình thực thi của mục tiêu đã định cấu hình và mọi khía cạnh được áp dụng cho mục tiêu đã định cấu hình đó.

TestResult

Nếu có yêu cầu kiểm thử, sự kiện TestResult sẽ được gửi cho mỗi lần thử, phân đoạn và chạy trong mỗi lần kiểm thử. Điều này cho phép người tiêu dùng BEP xác định chính xác những hành động kiểm thử nào không vượt qua được kiểm thử và xác định các kết quả kiểm thử (chẳng hạn như nhật ký, tệp test.xml) cho mỗi hành động kiểm thử.

TestSummary

Nếu có yêu cầu kiểm thử, sự kiện TestSummary sẽ được gửi cho mỗi (target, configuration) kiểm thử, chứa thông tin cần thiết để diễn giải kết quả kiểm thử. Số lần thử, phân đoạn và số lần chạy trên mỗi lần kiểm thử được đưa vào để cho phép đối tượng sử dụng BEP phân biệt các cấu phần phần mềm trên những tham số này. Số lần thử và chạy mỗi bài kiểm thử được xem xét trong khi tạo TestStatus tổng hợp để phân biệt các bài kiểm thử FLAKY với kiểm thử FAILED.

UnstructuredCommandLine

Không giống như CommandLine, sự kiện này chứa các cờ dòng lệnh chưa được phân tích cú pháp ở dạng chuỗi như mà công cụ bản dựng gặp phải sau khi mở rộng tất cả các tệp .bazelrc và xem xét cờ --config.

Sự kiện UnstructuredCommandLine có thể được dựa vào để tái tạo chính xác một quá trình thực thi lệnh nhất định.

WorkspaceConfig

Một sự kiện WorkspaceConfig chứa thông tin cấu hình liên quan đến không gian làm việc, chẳng hạn như thư mục gốc thực thi.

WorkspaceStatus

Một sự kiện WorkspaceStatus duy nhất chứa kết quả của lệnh trạng thái workspace.