การกำหนดค่า Bazel CI เพื่อทดสอบกฎสำหรับการเรียกใช้ระยะไกล

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

หน้านี้มีไว้สำหรับเจ้าของและผู้ดูแลที่เก็บกฎของ Bazel ซึ่งอธิบายวิธีกำหนดค่าระบบการรวมอย่างต่อเนื่อง (CI) ของ Bazel สำหรับที่เก็บของคุณเพื่อทดสอบกฎว่าเข้ากันได้กับสถานการณ์การดำเนินการจากระยะไกลหรือไม่ วิธีการในหน้านี้ใช้กับโปรเจ็กต์ที่จัดเก็บไว้ในที่เก็บ GitHub

ข้อกำหนดเบื้องต้น

โปรดตรวจสอบสิ่งต่อไปนี้ก่อนทำตามขั้นตอนในหน้านี้

การตั้งค่า CI ของ Bazel สำหรับการทดสอบ

  1. ในไฟล์ .bazelci/presubmit.yml ให้ทำดังนี้

    ก. เพิ่มการกำหนดค่าชื่อ rbe_ubuntu1604

    ข. ในrbe_ubuntu1604การกำหนดค่า ให้เพิ่มเป้าหมายการสร้างและการทดสอบที่คุณต้องการทดสอบกับการดำเนินการจากระยะไกล

  2. เพิ่มที่เก็บ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")
  1. ส่งคำขอพุลที่มีการเปลี่ยนแปลงไปยังไฟล์ presubmit.yml (ดูคำขอส่งการเปลี่ยนแปลงตัวอย่าง)

  2. หากต้องการดูผลการสร้าง ให้คลิกรายละเอียดสำหรับการตรวจสอบคำขอ RBE (Ubuntu 16.04) ใน GitHub ดังที่แสดงในรูปด้านล่าง ลิงก์นี้จะพร้อมใช้งานหลังจากผสานคำขอ Pull และเรียกใช้การทดสอบ CI แล้ว (ดูผลลัพธ์ตัวอย่าง)

    ตัวอย่างผลการแข่ง

  3. (ไม่บังคับ) ตั้งค่าการตรวจสอบ bazel test (RBE (Ubuntu 16.04)) เป็นการทดสอบ ที่ต้องผ่านก่อนที่จะผสานในกฎการป้องกันสาขา การตั้งค่า อยู่ใน GitHub ในการตั้งค่า > สาขา > กฎการป้องกันสาขา ดังที่แสดงในรูปต่อไปนี้

    การตั้งค่ากฎการป้องกันสาขา

การแก้ปัญหาการสร้างและการทดสอบที่ไม่สำเร็จ

หากบิลด์หรือการทดสอบล้มเหลว มักเกิดจากสาเหตุต่อไปนี้

  • ไม่ได้ติดตั้งเครื่องมือบิลด์หรือเครื่องมือทดสอบที่จำเป็นในคอนเทนเนอร์เริ่มต้น บิลด์ที่ใช้rbe_ubuntu1604 config จะทำงานโดยค่าเริ่มต้นภายในคอนเทนเนอร์ rbe-ubuntu16-04 ซึ่งมีเครื่องมือที่ใช้ร่วมกันในบิลด์ Bazel หลายรายการ อย่างไรก็ตาม หากกฎกำหนดให้ใช้เครื่องมือที่ไม่มีอยู่ในคอนเทนเนอร์เริ่มต้น คุณต้องสร้างคอนเทนเนอร์ที่กำหนดเองโดยอิงตามคอนเทนเนอร์ rbe-ubuntu16-04 และรวมเครื่องมือเหล่านั้นตามที่อธิบายไว้ในภายหลัง

  • เป้าหมายการสร้างหรือการทดสอบใช้กฎที่ใช้ร่วมกับการดำเนินการจากระยะไกลไม่ได้ ดูรายละเอียดเกี่ยวกับความเข้ากันได้กับการดำเนินการจากระยะไกลได้ที่ การปรับกฎ Bazel สำหรับการดำเนินการจากระยะไกล

การใช้คอนเทนเนอร์ที่กำหนดเองในการกำหนดค่า CI ของ rbe_ubuntu1604

คอนเทนเนอร์ rbe-ubuntu16-04 พร้อมให้บริการแบบสาธารณะที่ URL ต่อไปนี้

http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04

คุณดึงข้อมูลได้โดยตรงจาก Container Registry หรือสร้างจากแหล่งที่มา ส่วนถัดไปจะอธิบายตัวเลือกทั้ง 2

ก่อนเริ่มต้น ให้ตรวจสอบว่าคุณได้ติดตั้ง 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 ด้วยค่าผลรวมตรวจสอบ SHA256 สำหรับคอนเทนเนอร์ล่าสุด

การสร้างคอนเทนเนอร์ rbe-ubuntu16-04 จากแหล่งที่มา

หากต้องการสร้างคอนเทนเนอร์ rbe-ubuntu16-04 จากแหล่งที่มา ให้ทำดังนี้

  1. โคลนที่เก็บ bazel-toolchains

    git clone https://github.com/bazelbuild/bazel-toolchains
  2. ตั้งค่าเป้าหมายคอนเทนเนอร์ของ Toolchain และสร้างคอนเทนเนอร์ตามที่อธิบายไว้ในคอนเทนเนอร์ Toolchain

  3. ดึงคอนเทนเนอร์ที่เพิ่งสร้าง

    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 ด้วยค่าผลรวมตรวจสอบ 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 ดังนี้

  1. สร้างอิมเมจคอนเทนเนอร์โดยใช้คำสั่งต่อไปนี้

    docker build -t custom-container-name.
    docker tag custom-container-name gcr.io/project-id/custom-container-name
  2. พุชอิมเมจคอนเทนเนอร์ไปยัง Container Registry โดยใช้คำสั่งต่อไปนี้

    gcloud docker -- push gcr.io/project-id/custom-container-name
  3. ไปที่ URL ต่อไปนี้เพื่อยืนยันว่าได้พุชคอนเทนเนอร์แล้ว

    https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name

  4. จดบันทึกผลรวมตรวจสอบ SHA256 ของคอนเทนเนอร์ที่กำหนดเอง คุณจะต้อง ระบุในคำจำกัดความแพลตฟอร์มการสร้างในภายหลัง

  5. กำหนดค่าคอนเทนเนอร์สำหรับการเข้าถึงแบบสาธารณะตามที่อธิบายไว้ใน การแสดงรูปภาพต่อสาธารณะ

    ดูข้อมูลเพิ่มเติมได้ที่การพุชและดึงอิมเมจ

การระบุคำจำกัดความแพลตฟอร์มการสร้าง

คุณต้องรวมการกำหนดค่าแพลตฟอร์ม Bazel ไว้ในการกำหนดค่า เครื่องมือเชนที่กำหนดเอง ซึ่งจะช่วยให้ Bazel เลือกเครื่องมือเชน ที่เหมาะสมกับแพลตฟอร์มฮาร์ดแวร์/ซอฟต์แวร์ที่ต้องการได้ หากต้องการสร้างแพลตฟอร์มที่ถูกต้องโดยอัตโนมัติ ให้เพิ่มลงในWORKSPACErbe_autoconfigเป้าหมายที่มีชื่อ buildkite_config ซึ่งมีแอตทริบิวต์เพิ่มเติมเพื่อเลือกคอนเทนเนอร์ที่กำหนดเอง โปรดอ่านรายละเอียดเกี่ยวกับการตั้งค่านี้ในเอกสารประกอบล่าสุดสำหรับ rbe_autoconfig