יצירה אוטומטית של הערות שחרור ב-CI/CD: הגדרה

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

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

שאלות נפוצות

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

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

איסוף ידני של Release Notes: היכן התהליך נשבר

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

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

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

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

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

אפקט מדיד: מה משתנה לאחר אוטומציה של ההשקות

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

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

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

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

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

דרכי יצירה של Release Notes: השוואה בין גישות

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

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

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

כיצד אנו מיישמים יצירה אוטומטית: שלבי העבודה

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

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

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

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

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

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

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

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

כיצד היה

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

מה שינינו

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

מה נהיה

  • זמן הכנת ההשקה: מ-5-6 שעות ל-20-30 דקות, וזאת כאשר המשימה חדלה לחסום — הטיוטה מוכנה לפני הבנייה.
  • שיעור העריכות הידניות: כ-10% מהשורות, וזו הבהרה של ניסוחים, ולא כתיבה מחדש של כל ההיסטוריה.
  • שגיאות שנעלמו: שינויים לא תואמים שהוחמצו, כפילויות של סעיפים וקישורים שבורים למשימות.

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

במה שונה יצירה בצינור מיומן שינויים ידני?

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

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

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

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

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

ספקות ומגבלות טכניות: ניתוח של שאלות נפוצות

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

מה לעשות עם הודעות קומיטים ללא פורמט אחיד?

לא זורקים דבר: המנתח מניח את ההודעות בקטגוריות — חדש, תיקון, שינוי התנהגות, אבטחה, — ומה שלא זוהה הולך ל«שונות». את שיעורם אנו מחזיקים מתחת ל-10% ומתקנים את תבנית ההודעות, ולא את הסקריפט.

כיצד להוציא עריכות פנימיות מהרשימה הציבורית?

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

כיצד זה עובד במונורפו?

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

האם אפשר לחזור מהאוטומציה אם ההערה יצאה עם שגיאה?

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

מה עם פרסום למערכות חיצוניות?

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

ספרו לנו על המשימה — נחזור עם הערכה ותוכנית

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

מה יידרש מכם בקלט:

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

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

תארו את המשימה בשתיים-שלוש שורות — נחזור עם הערכה, תוכנית עבודה ושלב ראשון.