הגדרת SonarQube: מ-Docker ועד CI/CD איכותי

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הגדרת SonarQube: היכן נשברת בדיקת הקוד

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

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

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

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

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

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

מה נותנת בדיקת איכות קוד מסודרת

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

פרופיל כללים וסף איכות

פרופיל כללים מרכיבים לפי סטאק הפרויקט: מסירים בדיקות רועשות, משאירים את אלו שתופסות מחלקות פגמים אמיתיות — שאילתות לא מאובטחות למסד הנתונים, דליפות חיבורים, חריגים לא מטופלים, בלוקים כפולים.

את סף האיכות קושרים לקוד חדש, לא לישן: הצוות לא טובע בהערות מצטברות, אבל שינויים בלי מעבר בדיקה לא נכנסים לענף.

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

חיבור למאגר הקוד

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

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

מצבי ניתוח: הרצה מקומית, שרת, בדיקה סלקטיבית

אפשר ליישם כללי איכות בשלושה מצבים, ובחירת המצב קובעת כמה מהר מהנדס יקבל תשובה. הרצה מקומית פורשים על מחשב המפתח, שרת בדיקות — בסביבה המשותפת, ובדיקה סלקטיבית מכסה רק קבצים שהשתנו. ב-SonarQube המצבים האלה תואמים זה לזה ומשתמשים באותו סט כללים — משתנה רק מקור הנתונים ורגע ההרצה.

הרצה מקומית, שרת בדיקות ובדיקה סלקטיבית

אפשרות מתי מתאימה מגבלות
הרצה מקומית בקונטיינר צריך לבדוק תיקון לפני שליחה לענף המשותף הניתוח עובר על עותק מקומי: אין היסטוריה, מדדי ריליסים קודמים וסף אחיד לצוות
שרת בדיקות בסביבה המשותפת צריך כללים אחידים לכל הענפים ומגמה לפי גרסאות דורש תחזוקת שירות ומסד נתונים; התוצאה מגיעה רק אחרי שליחת הקוד
בדיקה סלקטיבית של קבצים שהשתנו מאגר גדול, הרצה מלאה נמשכת זמן רב לא רואה קשרים בין מודולים — חלק מהפגמים נשארים מחוץ לבדיקה

מגבלות הניתוח

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

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

הגדרת SonarQube לצינור הבנייה שלכם

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

בחינת המצב הנוכחי ותכנית הפריסה

  1. בוחנים איך בנוי צינור הבנייה כיום: היכן מופעלת הבדיקה, אילו ענפים ראשיים, כמה נמשכת הרצה מלאה. אחרת הניתוח יאט את הבנייה או יפעל על השינויים הלא נכונים.
  2. מסכמים תכנית פריסה: שרת המנתח, אחסון הדוחות, סוכני בנייה — קוד המקור והתוצאות לא יוצאים מהמתאר שלכם לפי חישוב אישי. קובעים הרשאות: מי רואה דוחות, מי משנה פרופיל, מי מסיר הערה. אחרת האיכות הופכת לנושא למחלוקת, לא לתהליך.

הגדרת כללים ובדיקת קבלה

  • מגדירים כללים לקוד שלכם: את הסף מחשבים לפי קוד חדש, לא לפי כל המאגר, — החוב המצטבר לא חוסם עבודה, ושינויים חדשים מגיעים נקיים.
  • מחברים את הבדיקה לצינור: הרצה בכל מיזוג, הסטטוס חוזר למערכת בקרת הגרסאות, והבנייה נעצרת רק על הערות קריטיות.
  • מבצעים בדיקת קבלה על פרויקט חי: מיזוגים אמיתיים, שחזוריות של הערות, זמן מעבר, כיבוי התראות שווא.
  • מעבירים תכנית פריסה, נהל עבודה עם הערות והרשאות — מכאן הצוות מפעיל את המנתח בעצמו.

מה מעבירים בסיום: קונפיגורציות ונהלים

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

ארטיפקטי קונפיגורציה

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

הוראות ונהל תחזוקה

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

בסיום הצוות מקבל נקודת אחיזה: הכללים לא משתנים בשקט, חריגים מנוסחים בכתב, ואיכות הקוד החדש נדונה לפי דוח, לא לפי תחושות.

מהשטח: איך קיצרו את זמן הבדיקה ואת מספר הפגמים

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

איך היה

ניתוח מלא הופעל ידנית, נמשך כ-40 דקות וכיסה את כל הענף — אותו דחו ליום האחרון לפני השחרור. פרופיל הכללים היה בברירת מחדל: הכול עבד כאזהרות, הערות חוסמות היו אפס, ועד הריליס הצטברו יותר משלוש מאות הערות פתוחות.

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

מה השתנה

את הניתוח חילקו לשני מעברים: מהיר על קבצים שהשתנו בעת מיזוג לענף הראשי, ומלא לפי לוח זמנים בלילה.

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

בדיקת השינויים נמשכת 5–7 דקות במקום 40, הערות חוסמות לשחרור — אפס, ביטולים ברבעון — אפס. הוויכוחים על ספים פסקו, והסקירה שוב עוסקת בלוגיקת ההחלטות.

במה שונה בקרה מובנית משרת בדיקות נפרד?

בקרה מובנית חיה בתוך מאגר הקוד ומופעלת בכל מיזוג: בודקת תלויות מול חולשות ידועות, מחפשת סודות שנכנסו למאגר, ותופסת שגיאות טיפוסיות. אין שם כמעט מה להגדיר — הכללים נקבעים על ידי הפלטפורמה, וסף החסימה משתנה בשני מתגים.

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

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

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

שאלות על פריסה ותחזוקה

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

אפשר לנתח רק שינויים, ולא את כל המאגר?

כן, זה מצב רגיל. מגדירים את המושג "קוד חדש" — לפי ענף ייחוס, גרסה קודמת או עומק היסטוריה — ו-Quality Gate מעריך רק אותו. המורשת נקבעת בקו בסיס: היא לא חוסמת את הבנייה, והחוב נסגר ככל שמתקנים בקבצים.

איך מסמנים התראות שווא?

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

בכמה יגדל זמן הבנייה?

הסורק פועל בשלב נפרד אחרי הבדיקות; במאגרים גדולים מפעילים טעינה חלקית של היסטוריה ומטמון, כדי לא לאנדקס מחדש דברים שלא השתנו. את הדוח שולחים באופן אסינכרוני — הצינור לא ממתין להכרעה, והענף מקבל סטטוס כשהשרת סיים לעבד את הנתונים.

היכן נשמרות התוצאות ומי מתחזק אותן?

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

נדבר על המשימה ונחזור עם הערכה ותכנית

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

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

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