כדי להאיץ את הפיתוח המקומי ב-Cloud Code ל-IntelliJ, כדאי להשתמש בסנכרון קבצים וטעינה מחדש של קבצים, פריסה אוטומטית בשמירה, ולהשתמש במודולים של Skaffold כדי לפתח חלקים של אפליקציה בנפרד.
הפעלת סנכרון קבצים וטעינה מחדש של Skaffold
כדי לשפר את היעילות של תהליך העבודה של פיתוח מקומי ולמנוע את הצורך לבנות מחדש, לפרוס מחדש ולהפעיל מחדש את ה-pods, Skaffold תומך בהעתקה של קבצים שהשתנו למאגר פריסה. המשמעות היא שכאשר מבצעים שינויים בקבצים סטטיים ובקבצי קוד מקור, אפשר לראות את השינויים נכנסים לתוקף תוך שניות, וכך לקבל משוב מהר יותר.
כשמדובר בקבצים סטטיים (כמו קובצי HTML ו-CSS), התנהגות העתקת הקבצים הזו נקראת סנכרון קבצים.
במקרה של קובצי קוד מקור, ההתנהגות הזו נקראת טעינה מחדש בזמן ריצה והיא תומכת בסוגי הקבצים הבאים:
- Go: *.go
- Java: *.java, *.kt, *.scala, *.groovy, *.clj
- NodeJS: *.js, *.mjs, *.coffee, *.litcoffee, *.json
אם הגדרתם טעינה מחדש בזמן אמת, Skaffold מזהה שינויים בקבצים נתמכים ומסנכרן את השינויים האלה עם הקונטיינר הפועל באשכול. שינויים בסוגי קבצים שלא תומכים בטעינה דינמית גורמים לבנייה מחדש של תמונה ולהפעלה מחדש של ה-Pod.
כשעובדים עם Buildpacks ככלי הבנייה המועדף, סנכרון קבצים אוטומטי וטעינה מחדש של קבצים מופעלים כברירת מחדל. ב-builders אחרים כמו Docker, אפשר לציין קטע sync בקובץ skaffold.yaml בשביל הארטיפקט שרוצים להתאים אישית.
הגדרת הסנכרון יכולה להיות אחת מהאפשרויות הבאות (לפי סדר העדיפות):
-
auto: Skaffold מגדיר את הסנכרון באופן אוטומטי. (רק לארטיפקטים של Jib ו-Buildpacks ). זוהי ברירת המחדל של Buildpacks. -
infer: היעדים של כל קובץ שמשתנה מוסקים מה-builder. -
manual: צריך לציין את הקבצים בסביבת העבודה המקומית ואת היעד שלהם בקונטיינר הפועל.
בדוגמה הבאה מוצג קטע sync בקובץ skaffold.yaml שמציין סנכרון manual כדי לסנכרן את כל קובצי ה-HTML של /static-html לתיקייה static במאגר:
build: artifacts: - image: gcr.io/k8s-skaffold/node-example context: node sync: manual: - src: 'static-html/*.html' dest: static
למידע מפורט על סנכרון קבצים ועל הגדרת כללי סנכרון, אפשר לעיין במדריך Skaffold בנושא סנכרון קבצים.
הוספת תכונות חדשות כשמפתחים ב-Kubernetes
אחרי שמגדירים סנכרון קבצים וטעינה מחדש של קוד, מתחילים מחזור איטרציה ומוסיפים עוד תכונות לפרויקט. השינויים שלכם נפרסים באשכול Kubernetes בלי לעצור ולהסיר את הפריסה, לבנות ולתייג את קובץ האימג' באופן ידני או לעדכן את האשכול.
מחזור איטרציה רגיל נראה כך:
מבצעים שינוי בפרויקט. לדוגמה, אם משתמשים באפליקציית Cloud Code Java Guestbook, מוסיפים נקודת קצה חדשה למחלקה
FrontendControllerבאופן הבא:פותחים את הקובץ
FrontendController.javaמתוךsrc/main/java/cloudcode/guestbook/frontendומוסיפים את השורות הבאות:@RequestMapping("/greeting") @ResponseBody public String greeting(@RequestParam(value="name", defaultValue="World") String name) { return String.format("Hello from Kubernetes with IntelliJ, %s!", name); }מוסיפים את ההצהרות הנדרשות לגבי ההערות החדשות,
RequestMappingו-ResponseBody.
שומרים את השינויים (
Ctrl/Cmd+S) או בונים את הפרויקט.אפשר לצפות בהתקדמות וברישומי הפריסה בחלון המסוף. אחרי שהשינויים יופעלו, תצטרכו לאשר את העדכונים.
כדי לסיים את סשן הפיתוח הרציף, לוחצים על סמל העצירה.
Cloud Code מוחק את כל משאבי Kubernetes שנעשה בהם שימוש במהלך סשן הפיתוח.
פיתוח אפליקציות של מיקרו-שירותים באמצעות הגדרות של Skaffold
כשמפתחים אפליקציות של מיקרו-שירותים, כדאי לעבוד על חלקים נפרדים באופן עצמאי כדי לפשט את ניפוי הבאגים והפריסה.
אתם יכולים לפתח ולנפות באגים בחלקים של האפליקציה באופן עצמאי על ידי פיצול האפליקציה למודולים של Skaffold. לדוגמה, Bank of Anthos הוא אפליקציה לדוגמה שמכילה עשרה מיקרו-שירותים. בקובץ skaffold.yaml של הדוגמה, השירותים האלה מקובצים לחמישה מודולים של Scaffold בשמות setup, db, frontend, backend ו-loadgenerator.
הגדרת מודולים של Skaffold ויחסי תלות בהגדרות
כדי להגדיר מודולים של Skaffold ותלות בהגדרות:
פותחים את הפרויקט שבו רוצים להגדיר את המודולים.
פותחים את הקובץ
skaffold.yaml.אם בקובץ
skaffold.yamlיש כמה הגדרות, כדי להפוך הגדרה למודול Skaffold, מציינים את השורה הבאה:metadata: name: MODULE_NAME_1לדוגמה, במודול
dbשל Bank of Anthosskaffold.yamlמוגדרות פריסות של מסדי נתונים:בהגדרות שמתבססות על פריסה של הגדרה אחרת לפני פריסת ההגדרה הנוכחית, צריך להוסיף את ההגדרה לתלות. כדי לציין תלות בהגדרות, מוסיפים רשימה של
configsלקטעrequiresבקובץskaffold.yaml.לדוגמה, קובץ
skaffold.yamlBank of Anthos כולל את תלות התצורהsetup.כדי להגדיר תלות, מוסיפים את השורה הבאה לקובץ
skaffold.yaml, כאשר DEPENDENCY_NAME הוא שם התלות.requires: - configs: DEPENDENCY_NAMEההגדרות שמופיעות בדרך הזו יכולות להתייחס לתלות שהוגדרה באותו קובץ או בקובצי
skaffold.yamlאחרים בפרויקט הנוכחי.כדי לבדוק את התלות בהגדרות, צריך ליצור כל אחד מהמודולים של Skaffold בנפרד ולוודא שהם נפרסים עם התלות שלהם. לשם כך, פועלים לפי השלבים שמפורטים במאמר יצירת מודולים ספציפיים של Skaffold והתלות שלהם.
איך בונים מודולים ספציפיים של Skaffold ואת יחסי התלות שלהם
אחרי שמגדירים את המודולים ואת התלות שלהם, אפשר לציין אילו מודולים רוצים להפעיל בכרטיסייה Build / Deploy כשבוחרים באפשרות Run > Edit configurations.מתקינים את גרסאות ה-build האחרונות של Insiders.
עוברים אל Run > Edit configurations ופותחים את הכרטיסייה Build / Deploy.
בקטע Skaffold configuration (הגדרת Skaffold), בוחרים באפשרות skaffold.yaml.
צריך לבחור אחת מהאפשרויות:
- פיתוח ופריסה עם כל המודולים והתלויות
- Build and deploy with (פיתוח ופריסה באמצעות) (אם יש מודולים זמינים) ובוחרים את המודולים שרוצים לפתח ולפרוס.
הבחירה שלכם נשמרת לפריסות הבאות. אם בוחרים קבוצת משנה של מודולים, Cloud Code מציג אזהרה לגבי פריסה של קבוצת משנה של מודולים ולא של המערכת כולה.
פיתוח רציף ב-Kubernetes
אחרי שמגדירים את יעד ההרצה עם האפשרויות הרצויות, אפשר לבחור בהרצה רגילה של האפליקציה או להתחיל מחזור איטרציה של פיתוח בסביבת הפיתוח המשולבת (IDE) כדי להפיץ את השינויים שבוצעו במקור ובקובצי התלות לאפליקציה הפעילה.
יעד ההרצה Develop on Kubernetes מתחיל את מחזור הפיתוח באשכול Kubernetes. אחרי שמתחילים את מחזור הפיתוח, Cloud Code, באמצעות Skaffold, יוצר קובץ אימג' לפרויקט, מתייג אותו, מעביר אותו בדחיפה למאגר שהוגדר ומשתמש ב-kubectl כדי לפרוס את מניפסטים של Kubernetes בפרויקט.
- לוחצים על הסמל Develop on Kubernetes ואז על Edit Configurations כדי לפתוח את תיבת הדו-שיח Run/Debug Configurations.
- אפשר להתאים אישית את הפריסה באמצעות אפשרויות ההגדרה הזמינות.
- אם רוצים ש-Cloud Code יפרוס מחדש את האפליקציה באופן אוטומטי אחרי ששומרים את השינויים, בוחרים באפשרות On file save (בזמן שמירת הקובץ) בקטע Watch mode - rebuild and redeploy (מצב צפייה – בנייה מחדש ופריסה מחדש). באפליקציות חדשות של Kubernetes, האפשרות על פי דרישה מסומנת כברירת מחדל. מידע נוסף על מצבי שעון זמין במאמר מצבי שעון.
- אם האפליקציה שלכם מוגדרת לשימוש במודולים של Skaffold, אתם יכולים לבחור לבנות או לפרוס רק מודולים ספציפיים.
- אחרי שסיימתם לקבוע את ההגדרות, לוחצים על אישור ואז על סמל ההפעלה.
המאמרים הבאים
- משתמשים באשכול minikube המובנה ב-Cloud Code לפיתוח מקומי.
- ניפוי באגים באפליקציה ב-Cloud Code
- פרטים נוספים זמינים במאמר בנושא תכונת סנכרון הקבצים של Skaffold