หน้านี้มีไว้สำหรับเจ้าของและผู้ดูแลที่เก็บกฎ Bazel ซึ่งอธิบายวิธีกำหนดค่าระบบ Bazel Continuous Integration (CI) สำหรับที่เก็บเพื่อทดสอบกฎความเข้ากันได้กับสถานการณ์ของการดำเนินการระยะไกล วิธีการในหน้านี้ใช้กับโปรเจ็กต์ที่เก็บไว้ในที่เก็บ GitHub
ข้อกำหนดเบื้องต้น
ก่อนทำตามขั้นตอนในหน้านี้ ให้ตรวจสอบสิ่งต่อไปนี้
- ที่เก็บ GitHub เป็นส่วนหนึ่งขององค์กร Bazel GitHub
- คุณได้กำหนดค่า Buildkite สำหรับที่เก็บตามที่อธิบายไว้ในการผสานรวมแบบต่อเนื่องของ Bazel Continuous แล้ว
การตั้งค่า CI ของ Bazel สำหรับการทดสอบ
ในไฟล์
.bazelci/presubmit.yml
ให้ทำดังนี้a. เพิ่มการกำหนดค่าชื่อ
rbe_ubuntu1604
b. ในการกำหนดค่า
rbe_ubuntu1604
ให้เพิ่มเป้าหมายของบิลด์และการทดสอบที่ต้องการทดสอบเทียบกับการดำเนินการระยะไกลเพิ่ม
bazel-toolchains
ที่เก็บ GitHub ลงในไฟล์WORKSPACE
ซึ่งปักหมุดไว้ที่รุ่นล่าสุด และเพิ่มเป้าหมายrbe_autoconfig
ที่มีชื่อbuildkite_config
ด้วย ตัวอย่างนี้สร้างการกำหนดค่า Toolchain สำหรับการดำเนินการระยะไกลด้วย BuildKite CI สำหรับrbe_ubuntu1604
load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
ส่งคำขอพุลพร้อมการเปลี่ยนแปลงไปยังไฟล์
presubmit.yml
(ดูตัวอย่างคำขอพุล)หากต้องการดูผลลัพธ์ของบิลด์ ให้คลิกรายละเอียดสำหรับการตรวจสอบคำขอพุล RBE (Ubuntu 16.04) ใน GitHub ดังที่แสดงในรูปภาพด้านล่าง ลิงก์นี้จะพร้อมใช้งานหลังจากรวมคำขอพุลและการทดสอบ CI ดำเนินการแล้ว (ดูผลลัพธ์ตัวอย่าง)
(ไม่บังคับ) ตั้งค่าการตรวจสอบการทดสอบแบบ Bazel (RBE (Ubuntu 16.04)) เป็นการทดสอบที่จําเป็นเพื่อให้ผ่านก่อนที่จะรวมไว้ในกฎการปกป้องสาขา การตั้งค่านี้อยู่ใน GitHub ในการตั้งค่า > สาขา > กฎการป้องกันสาขา ดังที่แสดงในรูปภาพต่อไปนี้
การแก้ปัญหาบิลด์และการทดสอบที่ล้มเหลว
หากบิลด์หรือการทดสอบล้มเหลว อาจเป็นเพราะสาเหตุต่อไปนี้
ไม่ได้ติดตั้งเครื่องมือสร้างหรือเครื่องมือทดสอบที่จำเป็นในคอนเทนเนอร์เริ่มต้น บิลด์โดยใช้การกำหนดค่า
rbe_ubuntu1604
ที่เรียกใช้โดยค่าเริ่มต้นภายในคอนเทนเนอร์rbe-ubuntu16-04
ซึ่งมีเครื่องมือที่มักใช้กับบิลด์ Bazel จำนวนมาก อย่างไรก็ตาม หากกฎต้องใช้เครื่องมือที่ไม่ได้อยู่ในคอนเทนเนอร์เริ่มต้น คุณต้องสร้างคอนเทนเนอร์ที่กำหนดเองตามคอนเทนเนอร์rbe-ubuntu16-04
และรวมเครื่องมือเหล่านั้นไว้ตามที่อธิบายในภายหลังเป้าหมายที่สร้างหรือทดสอบกำลังใช้กฎที่เข้ากันไม่ได้กับการดำเนินการระยะไกล โปรดดูรายละเอียดเกี่ยวกับความเข้ากันได้กับการดำเนินการระยะไกลในการปรับกฎ Bazel สำหรับการดำเนินการระยะไกล
การใช้คอนเทนเนอร์ที่กำหนดเองในการกำหนดค่า rbe_ubuntu1604 CI
คอนเทนเนอร์ rbe-ubuntu16-04
มีให้บริการแบบสาธารณะที่ URL ต่อไปนี้
http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04
คุณสามารถดึงรีจิสทรีจาก Container Registry ได้โดยตรง หรือสร้างจากซอร์ส ส่วนถัดไปจะอธิบายตัวเลือกทั้งสอง
ก่อนที่จะเริ่มต้น ให้ตรวจสอบว่าได้ติดตั้ง gcloud
, docker
และ git
แล้ว
หากสร้างคอนเทนเนอร์จากต้นทาง คุณต้องติดตั้ง Bazel เวอร์ชันล่าสุดด้วย
ดึง rbe-ubuntu16-04 จาก Container Registry
หากต้องการดึงคอนเทนเนอร์ rbe-ubuntu16-04
จาก Container Registry ให้เรียกใช้คำสั่งต่อไปนี้
gcloud docker -- pull gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum
แทนที่ sha256-checksum ด้วยค่า checksum ของ SHA256 สำหรับคอนเทนเนอร์ล่าสุด
การสร้างคอนเทนเนอร์ rbe-ubuntu16-04 จากต้นทาง
วิธีสร้างคอนเทนเนอร์ rbe-ubuntu16-04
จากต้นทางมีดังนี้
โคลนที่เก็บ
bazel-toolchains
:git clone https://github.com/bazelbuild/bazel-toolchains
ตั้งค่าเป้าหมายคอนเทนเนอร์ของ Toolchain และสร้างคอนเทนเนอร์ตามที่อธิบายไว้ในคอนเทนเนอร์ของ Toolchain
ดึงคอนเทนเนอร์ที่สร้างขึ้นใหม่:
gcloud docker -- pull gcr.io/project-id/custom-container-namesha256-checksum
การเรียกใช้คอนเทนเนอร์ที่กำหนดเอง
หากต้องการเรียกใช้คอนเทนเนอร์ที่กำหนดเอง ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
หากคุณดึงคอนเทนเนอร์จาก Container Registry ให้เรียกใช้คำสั่งต่อไปนี้
docker run -it gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum/bin/bash
แทนที่
sha256-checksum
ด้วยค่า checksum ของ SHA256 สำหรับคอนเทนเนอร์ล่าสุดหากคุณสร้างคอนเทนเนอร์จากต้นทาง ให้เรียกใช้คำสั่งต่อไปนี้
docker run -it gcr.io/project-id/custom-container-name@sha256:sha256sum /bin/bash
การเพิ่มทรัพยากรลงในคอนเทนเนอร์ที่กำหนดเอง
ใช้ Dockerfile
หรือ rules_docker
เพื่อเพิ่มทรัพยากรหรือเวอร์ชันทางเลือกของทรัพยากรเดิมในคอนเทนเนอร์ rbe-ubuntu16-04
หากคุณเพิ่งเคยใช้ Docker โปรดอ่านข้อมูลต่อไปนี้
ตัวอย่างเช่น ข้อมูลโค้ด Dockerfile
ต่อไปนี้ติดตั้ง my_tool_package
FROM gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum
RUN apt-get update && yes | apt-get install -y my_tool_package
การพุชคอนเทนเนอร์ที่กำหนดเองไปยัง Container Registry
เมื่อปรับแต่งคอนเทนเนอร์แล้ว ให้สร้างอิมเมจคอนเทนเนอร์และพุชไปยัง Container Registry ดังนี้
สร้างอิมเมจคอนเทนเนอร์
docker build -t custom-container-name.
docker tag custom-container-name gcr.io/project-id/custom-container-name
พุชอิมเมจคอนเทนเนอร์ไปยัง Container Registry:
gcloud docker -- push gcr.io/project-id/custom-container-name
ไปที่ URL ต่อไปนี้เพื่อยืนยันว่ามีการพุชคอนเทนเนอร์แล้ว
https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name
จดบันทึกการตรวจสอบข้อผิดพลาด SHA256 ของคอนเทนเนอร์ที่กำหนดเอง คุณจะต้องระบุไว้ในคำจำกัดความของแพลตฟอร์มบิลด์ในภายหลัง
กำหนดค่าคอนเทนเนอร์สำหรับการเข้าถึงแบบสาธารณะตามที่อธิบายไว้ใน "เข้าถึงได้แบบสาธารณะ" ตามที่อธิบายไว้ในการแสดงรูปภาพแบบสาธารณะ
ดูข้อมูลเพิ่มเติมได้ที่การกดและดึงรูปภาพ
การระบุคำจำกัดความของแพลตฟอร์มบิลด์
คุณต้องกำหนดค่าแพลตฟอร์ม Bazel ในการกำหนดค่าห่วงโซ่เครื่องมือที่กำหนดเอง ซึ่งจะช่วยให้ Bazel เลือกห่วงโซ่เครื่องมือที่เหมาะสมกับแพลตฟอร์มฮาร์ดแวร์/ซอฟต์แวร์ที่ต้องการได้ หากต้องการสร้างแพลตฟอร์มที่ถูกต้องโดยอัตโนมัติ คุณสามารถเพิ่มเป้าหมาย rbe_autoconfig
โดยใช้ชื่อ buildkite_config
ลงใน WORKSPACE
ซึ่งมีแอตทริบิวต์เพิ่มเติมเพื่อเลือกคอนเทนเนอร์ที่กำหนดเอง อ่านรายละเอียดเกี่ยวกับการตั้งค่านี้ได้ในเอกสารประกอบล่าสุดเกี่ยวกับ rbe_autoconfig