הגדרת Bazel CI לבדיקת כללים לביצוע מרחוק

דף זה מיועד לבעלים ולתחזוקה של מאגרי כללים של Bazel. הוא מתאר כיצד להגדיר את המערכת של Bazel Continuous Integration (CI) כדי שהמאגר שלך יבחן את הכללים שלך כדי לוודא שהם תואמים לתרחיש ביצוע מרחוק. ההוראות בדף הזה רלוונטיות לפרויקטים המאוחסנים במאגרים של GitHub.

דרישות מוקדמות

לפני ביצוע השלבים בדף זה, ודאו כי:

הגדרת CI של Bazel לבדיקה

  1. בקובץ .bazelci/presubmit.yml צריך לבצע את הפעולות הבאות:

    א. הוספה של הגדרה בשם rbe_ubuntu1604

    ב. בתצורה של rbe_ubuntu1604, יש להוסיף את גרסאות ה-build והבדיקה שרוצים לבדוק ביחס להפעלה מרחוק.

  2. מוסיפים את מאגר הנתונים של bazel-toolchains GitHub לקובץ WORKSPACE, שמוצמד לגרסה האחרונה. כמו כן, יש להוסיף יעד rbe_autoconfig בשם buildkite_config. דוגמה זו יוצרת תצורת Toolchain לביצוע מרחוק באמצעות CI BuildKite CI עבור rbe_ubuntu1604.

load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
  1. עליך לשלוח בקשת משיכה עם השינויים שלך לקובץ presubmit.yml. (ראו דוגמה לבקשת משיכה).

  2. כדי להציג את תוצאות גרסת ה-build, לוחצים על פרטים עבור בדיקת ה-RBE (Ubuntu 16.04) לצורך בדיקת משיכה ב-GitHub, כפי שמוצג באיור למטה. הקישור הזה הופך לזמין אחרי שבקשת המשיכה ממוזגת והרצת בדיקות CI. (ראו תוצאות לדוגמה).

    תוצאות לדוגמה

  3. (אופציונלי) מגדירים את הבדיקה של Bazel (RBE (Ubuntu 16.04) כבדיקה נדרשת לפני המיזוג בכלל ההגנה על הסניף. ההגדרה נמצאת ב-GitHub בהגדרות ו-gt; סניפים > כללי הגנה על סניפים, כפי שמוצג באיור הבא.

    הגדרות לכללי ההגנה על הסניף

פתרון בעיות build ובדיקות שנכשלו

אם ה-build או הבדיקות נכשלים, סביר להניח שהסיבה לכך היא:

  • כלי הבנייה או הבדיקה הנדרשים לא מותקנים במאגר ברירת המחדל. גרסאות build באמצעות ההגדרה rbe_ubuntu1604 מופעלות כברירת מחדל בתוך מאגר תגים של rbe-ubuntu16-04, שכולל כלים המשותפים לגרסאות build רבות של Bazel. עם זאת, אם הכללים מחייבים כלים שאינם קיימים במאגר התגים המוגדר כברירת מחדל, עליך ליצור מאגר מותאם אישית על סמך rbe-ubuntu16-04 מאגר התגים ולכלול את הכלים המתוארים בהמשך.

  • יעדי בנייה או בדיקה מתבססים על כללים שאינם תואמים לביצוע מרחוק. לפרטים על תאימות של ביצוע מרחוק, ראו התאמה של כללי Bazel לביצוע מרחוק.

שימוש במאגר מותאם אישית בהגדרת rbe_ubuntu1604 CI

המאגר rbe-ubuntu16-04 זמין לציבור בכתובת ה-URL הבאה:

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

אפשר לשלוף אותו ישירות מרשם מאגרי הכלים או ליצור אותו מהמקור. הקטעים הבאים מתארים את שתי האפשרויות.

לפני שמתחילים, חשוב לוודא שהתקנתם את gcloud, את docker ואת git. אם אתם בונים את המאגר ממקור, עליכם להתקין גם את הגרסה האחרונה של Bazel.

משיכת ה-rbe-ubuntu16-04 מרישום מאגרי התגים

כדי לשלוף את מאגר התגים rbe-ubuntu16-04 מהרישום של מאגר התגים, מריצים את הפקודה הבאה:

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. מגדירים יעדים של מאגר תגים ב-toolschain ויוצרים את המאגר לפי ההוראות במאגרים של Toolchain.

  3. מושכים את הקונטיינר החדש:

    gcloud docker -- pull gcr.io/project-id/custom-container-namesha256-checksum
    

המערכת מפעילה את מאגר התגים המותאם אישית

כדי להפעיל את מאגר התגים המותאם אישית, מבצעים את אחת מהפעולות הבאות:

  • אם שלפתם את מאגר התגים ממאגר התגים, הפעילו את הפקודה הבאה:

    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

דחיפת הקונטיינר המותאם אישית אל מאגר המאגרים

לאחר התאמה אישית של הקונטיינר, צריך לבנות את תמונה של המאגר ולדחוף אותה אל רישומים של מאגר תגים באופן הבא:

  1. יצירת תמונה של מאגר:

    docker build -t custom-container-name.
    docker tag custom-container-name gcr.io/project-id/custom-container-name
    
  2. דוחפים את תמונת המאגר אל רישום מאגרי התגים:

    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 של המאגר המותאם אישית. יהיה עליך לספק אותו מאוחר יותר בהגדרת הפלטפורמה של Build.

  5. מגדירים את מאגר התגים לגישה ציבורית, כפי שמתואר בגישה ציבורית, כפי שמוסבר בהצגת תמונות באופן גלוי לכול.

    למידע נוסף, עיינו במאמר דחיפה ומשיכת תמונות.

ציון ההגדרה של פלטפורמת ה-build

עליך לכלול תצורת Bazel בהגדרת התצורה האישית של הכלי, כך ש-Bazel בוחרת ערכת כלים המתאימה לפלטפורמת החומרה/תוכנה הרצויה. כדי ליצור פלטפורמה חוקית באופן אוטומטי, ניתן להוסיף אל WORKSPACE יעד של rbe_autoconfig עם השם buildkite_config הכולל מאפיינים נוספים לבחירת מאגר התגים המותאם אישית שלך. לפרטים על ההגדרה הזו, מומלץ לקרוא את התיעוד העדכני של rbe_autoconfig.