האצת הפיתוח ב-Cloud Code ל-IntelliJ

כדי להאיץ את הפיתוח המקומי ב-Cloud Code ל-IntelliJ, כדאי להשתמש בסנכרון קבצים וטעינה מחדש של קבצים, פריסה אוטומטית בשמירה, ולהשתמש במודולים כדי לפתח חלקים של אפליקציה בנפרד.

הפעלה של סנכרון קבצים וטעינה מחדש של קבצים

כדי לשפר את היעילות של תהליך העבודה של הפיתוח המקומי ולמנוע את הצורך לבנות מחדש, לפרוס מחדש ולהפעיל מחדש את ה-pods,‏ Cloud Code תומך בהעתקת קבצים שהשתנו למאגר שנפרס. כלומר, כשמבצעים שינויים בקבצים סטטיים ובקבצי קוד מקור, אפשר לראות את השינויים תוך שניות, וכך לקבל משוב מהר יותר.

כשמדובר בקבצים סטטיים (כמו קובצי HTML ו-CSS), התנהגות העתקת הקבצים הזו נקראת סנכרון קבצים.

במקרה של קובצי קוד מקור, ההתנהגות הזו נקראת טעינה מחדש בזמן ריצה והיא תומכת בסוגי הקבצים הבאים:

  • ‫Go:‏ ‎*.go
  • ‫Java:‏ ‎*.java, *.kt, *.scala, *.groovy, *.clj
  • ‫NodeJS:‏ ‎*.js, *.mjs, *.coffee, *.litcoffee, *.json

אם הגדרתם טעינה מחדש בזמן אמת, Cloud Code מזהה שינויים בקבצים נתמכים ומסנכרן את השינויים האלה עם הקונטיינר הפועל באשכול. שינויים בסוגי קבצים שלא תומכים בטעינה מחדש של קבצים גורמים לבנייה מחדש של תמונה ולהפעלה מחדש של ה-pod.

כשעובדים עם Buildpacks ככלי הבנייה המועדף, סנכרון קבצים אוטומטי וטעינה מחדש של קבצים מופעלים כברירת מחדל. ב-builders אחרים כמו Docker, אפשר לציין קטע sync בקובץ skaffold.yaml בשביל הארטיפקט שרוצים להתאים אישית.

הגדרת הסנכרון יכולה להיות אחת מהאפשרויות הבאות (לפי סדר העדיפות):

  • ‫auto: Cloud Code מגדיר את הסנכרון באופן אוטומטי. (רק לארטיפקטים של 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 בלי לעצור ולהסיר את הפריסה, לבנות ולתייג את התמונה באופן ידני או לעדכן את האשכול.

מחזור איטרציה רגיל נראה כך:

  1. מבצעים שינוי בפרויקט. לדוגמה, אם משתמשים באפליקציית Cloud Code Java Guestbook, מוסיפים נקודת קצה חדשה למחלקה FrontendController באופן הבא:

    1. פותחים את הקובץ 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);
      }
      
    2. מוסיפים את ההצהרות הנדרשות לייבוא של ההערות החדשות, RequestMapping ו-ResponseBody.

  2. שומרים את השינויים (Ctrl/Cmd+S) או בונים את הפרויקט.

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

  3. כדי לסיים את סשן הפיתוח הרציף, לוחצים על סמל ההפסקה.

    ‫Cloud Code מוחק את כל משאבי Kubernetes שנעשה בהם שימוש במהלך סשן הפיתוח.

פיתוח אפליקציות של מיקרו-שירותים באמצעות הגדרות skaffold.yaml

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

אתם יכולים לפתח ולנפות באגים בחלקים של האפליקציה באופן עצמאי על ידי פיצול האפליקציה למודולים. לדוגמה, Bank of Anthos הוא אפליקציה לדוגמה שמכילה עשרה מיקרו-שירותים. בקובץ skaffold.yaml של הדוגמה, השירותים האלה מקובצים לחמישה מודולים בשמות setup, ‏db, ‏frontend, ‏backend ו-loadgenerator.

הגדרת מודולים ויחסי תלות בהגדרות

כדי להגדיר מודולים ויחסי תלות בהגדרות:

  1. פותחים את הפרויקט שבו רוצים להגדיר את המודולים.

  2. פותחים את הקובץ skaffold.yaml.

  3. אם בקובץ skaffold.yaml יש כמה הגדרות, כדי להפוך הגדרה למודול, מציינים את השורה הבאה:

    metadata:
      name: MODULE_NAME_1
    

    לדוגמה, במודול db של Bank of Anthos skaffold.yaml מוגדרות פריסות של מסדי נתונים:

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. אם יש הגדרות שתלויות בהגדרות אחרות שצריך לפרוס לפני שניתן לפרוס את ההגדרה הנוכחית, צריך להוסיף את ההגדרה לתלות. כדי לציין תלות בהגדרות, מוסיפים רשימה של configs לקטע requires בקובץ skaffold.yaml.

    לדוגמה, קובץ skaffold.yaml Bank of Anthos כולל את תלות התצורה setup.

    כדי להגדיר תלות, מוסיפים את השורה הבאה לקובץ skaffold.yaml, כאשר DEPENDENCY_NAME הוא שם התלות.

    requires:
        - configs: DEPENDENCY_NAME
    

    ההגדרות שמופיעות בדרך הזו יכולות להפנות לתלות שהוגדרה באותו קובץ או בקובצי skaffold.yaml אחרים בפרויקט הנוכחי.

  5. כדי לבדוק את התלות בהגדרות, צריך ליצור כל אחד מהמודולים בנפרד כדי לוודא שהם נפרסים עם התלות שלהם. לשם כך, פועלים לפי השלבים במאמר יצירת מודולים ספציפיים והתלות שלהם.

בניית מודולים ספציפיים והתלויות שלהם

אחרי שמגדירים את המודולים ואת התלות שלהם, אפשר לציין אילו מודולים רוצים להפעיל בכרטיסייה Build / Deploy כשבוחרים באפשרות Run > Edit configurations.

  1. מתקינים את גרסאות ה-build האחרונות של Insiders.

  2. עוברים אל Run ‏ > Edit configurations ופותחים את הכרטיסייה Build / Deploy.

  3. בקטע Skaffold configuration (הגדרת Skaffold), בוחרים באפשרות skaffold.yaml.

    צריך לבחור אחת מהאפשרויות:

    • פיתוח ופריסה עם כל המודולים והתלויות
    • Build and deploy with (פיתוח ופריסה באמצעות) (אם יש מודולים זמינים) ובוחרים את המודולים שרוצים לפתח ולפרוס.

הבחירה שלכם נשמרת לפריסות הבאות. אם בוחרים קבוצת משנה של מודולים, Cloud Code מציג אזהרה לגבי פריסה של קבוצת משנה של מודולים ולא של המערכת כולה.

פיתוח רציף ב-Kubernetes

אחרי שמגדירים את יעד ההרצה עם האפשרויות הרצויות, אפשר לבחור בהרצה רגילה של האפליקציה או להתחיל מחזור איטרציה של פיתוח בסביבת הפיתוח המשולבת כדי להפיץ את השינויים שבוצעו במקור ובקובצי התלות לאפליקציה הפעילה.

יעד ההרצה Develop on Kubernetes (פיתוח ב-Kubernetes) מתחיל את מחזור הפיתוח באשכול Kubernetes. אחרי שמתחילים את מחזור הפיתוח, Cloud Code יוצר אימג' לפרויקט, מתייג אותו, מעלה אותו למאגר שהוגדר ומשתמש ב-kubectl כדי לפרוס את מניפסטים של Kubernetes בפרויקט.

  1. לוחצים על הסמל Develop on Kubernetes ואז על Edit Configurations כדי לפתוח את תיבת הדו-שיח Run/Debug Configurations.
  2. אפשר להתאים אישית את הפריסה באמצעות אפשרויות ההגדרה הזמינות.
  3. אם רוצים ש-Cloud Code יפרוס מחדש את האפליקציה באופן אוטומטי אחרי ששומרים את השינויים, בוחרים באפשרות On file save (בזמן שמירת הקובץ) בקטע Watch mode - rebuild and redeploy (מצב צפייה – בנייה מחדש ופריסה מחדש). באפליקציות חדשות של Kubernetes, האפשרות על פי דרישה מסומנת כברירת מחדל. מידע נוסף על מצבי שעון זמין במאמר מצבי שעון.
  4. אם האפליקציה שלכם מוגדרת להשתמש במודולים, אתם יכולים לבחור לבנות או לפרוס רק מודולים ספציפיים.
  5. אחרי שסיימתם לקבוע את ההגדרות, לוחצים על אישור ואז על סמל ההפעלה.

המאמרים הבאים

פנייה לתמיכה

כדי לשלוח משוב או לדווח על בעיה ב-IntelliJ IDE, עוברים אל Tools (כלים) > Cloud Code > Help / About (עזרה / מידע) > Submit feedback or report an issue (שליחת משוב או דיווח על בעיה) כדי לדווח על בעיה ב-GitHub.