กลุ่มการดำเนินการอัตโนมัติจะเลือกแพลตฟอร์มการดำเนินการ สำหรับ Toolchain แต่ละประเภท กล่าวคือ เป้าหมายหนึ่งอาจมีได้หลายรายการ แพลตฟอร์มที่ดำเนินการได้โดยไม่ต้องกำหนดกลุ่มการดำเนินการ
ข้อมูลสรุปสั้นๆ
กลุ่มการดำเนินการอัตโนมัติจะเชื่อมต่อกับ Toolchain อย่างใกล้ชิด หากคุณกำลังใช้
คุณก็ต้องตั้งค่าสำหรับการดำเนินการที่ได้รับผลกระทบ (การดำเนินการที่ใช้แท็ก
ที่ดำเนินการได้หรือเครื่องมือจาก Toolchain) ด้วยการเพิ่มพารามิเตอร์ toolchain
สำหรับ
ตัวอย่าง:
ctx.actions.run(
...,
executable = ctx.toolchain['@bazel_tools//tools/jdk:toolchain_type'].tool,
...,
toolchain = '@bazel_tools//tools/jdk:toolchain_type',
)
หากการดำเนินการไม่ได้ใช้เครื่องมือหรือไฟล์สั่งการจาก Toolchain และ Blaze
ไม่พบว่า (ข้อผิดพลาดเพิ่มขึ้น) คุณสามารถกำหนด
toolchain = None
หากต้องการใช้ Toolchain หลายชนิดในแพลตฟอร์มการดําเนินการเดียว (การดำเนินการ ใช้ไฟล์ปฏิบัติการหรือเครื่องมือจาก Toolchain อย่างน้อย 2 แบบ) คุณจะต้อง กำหนด exec_groups (ตรวจสอบ ฉันควรใช้ exec_group ที่กำหนดเองเมื่อใด )
ประวัติ
ก่อน AEG แพลตฟอร์มการดำเนินการจะได้รับเลือกที่ระดับกฎ เช่น
my_rule = rule(
_impl,
toolchains = ['//tools:toolchain_type_1', '//tools:toolchain_type_2'],
)
กฎ my_rule
จะลงทะเบียน Toolchain 2 ประเภท ซึ่งหมายความว่า Toolchain
ความละเอียดที่ใช้
ค้นหาแพลตฟอร์มการดำเนินการที่รองรับ Toolchain ทั้ง 2 ประเภท รายการที่เลือก
มีการใช้แพลตฟอร์มการดำเนินการสำหรับการดำเนินการที่ลงทะเบียนไว้แต่ละรายการภายในกฎ เว้นแต่จะ
ระบุต่างออกไปกับ exec_groups
กล่าวคือ การดำเนินการทั้งหมดภายในกฎเคยมีการดำเนินการเพียงครั้งเดียว
แม้ว่าจะใช้เครื่องมือจาก Toolchain ต่างกันก็ตาม (แพลตฟอร์มการดำเนินการ
สำหรับแต่ละเป้าหมาย) ซึ่งส่งผลให้เกิดความล้มเหลวเมื่อไม่มี
แพลตฟอร์มปฏิบัติการที่รองรับ Toolchain ทั้งหมด
สถานะปัจจุบัน
AEG จะเลือกแพลตฟอร์มการดำเนินการสำหรับ Toolchain แต่ละประเภท
ฟังก์ชันการใช้งานของตัวอย่าง my_rule
ก่อนหน้านี้ จะมีลักษณะดังนี้
def _impl(ctx):
ctx.actions.run(
mnemonic = "First action",
executable = ctx.toolchain['//tools:toolchain_type_1'].tool,
toolchain = '//tools:toolchain_type_1',
)
ctx.actions.run(
mnemonic = "Second action",
executable = ctx.toolchain['//tools:toolchain_type_2'].tool,
toolchain = '//tools:toolchain_type_2',
)
กฎนี้สร้างการดำเนินการ 2 อย่าง คือ First action
ซึ่งใช้ปฏิบัติการจาก
//tools:toolchain_type_1
และ Second action
ซึ่งใช้ไฟล์ปฏิบัติการจาก
//tools:toolchain_type_2
ก่อนมี AEG การดำเนินการทั้ง 2 อย่างนี้จะเกิดขึ้น
บนแพลตฟอร์มการดำเนินการเดียวซึ่งรองรับ Toolchain ทั้ง 2 ประเภท ด้วย AEG
ด้วยการเพิ่มพารามิเตอร์ toolchain
ภายในการดำเนินการ การดำเนินการแต่ละรายการจะทำบน
ซึ่งเป็นแพลตฟอร์มการดำเนินการที่ให้บริการ Toolchain อาจมีการดำเนินการ
บนแพลตฟอร์มการดำเนินการต่างๆ
เช่นเดียวกันกับ ctx.actions.run_shell ซึ่ง toolchain
มีผล
ควรเพิ่มพารามิเตอร์เมื่อ tools
มาจาก Toolchain
ความแตกต่างระหว่างกลุ่มผู้บริหารที่กำหนดเองและกลุ่มผู้บริหารอัตโนมัติ
AEG คือกลุ่มผู้บริหารที่ระบบสร้างขึ้นโดยอัตโนมัติสำหรับ Toolchain ประเภทที่ลงทะเบียนในกฎ คุณไม่จำเป็นต้องระบุเอง ต่างจาก "คลาสสิก" กลุ่มผู้บริหาร
ฉันควรใช้ exec_group ที่กำหนดเองเมื่อใด
จําเป็นต้องใช้ exec_groups ที่กําหนดเองในกรณีที่ต้องใช้ Toolchain หลายตัวเท่านั้น ในแพลตฟอร์มการดำเนินการเดียว ในกรณีอื่นๆ คุณไม่จำเป็นต้อง กำหนด exec_groups ที่กำหนดเอง เช่น
def _impl(ctx):
ctx.actions.run(
...,
executable = ctx.toolchain['//tools:toolchain_type_1'].tool,
tools = [ctx.toolchain['//tools:toolchain_type_2'].tool],
exec_group = 'two_toolchains',
)
my_rule = rule(
_impl,
exec_groups = {
"two_toolchains": exec_group(
toolchains = ['//tools:toolchain_type_1', '//tools:toolchain_type_2'],
),
}
)
การย้ายข้อมูลของ AEG
Blaze ใช้ AEG อยู่แล้วภายใน google3 สำหรับ Bazel ภายนอก อยู่ระหว่างการย้ายข้อมูล มีการใช้กฎบางข้ออยู่แล้ว ฟีเจอร์นี้ (เช่น กฎ Java และ C++)
Bazel เวอร์ชันใดที่รองรับการย้ายข้อมูลนี้
Bazel 7 รองรับ AEG อย่างเต็มรูปแบบ
วิธีเปิดใช้ AEG
ตั้งค่า --incompatible_auto_exec_groups
เป็น "จริง" ข้อมูลเพิ่มเติมเกี่ยวกับแฟล็ก
เกี่ยวกับปัญหาเกี่ยวกับ GitHub
วิธีเปิดใช้ AEG ภายในกฎบางกฎ
ตั้งค่าแอตทริบิวต์ _use_auto_exec_groups
ในกฎ
my_rule = rule(
_impl,
attrs = {
"_use_auto_exec_groups": attr.bool(default = True),
}
)
การดำเนินการนี้จะเปิดใช้ AEG ใน my_rule
เท่านั้นและการทำงานของ AEG จะเริ่มโดยใช้ตรรกะใหม่
เมื่อเลือกแพลตฟอร์มการดำเนินการ แฟล็กที่ใช้ร่วมกันไม่ได้ถูกลบล้างด้วยรายการนี้
วิธีปิดใช้ AEG ในกรณีที่เกิดข้อผิดพลาด
ตั้งค่า --incompatible_auto_exec_groups
เป็น "เท็จ" เพื่อปิดใช้ AEG โดยสมบูรณ์ใน
โปรเจ็กต์ของคุณ (ปัญหา GitHub ของการรายงาน) หรือปิดใช้กฎเฉพาะ
โดยตั้งค่าแอตทริบิวต์ _use_auto_exec_groups
เป็น False
(รายละเอียดเพิ่มเติมเกี่ยวกับแอตทริบิวต์)
ข้อความแสดงข้อผิดพลาดขณะย้ายข้อมูลไปยัง AEG
ระบุไม่ได้ว่าเครื่องมือมาจากทรัพยากร Dependency แบบโดยนัยหรือเครื่องมือเชน โปรดตั้งค่าพารามิเตอร์ Toolchain หากไม่ได้ใช้ Toolchain ให้ตั้งเป็น "None"
- ในกรณีนี้ คุณจะได้รับการเรียกซ้อนกันก่อนที่ข้อผิดพลาดจะเกิดขึ้น และคุณสามารถ
เห็นได้อย่างชัดเจนว่าการกระทำใดต้องใช้พารามิเตอร์ Toolchain ตรวจสอบว่า
Toolchain ใช้สำหรับการดำเนินการและตั้งค่าด้วยพารามิเตอร์ Toolchain หากไม่ใช่
เครื่องมือเชนถูกนำมาใช้ภายในการดำเนินการสำหรับเครื่องมือหรือไฟล์ปฏิบัติการ โดยตั้งค่าเป็น
None
ประกาศการดำเนินการสำหรับ Toolchain ที่ไม่มีอยู่ "[toolchain_type]" ที่ไม่มีอยู่
- ซึ่งหมายความว่าคุณได้ตั้งค่าพารามิเตอร์ Toolchain ในการทํางาน แต่ไม่ได้ตั้งค่า
ลงทะเบียนไว้ในกฎ ลงทะเบียน Toolchain หรือตั้งค่า
None
ภายในการดําเนินการ
สื่อเพิ่มเติม
ดูข้อมูลเพิ่มเติมในเอกสารการออกแบบได้ที่ กลุ่มการดำเนินการอัตโนมัติสำหรับ Toolchain