การกำหนดค่า 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. ส่งคำขอพุลที่มีการเปลี่ยนแปลงไปยังไฟล์ 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 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 เพื่อดูรายละเอียดเกี่ยวกับการตั้งค่านี้