ดังต่อไปนี้ เครื่องโฮสต์คือเครื่องที่ Bazel ทำงาน
เมื่อใช้การดําเนินการจากระยะไกล ขั้นตอนการสร้างและ/หรือการทดสอบจริงจะไม่เกิดขึ้นบนเครื่องโฮสต์ แต่ระบบจะส่งไปยังระบบการดําเนินการจากระยะไกลแทน อย่างไรก็ตาม ขั้นตอนที่เกี่ยวข้องกับการแก้ไขกฎของ Workspace จะเกิดขึ้นในเครื่องโฮสต์ หากกฎพื้นที่ทำงานเข้าถึงข้อมูลเกี่ยวกับ เครื่องโฮสต์เพื่อใช้ระหว่างการดำเนินการ บิลด์ของคุณมีแนวโน้มที่จะเสียหายเนื่องจาก ความไม่เข้ากันระหว่างสภาพแวดล้อม
ในการปรับกฎ Bazel สําหรับการดําเนินการจากระยะไกล คุณต้องค้นหากฎของ Workspace ดังกล่าวและแก้ไข หน้านี้จะอธิบายวิธีค้นหากฎของพื้นที่ทำงานที่อาจทำให้เกิดปัญหาโดยใช้บันทึกของพื้นที่ทำงาน
การค้นหากฎที่ไม่ขึ้นกับสัญชาตญาณ
กฎของ Workspace ช่วยให้นักพัฒนาแอปเพิ่มข้อกำหนดในพื้นที่ทำงานภายนอกได้ แต่มีความซับซ้อนเพียงพอที่จะประมวลผลแบบกำหนดเองในกระบวนการ คำสั่งที่เกี่ยวข้องทั้งหมดจะเกิดขึ้นภายในระบบและสามารถ
แหล่งที่มาของความไม่เป็นธรรมชาติ โดยปกติแล้ว ลักษณะการทำงานที่ไม่ปิดผนึกจะแสดงผ่าน repository_ctx
ซึ่งช่วยให้โต้ตอบกับเครื่องโฮสต์ได้
ตั้งแต่ Bazel 0.18 เป็นต้นไป คุณสามารถดูบันทึกของการดำเนินการบางอย่างที่อาจไม่ปลอดภัยโดยเพิ่ม Flag --experimental_workspace_rules_log_file=[PATH]
ลงในคำสั่ง Bazel โดยที่ [PATH]
คือชื่อไฟล์ที่จะสร้างบันทึก
สิ่งที่ควรทราบ
บันทึกจะบันทึกเหตุการณ์ขณะที่ดำเนินการ หากบางขั้นตอน แคชจะไม่แสดงในบันทึก ดังนั้นเพื่อให้ได้ผลลัพธ์ทั้งหมด โปรดอย่า ลืมเรียกใช้
bazel clean --expunge
ล่วงหน้าบางครั้งฟังก์ชันอาจทำงานอีกครั้ง ซึ่งในกรณีนี้ เหตุการณ์ที่เกี่ยวข้องจะปรากฏในบันทึกหลายครั้ง
ปัจจุบันกฎ Workspace จะบันทึกเฉพาะเหตุการณ์ Starlark เท่านั้น
วิธีดูสิ่งที่ดำเนินการในระหว่างการเริ่มต้นพื้นที่ทำงาน
เรียกใช้
bazel clean --expunge
คำสั่งนี้จะล้างแคชในเครื่องและ ที่เก็บที่แคชไว้ทั้งหมด เพื่อให้มั่นใจว่าการเริ่มต้นทั้งหมดจะทำงานอีกครั้งเพิ่ม
--experimental_workspace_rules_log_file=/tmp/workspacelog
ไปที่ ใช้คำสั่ง Bazel และเรียกใช้บิลด์การดำเนินการนี้จะสร้างไฟล์ไบนารี Proto ซึ่งแสดงข้อความประเภท WorkspaceEvent
ดาวน์โหลดซอร์สโค้ด Bazel และไปยังโฟลเดอร์ Bazel โดยใช้ คำสั่งด้านล่าง คุณต้องมีซอร์สโค้ดเพื่อให้สามารถแยกวิเคราะห์ ในบันทึก Workspace ที่มี โปรแกรมแยกวิเคราะห์ workspacelog
git clone https://github.com/bazelbuild/bazel.git
cd bazel
แปลงบันทึกพื้นที่ทำงานทั้งหมดเป็นข้อความในที่เก็บซอร์สโค้ด Bazel
bazel build src/tools/workspacelog:parser
bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog > /tmp/workspacelog.txt
เอาต์พุตอาจมีความละเอียดมากและมีเอาต์พุตจาก Bazel ในตัว กฎ
หากต้องการยกเว้นกฎที่เฉพาะเจาะจงจากเอาต์พุต ให้ใช้ตัวเลือก
--exclude_rule
เช่นbazel build src/tools/workspacelog:parser
bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog \ --exclude_rule "//external:local_config_cc" \ --exclude_rule "//external:dep" > /tmp/workspacelog.txt
เปิด
/tmp/workspacelog.txt
และตรวจสอบการดำเนินการที่ไม่ปลอดภัย
บันทึกประกอบด้วย
WorkspaceEvent
ข้อความที่ระบุถึงการกระทำบางอย่างที่อาจไม่ได้รับความยินยอม
repository_ctx
การดำเนินการที่มีการไฮไลต์ว่าอาจเป็นสิ่งที่ไม่ใช่การเคลื่อนไหวมีดังนี้
execute
: เรียกใช้คำสั่งที่กำหนดเองบนสภาพแวดล้อมของโฮสต์ ตรวจสอบว่า สิ่งเหล่านี้อาจทำให้เกิดการขึ้นต่อกันใดๆ บนสภาพแวดล้อมของโฮสต์download
,download_and_extract
: ตรวจสอบว่าได้ระบุ sha256 แล้วเพื่อให้แน่ใจว่าเป็นบิลด์แบบปิดfile
,template
: การดำเนินการนี้ไม่ได้หมายความว่าไม่เป็นไปตามหลักการรักษาความปลอดภัย แต่อาจเป็นกลไกในการนําข้อกําหนดในสภาพแวดล้อมโฮสต์ไปยังที่เก็บ ตรวจสอบว่าคุณเข้าใจว่าอินพุตมาจากที่ใด และไม่ได้ขึ้นอยู่กับสภาพแวดล้อมของโฮสต์os
: วิธีนี้ไม่ได้มีความสำคัญในตัว แต่เป็นวิธีง่ายๆ ในการรับทรัพยากร Dependency ในสภาพแวดล้อมของโฮสต์ โดยปกติแล้วบิลด์แบบปิดผนึกจะไม่เรียกใช้การดำเนินการนี้ ในการประเมินว่าการใช้งานของคุณเป็นแบบครอบคลุมหรือไม่ ให้คำนึงอยู่เสมอว่า ทำงานบนโฮสต์ ไม่ใช่คนทำงาน โดยทั่วไปแล้ว การรับข้อมูลเฉพาะของสภาพแวดล้อมจากโฮสต์ไม่ใช่แนวทางที่ดีสำหรับการสร้างจากระยะไกลsymlink
: โดยทั่วไปแล้วปลอดภัย แต่มองหาสัญญาณสีแดง ลิงก์สัญลักษณ์ที่ไปยังภายนอกที่เก็บหรือไปยังเส้นทางสัมบูรณ์จะทำให้เกิดปัญหาในเวิร์กเกอร์ระยะไกล หากสร้างลิงก์สัญลักษณ์ตามพร็อพเพอร์ตี้ของเครื่องโฮสต์ ก็อาจมีปัญหาเช่นกันwhich
: การตรวจหาโปรแกรมที่ติดตั้งในโฮสต์มักจะเป็นปัญหา เนื่องจากคนทำงาน อาจมีการกำหนดค่าต่างกัน