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

Mỗi loại sự kiện BEP đều có ngữ nghĩa riêng, được ghi lại tối thiểu trong build_event_stream.proto. Bảng chú giải 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ã tương ứng, vì sự kiện Aborted thay thế các sự kiện thuộc loại khác. Sự kiện này cho biết rằng bản dựng đã kết thúc sớm và mã sự kiện xuất hiện trong đó 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 người dùng để giải thích lý do bản dựng không hoàn tất.

Ví dụ: nếu một bản dựng đang đánh giá 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ợ xác định nguyên nhân gốc rễ của lỗi bản dựng. Người dùng có thể đặt cờ --build_event_publish_all_actions để đưa tất cả các sự kiện ActionExecuted vào.

BuildFinished

Một sự kiện BuildFinished sẽ được gửi sau khi lệnh hoàn tất và bao gồm mã thoát cho lệnh đó. Sự kiện này cung cấp thông tin chính thức về việc 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 tồn tại để hỗ trợ việc tích hợp Bazel với các công cụ khác bằng cách kết nối 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 vào cuối mỗi lệnh và bao gồm các bộ đếm/đồng hồ đo hữu ích để định lượng hành vi của công cụ xây dựng trong lệnh. Các chỉ số này cho biết công việc thực sự đã hoàn thành và không tính công việc được lưu vào bộ nhớ đệm và được sử dụng lại.

Xin lưu ý rằng memory_metrics có thể không được điền sẵn nếu không có quá trình thu gom rác Java trong quá trình thực thi lệnh. Người dùng có thể đặt tuỳ chọn --memory_profile=/dev/null để buộc trình thu gom rác chạy vào cuối lệnh để điền sẵn 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 kỳ công việc có ý nghĩa nào bắt đầu.

BuildToolLogs

Một sự kiện BuildToolLogs sẽ được gửi vào 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ụ xây 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 các biểu thị của 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 đều có một nhãn trong StructuredCommandLineId cho biết biểu thị nào mà sự kiện đó truyền tải; 3 sự kiện như vậy xuất hiện trong BEP:

  • "original": Dòng lệnh được tái cấu trúc khi Bazel nhận được từ ứng dụng Bazel, không có các tuỳ chọn khởi động có nguồn gốc từ các tệp .rc.
  • "canonical": Dòng lệnh hiệu quả với cá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. Điều này hữu ích để truyền tải dòng lệnh của một công cụ bao bọc Bazel thông qua BEP. Đây có thể là một thông báo bộ đệm giao thức nhị phân CommandLine được mã hoá base64 và đượ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 các tuỳ chọn của Bazel).

Cấu hình

Một sự kiện Configuration sẽ được gửi cho mọi configuration được dùng trong các mục tiêu cấp cao nhất trong bản dựng. Luôn có ít nhất một sự kiện cấu hình. id được các mã sự kiện TargetConfiguredTargetComplete sử dụng lại và cần thiết để phân biệt các sự kiện đó trong các bản dựng đa 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ì các lệnh build sẽ tạo ra một sự kiện ConvenienceSymlinksIdentified để cho biết cách quản lý các 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 cục bộ như thể Bazel đã chạy cục bộ.

{
  "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 thao tác Tìm nạp đã xảy 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 được lưu vào bộ nhớ đệm và đượ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 của các tệp được tạo trong quá trình đánh giá lệnh. Các depset được bao gồm một cách bắc cầu được xác định bằng 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ả các tuỳ chọn được áp dụng cho lệnh, tách các tuỳ chọn khởi động khỏi các tuỳ chọn lệnh. Sự kiện 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",
      "--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

Các sự kiện PatternExpanded cho biết tập hợp tất cả cá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 sẽ xuất hiện với tất cả các mẫu trong PatternExpandedId và tất cả các mục tiêu trong PatternExpanded của sự kiện thành phần con. Nếu mẫu mở rộng thành bất kỳ test_suite nào, thì tập hợp các mục tiêu kiểm thử sẽ được test_suite đưa vào. Đối với mỗi mẫu không phân giải được, BEP sẽ chứa một Aborted sự kiện bổ sung với 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 trình

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ự động tạo khi cần để thông báo các sự kiện chưa được thông báo bởi một sự kiện "mẹ" 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 này chứa thông tin 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 tất giai đoạn phân tích, một sự kiện TargetConfigured sẽ được đưa vào BEP. Đây là nguồn chính thức cho thuộc tính "loại quy tắc" của mục tiêu. (Các) cấu hình được áp dụng cho mục tiêu sẽ xuất hiện trong thành phần con được thông báo của sự kiện.

Ví dụ: việc xây dựng bằng các tuỳ chọn --experimental_multi_cpu có thể tạo ra sự kiện TargetConfigured sau đây cho một mục tiêu 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, một sự kiện TargetSummary sẽ được đưa vào với kết quả thành công tổng hợp bao gồm quá trình thực thi mục tiêu đã định cấu hình và tất cả các khía cạnh được áp dụng cho mục tiêu đã định cấu hình đó.

TestResult

Nếu bạn yêu cầu kiểm thử, thì một sự kiện TestResult sẽ được gửi cho mỗi lần kiểm thử, phân đoạn và chạy cho mỗi lượt kiểm thử. Điều này cho phép người dùng BEP xác định chính xác những hành động kiểm thử nào không thành công trong các lượt 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 bạn yêu cầu kiểm thử, thì một sự kiện TestSummary sẽ được gửi cho mỗi lượt kiểm thử (target, configuration), chứa thông tin cần thiết để diễn giải kết quả của lượt kiểm thử. Số lần kiểm thử, phân đoạn và chạy cho mỗi lượt kiểm thử được đưa vào để cho phép người dùng BEP phân biệt các cấu phần phần mềm trên các phương diện này. Số lần kiểm thử và chạy cho mỗi lượt kiểm thử được xem xét trong khi tạo TestStatus tổng hợp để phân biệt các lượt kiểm thử FLAKY với các lượt kiểm thử FAILED.

UnstructuredCommandLine

Không giống như CommandLine, sự kiện này mang các cờ dòng lệnh chưa được phân tích cú pháp ở dạng chuỗi như công cụ xây 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.

Bạn có thể dựa vào sự kiện UnstructuredCommandLine để tái tạo chính xác quá trình thực thi lệnh đã cho.

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 chứa kết quả của lệnh trạng thái không gian làm việc.