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

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

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

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

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

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

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

  2. เพิ่มที่เก็บ GitHub ของ bazel-toolchains ลงในไฟล์ WORKSPACE โดยปักหมุดไว้ที่รุ่นล่าสุด และเพิ่มเป้าหมาย rbe_autoconfig ที่มีชื่อว่า buildkite_config ด้วย ตัวอย่างนี้จะสร้างการกำหนดค่าชุดเครื่องมือสำหรับการดำเนินการระยะไกลด้วย 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 ดังที่แสดงในภาพด้านล่าง โดยลิงก์นี้จะพร้อมใช้งานหลังจากผสานคำขอพุลและทำการทดสอบ CI แล้ว (ดูตัวอย่างผลลัพธ์)

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

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

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

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

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

  • ไม่ได้ติดตั้งเครื่องมือสร้างหรือเครื่องมือทดสอบที่จำเป็นในคอนเทนเนอร์เริ่มต้น บิลด์ที่ใช้การกำหนดค่า rbe_ubuntu1604 จะทำงานโดยค่าเริ่มต้นภายในคอนเทนเนอร์ 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. ตั้งค่าเป้าหมายคอนเทนเนอร์ของเครื่องมือและสร้างคอนเทนเนอร์ตามที่อธิบายไว้ในคอนเทนเนอร์ของเครื่องมือ

  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 เลือกเครื่องมือทํางานที่เหมาะกับแพลตฟอร์มฮาร์ดแวร์/ซอฟต์แวร์ที่ต้องการได้ หากต้องการสร้างแพลตฟอร์มที่ถูกต้องโดยอัตโนมัติ คุณสามารถเพิ่มเป้าหมาย WORKSPACE rbe_autoconfig ที่มีชื่อ buildkite_config ลงใน WORKSPACE ซึ่งมีแอตทริบิวต์เพิ่มเติมเพื่อเลือกคอนเทนเนอร์ที่กำหนดเอง โปรดอ่านรายละเอียดเกี่ยวกับการตั้งค่านี้จากเอกสารประกอบล่าสุดสําหรับ rbe_autoconfig