היום אני רוצה ליצור עבורכם דף של קונספטים מרכזיים וחשובים בעולם ה DevOps, כדי ליצור בסיס חזק לחומר המעשי שייכתב בהמשך. אסביר על מושגים שכדאי להכיר.
(Continuous Integration (CI
דמיינו שיש לכם אפליקציה שעובדים עליה 20 מפתחים וכל חולייה עובדת על חלק אחר. נרצה לעשות אינטגרציה בין כל החלקים כדי לראות שהאפליקציה עובדת כמו שהיא אמורה. כלומר, היא עולה בצורה תקינה וצולחת את כל ה-test-ים שלה. לשם כך נועדו כלי CI כגון Jenkins או GitLab CI. כך, קל יותר לגלות טעויות ולתקן אותם. אפשר לעשות אינטגרציה בין כל המרכיבים באפליקציה בצורה אוטומטית ומתוזמנת. בנוסף, ככה כל המפתחים יכולים לראות אם האינטגרציה נכשלה ואם כן באיזה שלב.
** CI לא סובב סביב לפתור באגים אלא כדי לגלות אותם יותר במהירות – לפני שמשחררים גרסה.
כדי להמחיש: אחרי כל commit ל-master או לכל branch אחר שנבחר ירוץ ה-CI. כך נזהה בקלות יותר איפה נכשלנו (ב-commit הספציפי שהפעיל את ה-trigger). לכן, מומלץ לדחוף שינויים ל-repo בדחיפות גבוהה.
** מי שלא מכיר את המושגים commit, branch, repo – מוזמן לחפש בגוגל. במידה ותרצו התייעצות או לא הבנתם משהו – מוזמנים לכתוב בתגובות.
(Continuous Delivery (CD
היכולת לדחוף את הקוד ל-Production, כלומר לשמור על כך שה-CI יעבור תמיד. זאת כדי שנוכל להעביר את הקוד ל-Production. הכוונה ב-Production היא לסביבה המבצעית שבה רצה האפליקציה שלנו(שצריך לנסות לשמור עליה ?). בעצם, תמיד נרצה להיות במצב שהקוד מוכן לעבור ל-production.
(Continuous Deployment (CD
תהליך שחרור גרסה שבו מעבירים את האפליקציה שלנו לכל השרתים. השאיפה שזה יקרה מהרגע שהאפליקציה עברה את כל ה-CI ללא התערבות אדם. בנוסף, נרצה שזה יקרה כמה שיותר מהר. אם מפתח דחף קוד ואז pipeline (תהליך שמריץ את ה-testים שנכתבו ב-CI) יצליח, נרצה שבאופן אוטומטי הקוד יתעדכן בכל השרתים.
(Configuration Management (CM
היכולת לבצע קונפיגורציות ללא התערבות אדם. זה נעשה באמצעות תוכנות מסוימות שעוזרות לנו לקנפג דברים בצורה אוטומטית. לדוגמא, אם האפליקציה שלנו דורשת תלות מסוימת, נוכל לגרום לכך שהתלות תותקן ותהיה זמינה לאפליקציה בצורה אוטומטית.
Continuous Monitoring
הקונספט הזה מתייחס תהליך תמידי של ניטור על המערכות שלנו. נרצה לוודא שאנחנו יודעים מה קורה במערכת שלנו (מרמת ניצול המשאבים של המערכת עד בדיקות פונקציונליות). השאיפה היא להצליח לגלות פגמים בזמזן אמת. אם אפשר לפתור אותם ללא התערבות אדם – זה מבורך.
לסיכום, נסו לשים לב איך אבני הבניין של ה CAMS model (שעליו פירטתי כאן) ניתנים לביטוי בתוך כל אחד מהעקרונות שפירטתי עליהם במאמר.
ישנם עוד הרבה קונספטים חשובים בעולם ה DevOps, אני דיברתי על חלקם. אל דאגה, בעתיד ניגע בשאר. עד אז, שיהיה המשך שבוע טוב!
תודה רבה! אשמח גם למאמר שעוסק בgit, נראה לי שזה מאד רלוונטי לכאן:)
תודה על הפידבק!
אכין מאמר מקיף בנושא בקרוב
מאמר מעולה!
זה רלוונטי רק למפתחים בווינדוס/לינוקס או גם למפתחי imbedded?
אכן,
מבחינת CI/CD, זה קצת יותר מאתגר. צריך לדאוג לתשתית חומרתית מורכבת יותר, יותר שרתים בשביל בדיקות שונות(כדי לבצע שינויים ברמת החומרה) ולכן מומלץ מאוד להשתמש בשירותי cloud למיניהם במקרים כאלו. במקרים כאלו יש דגש רב על (CM(Configuration Management, שנובע מהצורך לבצע הרבה קונפיגורציות.
אם השינוי בקוד דורש גם שינויים בטבלאות sql , האם יש דרך לבצע את זה אוטומטית ואם כן באיזה כלי מומלץ להשתמש?
אכן, יש מגוון דרכים.
כדי לשנות קונפיגורציות ישנם כלי CM כמו Ansible, Terraform(זה בחלק של ה CD).
תוכל להריץ סט פקודות בעזרת כלי CM על ה-db (כמו שליפות שיעדכנו לפי הצורך מה שתרצה). תוכל כמובן להתנות שינויים בDB בדברים אחרים.