Xây dựng bảng thuật ngữ giao thức sự kiện

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
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 ở mức 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 thay thế các sự kiện thuộc các loại khác. Sự kiện này cho biết rằng bản dựng đã bị chấm dứt sớm và mã sự kiện mà bản dựng xuất hiện trong đó không được tạo thông thường. Aborted chứa nội dung mô tả enum và thân thiện với con người để giải thích lý do bản dựng không hoàn thành.

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 chứa một sự kiện như sau:

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

Đã thực thi hành động

Cung cấp thông tin chi tiết về cách 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, nhằm hỗ trợ việc xác định nguyên nhân gốc rễ của các 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ả sự kiện ActionExecuted.

Đã tạo xong

Một sự kiện BuildFinished duy nhất 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 thành công/không thành công đáng tin cậy.

Xây dựng siêu dữ liệu

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

Chỉ số bản dựng

Một sự kiện BuildMetrics duy nhất được gửi đi ở cuối mỗi lệnh và bao gồm các bộ đếm/bộ đếm 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 đã hoàn tất và không tính những công việc được lưu vào bộ nhớ đệm được sử dụng lại.

Lưu ý rằng memory_metrics có thể không được điền nếu không có bộ thu thập rác của 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 thập rác chạy ở cuối lệnh để điền memory_metrics.

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

Bắt đầu tạo

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 mọi công việc có ý nghĩa.

Nhật ký công cụ bản dựng

Một sự kiện BuildToolLogs duy nhất được gửi đến cuối lệnh, bao gồm URI của các tệp do công cụ xây dựng tạo ra có thể hỗ trợ việc 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"
      }
    ]
  }
}

Dòng lệnh

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

Cấu hình

Một sự kiện Configuration được gửi đi mỗi configuration được sử dụng trong các mục tiêu cấp cao nhất trong một bản dựng. Ít nhất một sự kiện cấu hình luôn có mặt. id được sử dụng lại bởi mã sự kiện TargetConfiguredTargetComplete và cần thiết để phân biệt các sự kiện đó trong các bản dựng có 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"
    }
  }
}

Đã liên kết tiện lợi

Thử nghiệm. Nếu bạn đặt tùy 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. Việc này cho phép tạo các công cụ gọi Bazel từ xa rồi sắp xếp không gian làm việc cục bộ như thể Bazel đã được chạy trên máy.

{
  "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 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 đã 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.

Tên tệp đặt tên

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. Phần phụ thuộc 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 một luồng, hãy xem trang ví dụ về BEP.

Đã thay đổi các tùy chọn

Một sự kiện OptionsParsed liệt kê tất cả các tùy chọn áp dụng cho lệnh, tách các tùy chọn khởi động khỏi các tùy chọn lệnh. Chính sách này cũng bao gồm IngoingPolicy, 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": {}
  }
}

Đã mở rộng mẫu

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 sẽ xuất hiện với tất cả mẫu trong PatternExpandedId và tất cả mục tiêu trong phần tử con của sự kiện PatternExpanded. Nếu mẫu mở rộng đến bất kỳ test_suite nào, thì nhóm mục tiêu kiểm thử sẽ được đưa vào 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 độ

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

Hoàn thành mục tiêu

Đối với mỗi tổ hợp (target, configuration, aspect) hoàn thành giai đoạn thực thi, sự kiện TargetComplete sẽ được đưa vào BEP. Sự kiện này chứa sự thành công/không thành công 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"
          }
        ]
      }
    ]
  }
}

Đã định cấu hình

Đố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 được áp dụng cho mục tiêu sẽ xuất hiện trong phần tử con được 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 đây cho một mục tiêu duy nhất có hai 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"
  }
}

Tóm tắt mục tiêu

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

Kết quả kiểm thử

Nếu yêu cầu kiểm thử, một sự kiện TestResult sẽ được gửi cho mỗi lần thử, phân đoạn và chạy 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 hành động kiểm thử nào không đạt quy trình kiểm thử và xác định kết quả kiểm thử (chẳng hạn như nhật ký, tệp kiểm thử xml) cho từng hành động kiểm thử.

Tóm tắt thử nghiệm

Nếu yêu cầu kiểm thử, một 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à chạy mỗi lần kiểm thử được bao gồm để cho phép người tiêu 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. Hệ thống sẽ xem xét các lần thử và lần chạy trong mỗi lần kiểm thử trong khi tạo TestStatus tổng hợp để phân biệt các bài kiểm thử FLAKY với các bài kiểm thử FAILED.

Dòng lệnh có cấu trúc

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 mà công cụ xây dựng gặp phải sau khi mở rộng tất 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 quá trình thực thi lệnh nhất định.

Cấu hình không gian làm việc

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ư gốc thực thi.

Trạng thái không gian làm việc

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.