קריאה ל-Bazel דרך סקריפטים

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

בחירת בסיס הפלט

האפשרות --output_base קובעת היכן תהליך ה-Bazel צריך לכתוב את הפלטים של ה-build של המכשיר, כמו גם קובצי עבודה שונים שבהם נעשה שימוש פנימי ב-Bazel, אחד מהם הוא מנעול שמגן מפני מוטציה בו-זמנית על סמך תהליכי Bazel מרובים.

בחירת הספרייה הבסיסית של פלט לסקריפט תלויה במספר גורמים. אם אתם צריכים להציב את פלטי ה-build במיקום ספציפי, הדבר יכתיב את בסיס הפלט שבו עליכם להשתמש. אם החלטת לבצע שיחה "לקריאה בלבד" ב-Bazel (כמו bazel query), גורמי הנעילה יהיו חשובים יותר. בפרט, אם עליך להפעיל מספר מופעים בו-זמנית של הסקריפט שלך, יהיה עליך לספק לכל מופע פלט בסיס (או אקראי) שונה.

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

הערות לגבי מצב שרת

כברירת מחדל, Bazel משתמשת בתהליך שרת ותיק ותיק כאופטימיזציה. אם מפעילים את Bazel בסקריפט, חשוב לזכור לקרוא לshutdown כשמסיימים לעבוד עם השרת, או לציין --max_idle_secs=5 כדי ששרתים לא פעילים יכבו את עצמם מיד.

איזה קוד יציאה אקבל?

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

יציאה מקודים נפוצים בכל הפקודות:

  • 0 – הצלחה
  • 2 - בעיה עם שורת פקודה, סימון פגום או לא חוקי של שילוב, או משתנים בעייתיים בסביבה. יש לשנות את שורת הפקודה.
  • 8 - Build נקטע אבל סיימנו בסגירה מתוכננת.
  • 9 - נעילת השרת קבועה ו---noblock_for_lock הועבר.
  • 32 - כשל בסביבה חיצונית לא נמצא במחשב זה.

  • 33 - אזל הזיכרון נגמר וקריסה. צריך לשנות את שורת הפקודה.

  • 34 – שמור לשימוש פנימי של Google.

  • 35 – שמור לשימוש פנימי של Google.

  • 36 – בעיה סביבתית מקומית חשוד.

  • 37 - חריג לא מטופל / שגיאה פנימית של Bazel.

  • 38 – שמור לשימוש פנימי של Google.

  • 41-44 – שמור לשימוש פנימי של Google.

  • 45 - שגיאה בפרסום התוצאות בשירות בניית האירועים.

  • 47 – שמור לשימוש פנימי של Google.

קודי חזרה לפקודות bazel build, bazel test:

  • 1 – Build נכשל.
  • 3 – Build תקין, אבל חלק מהבדיקות נכשלו או שפג הזמן הקצוב שלהן.
  • 4 – גרסת ה-Build הצליחה אבל לא נמצאו בדיקות, למרות שהתבקשה בדיקה.

עבור bazel run:

  • 1 – Build נכשל.
  • אם ה-build מצליח אבל תהליך המשנה המבוצע מחזיר קוד יציאה שאינו אפס, הקוד יהיה גם קוד היציאה של הפקודה.

עבור bazel query:

  • 3 - הצלחה חלקית, אך השאילתה נתקלה בשגיאה אחת או יותר בקבוצת קובצי BUILD, ולכן התוצאות של הפעולה אינן אמינות. סביר להניח שהסיבה לכך היא האפשרות --keep_going בשורת הפקודה.
  • 7 – הפקודה נכשלה.

גרסאות עתידיות של Bazel עשויות להוסיף קודי יציאה נוספים, ולהחליף את קוד היציאה הגנרי של כשל 1 בערך שונה שאינו אפס, עם משמעות מסוימת. עם זאת, כל ערכי היציאה שאינם אפס יהיו תמיד שגיאה.

קריאת קובץ .bazelrc

כברירת מחדל, Bazel קוראת את הקובץ .bazelrc מספריית הבסיס של סביבת העבודה או מספריית הבית של המשתמש. האם זו החלטה רצויה עבור הסקריפט שלכם; אם הסקריפט צריך להיות הרמטי לחלוטין (למשל, כשמתחילים ליצור גרסאות build), יש להשבית את קריאת הקובץ .bazelrc באמצעות האפשרות --bazelrc=/dev/null. אם ברצונך לבצע בנייה באמצעות ההגדרות המועדפות של המשתמש, התנהגות ברירת המחדל טובה יותר.

יומן פקודות

הפלט של Bazel זמין גם בקובץ יומן פקודה, שניתן למצוא באמצעות הפקודה הבאה:

bazel info command_log

קובץ יומן הפקודות מכיל את רצף ה-stout ו-stdr המורכבים זה מזה בפקודה האחרונה בבזל. הערה: הפעלת bazel info תחליף את התוכן של הקובץ, כי היא הופכת לפקודת Bazel העדכנית ביותר. עם זאת, המיקום של קובץ יומן הפקודה לא ישתנה, אלא אם תשנה את ההגדרה של האפשרויות --output_base או --output_user_root.

פלט ניתוח

ניתוח הפלט של Bazel קל למדי למטרות רבות. שתי אפשרויות שיכולות לעזור לסקריפט שלך הן --noshow_progress שמסתירה הודעות התקדמות, ו---show_result n שקובע אם הודעות "מתעדכנות" לא יודפסו ; ניתן לנתח את ההודעות האלה כדי לגלות אילו יעדים נבנו בהצלחה ואת מיקום קובצי הפלט שהם יצרו. הקפידו לציין ערך גדול מאוד של n אם אתם מסתמכים על הודעות אלה.

פתרון בעיות בביצועים לפי יצירת פרופיל

ניתן לעיין בקטע פרופיל ביצועים.