DevOps

מתודולוגיית הנדסת תוכנה
הנדסת תוכנה
ערך זה הוא חלק מקטגוריית הנדסת תוכנה

Coding Shots Annual Plan high res-5.jpg
מתכנת בעבודתו

פעילויות ושלבים
דרישותניתוחאפיוןארכיטקטורהעיצובתכנותדיבוגבדיקהאימותבנייהפריסהתפעולתחזוקה
מתודולוגיות
זריזותמפל המיםתכנת ותקן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, JFrog ו-Vagrant הם דוגמאות לכלים פופולריים המשמשים בשרשרת הכלים של DevOps.

DevOps בהשוואה ל-Agile ו-Continuous deliveryעריכה

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

למושגים Continuous delivery ו-DevOps משמעות דומה, ולעיתים קרובות מבלבלים ביניהם, אך עם זאת אלו הן שתי תפישות שונות. גישת ה-DevOps רחבה יותר, והיא מתמקדת בשינוי תרבותי, ובפרט בשיתוף הפעולה בין הצוותים השונים שלוקחים חלק באספקה (delivery) של התוכנה (פיתוח,IT,QA, הנהלה, וכולי), כמו גם האוטומציה של תהליכי אספקת התוכנה. בהשוואה לכך, 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 (ארגון הקוד מחדש באופן מתמשך), ובכך להפחית את הצורך בתכנון נרחב מראש, ומאפשר הוצאה לאור מוקדמת ומתמשכת של התוכנה.

ראו גםעריכה