לדלג לתוכן

DevOps

מתוך ויקיפדיה, האנציקלופדיה החופשית
גרסה מ־22:35, 2 בנובמבר 2016 מאת רוני ב. (שיחה | תרומות) (סיום עבודה)
הנדסת תוכנה
ערך זה שייך לקטגוריית הנדסת תוכנה
פעילויות ושלבים
דרישותניתוחאפיוןארכיטקטורהעיצובתכנותניפוי שגיאותבדיקהאימותבנייהפריסהתפעולתחזוקה
מתודולוגיות
זריזותמפל המיםתכנת ותקןCrystal ClearScrumUnified ProcessExtreme Programmingאינטגרציה רציפהDevOps
תחומים תומכים
ניהול פרויקטיםניהול תצורהתיעודהבטחת איכותProfiling
כלים
מהדרמקשרמפרשIDEניהול גרסאותאוטומציית בנייה

בפיתוח תוכנה, DevOps היא תרבות ארגונית ומתודולוגיית עבודה אשר שמה דגש על שיתוף הפעולה והתקשורת בין מפתחי התוכנה לבין שאר אנשי ה-IT שבחברה. השיטה דוגלת בביצוע אוטומציה של תהליכי אספקת התוכנה (delivery) ושל שינויים בתשתיות. מקור המילה DevOps הוא מהלחם בסיסים של המילים האנגליות development (פיתוח) ו-operations (תפעול). מטרת השיטה לכונן תרבות וסביבה שבהן בנייה, בדיקות ושחרור של גרסאות תוכנה יכולים להתבצע במהירות, לעתים קרובות ובאופן אמין יותר.

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

דיאגרמת ון המציגה את DevOps כחיתוך של פיתוח תוכנה (development), תפעול (operations) ובדיקות תוכנה (QA)

כלים

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

  • תכנות (code) – פיתוח הקוד וסקירה שלו (code review), כלים לניהול ומיזוג גרסאות
  • בנייה (build) – כלים ל-continuous integration ולקבלת סטטוס של בניית התוכנה
  • בדיקות (test) – בדיקות תוכנה ומדידת הביצועים
  • אריזה (package) – אחסון תוצרי בנייה בינאריים (artifact repository), הכנת היישום לפריסה
  • שחרור (release) – ניהול שינויים, אישור שחרור גרסאות, אוטומציה לשחרור גרסאות
  • קונפיגורציה (configure) – הגדרה וניהול תצורה של תשתיות
  • ניטור (monitor) – ניטור ביצועים של היישום בזמן ריצה, חוויית משתמש

למרות שקיימים כלים שונים רבים, ישנן כמה קטגוריות של כלים אשר חיוניות להקמת תשתית DevOps. כלים כמו Docker, Jenkins, Puppet ו-Vagrant הם דוגמאות לכלים פופולריים המשמשים בשרשרת הכלים של DevOps.

DevOps בהשוואה ל-Agile ו-Continuous delivery

בארגונים אשר אימצו את גישת פיתוח תוכנה זריז (Agile) חלה עלייה בכמות גרסאות התוכנה המשוחררות. במקור, שיטת ה-DevOps נוצרה מהעלייה בפופולאריות של פיתוח זריז. שיטות ה-Agile ו-DevOps דומות אך שונות במספר היבטים חשובים: Agile מהווה שינוי בצורת החשיבה, בעוד ש-DevOps מיישמת שינוי בתרבות הארגונית הלכה למעשה. אחת המטרות של DevOps היא לייסד סביבה בה יכולים להתקיים שחרורי גרסאות תוכנה אמינות יותר ובקצב גבוה יותר. מנהלים האחראים על שחרורי גרסאות מתחילים להשתמש בכלים כגון אוטומציה לשחרור גרסאות וכלים ל-continuous integration כדי לסייע בקידום מטרה זו. כל זה נעשה תוך יישום גישת ה-continuous delivery ("אספקת תוכנה מתמשכת").

למושגים Continuous delivery ו-DevOps משמעות דומה, ולעתים קרובות מבלבלים ביניהם, אך עם זאת אלו הן שתי תפישות שונות. גישת ה-DevOps רחבה יותר, והיא מתמקדת בשינוי תרבותי, ובפרט בשיתוף הפעולה בין הצוותים השונים שלוקחים חלק באספקה (delivery) של התוכנה (פיתוח, QA, IT, הנהלה, וכו'), כמו גם האוטומציה של תהליכי אספקת התוכנה. בהשוואה לכך, continuous delivery היא גישה אשר מתמקדת באוטומציה של שחרור גרסאות, חיבור בין התהליכים השונים, וביצוע מהיר ותכוף יותר שלהם. המטרות הסופיות של שתי הגישות הן זהות ולעתים קרובות משלבים ביניהן להשגת מטרות אלו. גישות ה-DevOps וה-continuous delivery באות מאותו רקע של שיטות עבודה זריזות ו"חשיבה רזה": ביצוע של שינויים קטנים ומהירים עם התמקדות בתועלת עבור הלקוח הסופי. השיטות מתבססות על תקשורת ושיתופי פעולה פנימיים איכותיים, ובכך מסייעות להשיג זמנים קצרים לשחרור התוכנה לשוק (time to market), תוך הפחתת סיכונים.

אימוץ שיטת ה-DevOps והיחס לארכיטקטורת תוכנה

את אימוץ גישת ה-DevOps מקדמים פקטורים רבים, בינהם:

  1. שימוש בשיטות פיתוח זריזות (agile) ומתודולוגיות נוספות של פיתוח תוכנה
  2. דרישה מבעלי העניין ביחידות העסקיות השונות להגברת קצב שחרור גרסאות מוכנות לייצור
  3. זמינות רחבה של תשתיות וירטואליזציה וענן מצידם של ספקים פנימיים וחיצוניים
  4. שימוש נרחב באוטומציה בחוות השרתים (data centers) וכלים לניהול תצורה
  5. דגש מיוחד על אוטומציה של בדיקות ושיטות של continuous integration
  6. מסה קריטית של שיטות עבודה מומלצות (best practices) ידועות היטב

ארכיטקטורה

למרות שתיאורטית ניתן ליישם את גישת ה-DevOps יחד עם כל ארכיטקטורת תוכנה, ארכיטקטורת ה-microservices (מיקרו-שירותים) הופכת לסטנדרט עבור מערכות המתוכננות ל"פריסה מתמשכת" (continuous deployment). מכיוון שכל שירות הוא קטן, הדבר מאפשר לארכיטקטורה של כל שירות להתפתח בתהליך של continuous refactoring (ארגון הקוד מחדש באופן מתמשך), ובכך להפחית את הצורך בתכנון נרחב מראש, ומאפשר שחרור מוקדם ומתמשך של התוכנה.

ראו גם