HiTakeJobHiTakeJob

מה זה CI/CD? הסבר פשוט + כמה משרות פתוחות בישראל

זמן קריאה: 6 דקות

CI/CD הוא צמד פרקטיקות שמקצר את הדרך מקוד שנכתב לקוד שרץ אצל משתמשים: Continuous Integration - מיזוג ובדיקה אוטומטית של כל שינוי, ו-Continuous Delivery - הכנה אוטומטית לפריסה. בלוח HiTakeJob פתוחות כרגע 47 משרות שמזכירות CI/CD, 15 שמזכירות GitHub Actions ו-68 שמזכירות Docker.

מה הבעיה שזה פותר

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

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

מה ההבדל בין CI, CD ו-CD?

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

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

מה עובר ב-pipeline בפועל

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

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

מה נדרש מהקוד כדי שהשרשרת תעבוד

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

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

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

איך נראית פריסה בטוחה לייצור

הפריסה עצמה היא המקום שבו רוב הסיכון מרוכז, ויש כמה דפוסים מקובלים:

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

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

מה מודדים כדי לדעת אם זה עובד

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

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

מה הופך pipeline לטוב

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

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

באילו כלים זה נעשה בישראל

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

  • CI/CD - 47 משרות מזכירות את המונח עצמו.
  • Docker - 68 משרות; האריזה שעליה השרשרת עובדת.
  • Kubernetes - 110 משרות; יעד הפריסה הנפוץ.
  • GitHub Actions - 16 משרות; הרצת השרשרת בתוך מערכת הקוד.
  • Terraform - 47 משרות; התשתית שאליה פורסים.
  • Bash - 30 משרות; הדבק שמחזיק את הכול.

אפשר לראות את המשרות במשרות CI/CD ובמשרות Docker, ואת ההקשר הרחב במה זה DevOps ובמה זה Kubernetes, שהוא יעד הפריסה הנפוץ ביותר בשרשרות האלה.

שאלות נפוצות

CI/CD זה אותו דבר כמו DevOps?

לא. DevOps היא גישה שלמה לשיתוף אחריות בין פיתוח לתפעול; CI/CD הוא המימוש הטכני המרכזי שלה. אפשר להפעיל pipeline בלי לאמץ את התרבות - וזה בדיוק המצב בחלק מהארגונים.

כמה בדיקות צריך לפני שמשחררים?

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

מה עושים כשה-pipeline נכשל לעיתים קרובות?

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

צריך לדעת את זה גם כמפתח ולא רק כ-DevOps?

כן. היום מצופה ממפתח לכתוב בדיקות שירוצו בשרשרת, להבין למה בנייה נכשלה ולתקן. 47 משרות מזכירות CI/CD, וחלק ניכר מהן אינן משרות DevOps אלא משרות פיתוח.

כמה זמן לוקח להקים pipeline ראשון?

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

האם זה רלוונטי לצוות של שני מפתחים?

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

מאמרים נוספים

המשרות באתר