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

รายงานปัญหา ดูแหล่งที่มา ตอนกลางคืน · 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. เพิ่ม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 ดังที่แสดงในรูปด้านล่าง ลิงก์นี้ จะพร้อมใช้งานหลังจากมีการรวมคำขอพุลและการทดสอบ CI ที่เคยวิ่ง (โปรดดู ผลลัพธ์ตัวอย่าง)

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

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