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

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

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

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

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

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

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

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

  2. เพิ่มที่เก็บ GitHub bazel-toolchains ลงในไฟล์ 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. ส่ง Pull Request ที่มีการเปลี่ยนแปลงไปยังไฟล์ presubmit.yml (ดู ตัวอย่าง Pull Request)

  2. หากต้องการดูผลการสร้าง ให้คลิกรายละเอียด สำหรับการตรวจสอบ Pull Request RBE (Ubuntu 16.04) ใน GitHub ดังที่แสดงในรูปภาพด้านล่าง ลิงก์นี้จะพร้อมใช้งานหลังจากผสาน Pull Request แล้วและมีการทดสอบ 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 checksum สำหรับ คอนเทนเนอร์ล่าสุด

การสร้างคอนเทนเนอร์ 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 checksum สำหรับ คอนเทนเนอร์ล่าสุด.

  • หากสร้างคอนเทนเนอร์จากซอร์ส ให้เรียกใช้คำสั่งต่อไปนี้

    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 checksum ของคอนเทนเนอร์ที่กำหนดเอง คุณจะต้องระบุค่านี้ในการกำหนดแพลตฟอร์มบิลด์ในภายหลัง

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

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

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

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