צינור פשוט של ג'נקינס עם מרתון ומסוס
1. הקדמה
במאמר זה נבצע צינור פשוט למסירה רציפה עם ג'נקינס, מרתון ומסוס.
ראשית, ניתן סקירה ברמה גבוהה על ערימת הטכנולוגיה והארכיטקטורה, עם הסבר כיצד הכל משתלב. בעקבות זאת, נעבור לדוגמא מעשית, שלב אחר שלב.
התוצאה של זה תהיה צינור אוטומטי לחלוטין של ג'נקינס, שיפרוס את היישום שלנו באשכול Mesos באמצעות מרתון.
2. סקירה של ערימת הטכנולוגיה
בעבודה עם מכולות וארכיטקטורות מיקרו-שירותים, אנו מתמודדים עם בעיות תפעוליות חדשות שלא היינו עושים עם ערימות מסורתיות יותר.
לדוגמא, בעת פריסה לאשכול, עלינו להתמודד עם קנה המידה, כישלון כשל, רשת ועוד. ניתן לפתור את בעיות המחשוב הקשות והמבוזרות הללו באמצעות גרעינים ומתזמנים מבוזרים, כמו אפאצ'י מסוס ומרתון.
2.1. מסוס
Mesos, במונחים הפשוטים ביותר, ניתן לראות כשרת יחיד בו יופעלו היישומים שלנו. במציאות יש לנו אשכול, אבל ההפשטה הזו היא שהופכת אותו לכל כך שימושי.
2.2. מָרָתוֹן
מרתון הוא המסגרת המשמשת לפריסת היישומים שלנו ל- Mesos, פיתרון בעיות קשות עבורנו (בדיקת בריאות, קנה מידה אוטומטי, failover, ניטור וכו ').
3. התקנה והתקנה
מאמר זה מניח שכבר יש לך ג'נקינס, מסוס ומרתון. אם זה לא המקרה, עיין בתיעוד הרשמי של כל אחד מהם כדי ללמוד כיצד להגדיר אותם. בלי זה, לא תוכל ליישם אף אחד מהשלבים במדריך.
4. צינור המסירה שלנו
אנו ניצור את הצינור הבא של ג'נקינס:
אין שום דבר מורכב במיוחד בגישה זו - זה שם נרדף לזרימה של צינורות התקליטורים המודרניים ביותר. במקרה שלנו, פירושו של בנייה יהיה מיכל של היישום, ופריסה פירושה שימוש במרתון כדי לתזמן אותו לאשכול של Mesos.
5. בדיקה ובנייה של היישום שלנו
הצעד הראשון הוא לבנות ולבדוק את היישום שלנו. כדי לשמור על דברים פשוטים, היישום שאנחנו הולכים לעבוד איתו הוא יישום Spring Boot. מסיבה זו, החפץ שנוצר שלנו יהיה צנצנת הפעלה. לא יהיו לה תלות חיצונית פרט ל- JRE, מה שהופך אותה לפשוטה מאוד לביצוע.
5.1. יצירת העבודה שלנו
הדבר הראשון שאנחנו רוצים לעשות הוא ליצור את ג'נקינס. בואו נבחר "פריט חדש" בסרגל הניווט השמאלי, ואז נבחר ליצור פרויקט בסגנון חופשי, ולתת לו "מרתון-מזוס-הדגמה“:
5.2. שילוב עם גיט
לאחר מכן, בואו להגדיר אותו לשכפול של מאגר Github המכיל את היישום שלנו:
לשם הפשטות, המאגר שלנו הוא ציבורי, כלומר אנו מסוגלים לשכפל על https. אם זה לא היה המקרה והיינו משבטים על SSH, יהיה צעד נוסף להגדרת משתמש SSH ומפתח פרטי, מעבר לתחום מאמר זה.
5.3. הגדרת Build Triggers
לאחר מכן, בואו נקבע כמה גורמי בנייה כך שהתפקיד שלנו יסקור git עבור התחייבויות חדשות בכל דקה:
5.4. יצירת סקריפט הבנייה שלנו
כעת אנו יכולים לומר לתפקידנו לבצע סקריפט מעטפת כשהוא פועל. כשאנחנו עובדים עם פרויקט פשוט Spring Boot Maven, כל מה שאנחנו צריכים לעשות זה להפעיל את הפקודה "mvn נקי להתקין". פעולה זו תריץ את כל הבדיקות ותבנה את צנצנת ההפעלה שלנו:
5.5. בונה את הפרויקט שלנו
כעת הגדרנו את תחילת הצינור שלנו, בואו נפעיל אותו באופן ידני על ידי לחיצה על "בנה עכשיו" בעבודה. לאחר סיום העבודה, אנו יכולים לאשר שהיא עברה על ידי שהיא מסומנת כחולה.
6. מיכל היישום שלנו
בואו נעבור לשלב הבא של הצינור שלנו, שהוא אריזה ופרסום היישום שלנו עם Docker. עלינו להשתמש ב- Docker כמכולות הם בדיוק מה שמרתון מנהל. זה לא בלתי סביר, מכיוון שלמעשה כל דבר יכול לרוץ במיכל. קל יותר לכלי כמו מרתון לעבוד עם ההפשטה שהעניקו אלה.
6.1. יצירת קובץ ה- Dockerfile
ראשית, בואו ניצור קובץ Docker בשורש הפרויקט. בעיקרו של דבר, קובץ Docker הוא קובץ המכיל הוראות ל- Docker Deamon כיצד לבנות תמונה:
FRA openjdk: 8-jre-alpine ADD target / mesos-marathon-0.0.1-SNAPSHOT.jar app.jar חשיפה 8082 ENTRYPOINT ["java", "- jar", "/ app.jar"]
התמונה שאנו בונים פשוטה - כל מה שהיא מכילה הוא צנצנת הפעלה ופקודת מעטפת שתבצע אותה עם תחילת המכולה. עלינו לוודא כי אנו חושפים את היציאה שאפליקצייתנו תקשיב לה, במקרה זה '8082'.
6.2. פרסום התמונה
עכשיו, כשאנחנו מסוגלים לבנות את התמונה שלנו, בואו ליצור סקריפט bash פשוט הבונה ומפרסם אותו למאגר הפרטי של Docker Hub ונכניס אותו לשורש הפרויקט שלנו:
#! / usr / bin / env bash set -e docker login -u baeldung -p $ DOCKER_PASSWORD docker build -t baeldung / mesos-marathon-demo: $ BUILD_NUMBER. docker push baeldung / mesos-marathon-demo: $ BUILD_NUMBER
יתכן שתצטרך לדחוף את התמונה שלך לרישום העגינה הציבורי או לתמונה הפרטית שלך.
ה $ BUILD_NUMBER משתנה הסביבה מאוכלס על ידי ג'נקינס, ומתגבר עם כל מבנה. למרות שביר מעט, זוהי דרך מהירה לגרום לכל בנייה להגדיל את מספר הגרסה. ה $ DOCKER_PASSWORD מאוכלס גם על ידי ג'נקינס, ובמקרה זה נשתמש בתוסף EnvInject על מנת לשמור אותו בסוד.
אמנם אנו יכולים לאחסן את התסריט הזה ישירות בג'נקינס, אך עדיף שהוא יישאר בשליטת הגרסאות, מכיוון שניתן יהיה לערוך גרסאות וביקורות לצד שאר הפרויקט שלנו.
6.3. בנייה ופרסום על ג'נקינס
עכשיו בואו ונשתנה את עבודת ג'נקינס כך שהיא תריץ את "Dockerise.sh" לאחר בניית הצנצנת:
ואז, בוא ננהל את התפקיד שלנו כדי לאשר שוב, ואשר שהכל עובד על ידי כך שהוא הולך לכחול.
7. פריסת הדימוי שלנו
הצינור שלנו כמעט הושלם. יש רק שלב אחד נוסף, והוא להשתמש במרתון כדי לפרוס את היישום שלנו לאשכול Mesos שלנו.
ג'נקינס מגיע עם תוסף "פרוס עם מרתון". זה משמש כמעטפת סביב ממשק ה- API של מרתון, מה שמקל על מה שהיה בעבודה עם סקריפטים מעטפתיים מסורתיים. ניתן להתקין אותו באמצעות מנהל התוספים.
7.1. יצירת קובץ המרתון שלנו
לפני שנוכל להשתמש בתוסף מרתון, עלינו ליצור קובץ "marathon.json" ולאחסן אותו בשורש הפרויקט שלנו. הסיבה לכך היא שהתוסף תלוי בו.
קובץ זה: "marathon.json" מכיל הגדרת יישום Mesos. זהו תיאור של שירות (יישום) ארוך טווח אותו אנו רוצים להפעיל. בסופו של דבר, התוסף של מרתון ג'נקינס יפרסם את תוכן הקובץ למרתון / v2 / אפליקציות נקודת סיום. מרתון יתאם בתורו את היישום המוגדר להפעלת Mesos:
{"id": "mesos-marathon-demo", "container": {"type": "DOCKER", "docker": {"image": "", "network": "BRIDGE", "portMappings": [{"containerPort": 8082, "hostPort": 0}]}}}
זו התצורה הפשוטה ביותר שאנחנו יכולים לתת ליישום מיכל.
הרכוש: "portMappings"יש להגדיר נכון על מנת להנגיש את היישום שלנו מעבד המסוס שלנו. זה בעצם אומר, למפות את נמל המכולה 8082, ליציאה אקראית במארח (mesos slave) כדי שנוכל לדבר עם היישום שלנו מהעולם החיצון. לאחר פריסת היישום שלנו, מרתון יגיד לנו במה השתמשו בנמל זה.
7.2. הוספת שלב בניית פריסה למרתון
בואו להוסיף פעולת בניית פוסט למרתון למשימה שלנו:
שימו לב שאנו מספרים לתוסף היכן מרתון פועל, במקרה זה 'localhost: 8081'. אנחנו גם מספרים לו את התמונה שאנחנו רוצים לפרוס. בזה מוחלף שדה "תמונה" ריק בקובץ שלנו.
כעת יצרנו את השלב האחרון של הצינור שלנו, בואו ננהל את עבודתנו פעם נוספת ונאשר שהיא עדיין עוברת, הפעם עם הצעד הנוסף שבו היא שולחת את הבקשה שלנו למרתון.
7.3. אימות הפריסה שלנו במרתון
עכשיו זה נפרס, בואו נסתכל בממשק המשתמש של מרתון:
כפי שאנו רואים, היישום שלנו מוצג כעת בממשק המשתמש. כדי לגשת אליו, עלינו רק לבדוק לאיזה מארח וליציאה הוקצה:
במקרה זה הוקצה באופן אקראי יציאה 31143 ב- localhost, שתמפה באופן פנימי לנמל 8082 במיכל שלנו כפי שהוגדר בהגדרת היישום. לאחר מכן נוכל לבקר בכתובת אתר זו בדפדפן שלנו כדי לאשר שהיישום מוגש כהלכה.
8. מסקנה
במאמר זה, יצרנו צינור מסירה רציף פשוט באמצעות ג'נקינס, מרתון ומסוס. בכל פעם שנדחוף שינוי לקוד שלנו, הוא יפעל בסביבה כעבור כמה דקות.
מאמרים מאוחרים יותר בסדרה זו יעסקו בנושאים מתקדמים יותר של מרתון, כגון בדיקת בריאות היישומים, קנה המידה, כישלון נכשל. מקרי שימוש אחרים עבור Mesos, כגון עיבוד אצווה עשויים להיות מכוסים.
קוד המקור ליישום שלנו זמין באתר GitHub; זהו פרויקט Maven שאמור להיות מסוגל לפעול כפי שהוא.