פיתוח, בדיקה והעברה לקונטיינר של אפליקציות Java

בדף הזה מוסבר איך להשתמש ב-Cloud Build כדי ליצור, לבדוק ולהכניס לקונטיינר אפליקציות מבוססות Java, להעלות את קובצי האימג' של הקונטיינרים ל-Artifact Registry וליצור אישור המקור של Build.

לפני שמתחילים

שימוש בתמונה maven או gradle

אתם יכולים להגדיר את Cloud Build ליצירת אפליקציות Java באמצעות קובץ האימג' maven או קובץ האימג' gradle מ-Docker Hub.

maven

כדי להריץ את המשימות בתמונה maven, מוסיפים שלב להגדרות ה-build עם השדות הבאים:

  • name: מגדירים את הערך של השדה הזה ל-maven או ל-maven:<tag>, כאשר התג מייצג את הגרסה. אם לא מציינים את תג האימג', Cloud Build משתמש באימג' latest כברירת מחדל.
  • entrypoint: הגדרת השדה הזה מבטלת את נקודת הכניסה שמוגדרת כברירת מחדל לתמונה שמפנים אליה בשדה name. מגדירים את הערך של השדה הזה ל-mvn כדי להפעיל את mvn כנקודת הכניסה של שלב ה-build ולהריץ פקודות mvn.
  • args: השדה args של שלב בנייה מקבל רשימה של ארגומנטים ומעביר אותם לתמונה שאליה יש הפניה בשדה name.

בשלב ה-build הבא מצוין entrypoint לתמונה maven שתויגה כ-3.3-jdk-8, והוא מדפיס את הגרסה של כלי ה-build:

steps:
- name: maven:3.3-jdk-8
  entrypoint: mvn
  args: ['--version']

gradle

כדי להריץ את המשימות בתמונה gradle, מוסיפים שלב להגדרות ה-build עם השדות הבאים:

  • name: מגדירים את הערך של השדה הזה ל-gradle או ל-gradle:<tag>, כאשר התג מייצג את הגרסה. אם לא מציינים את תג האימג', Cloud Build משתמש באימג' latest כברירת מחדל.
  • entrypoint: הגדרת השדה הזה מבטלת את נקודת הכניסה שמוגדרת כברירת מחדל לתמונה שמפנים אליה בשדה name. מגדירים את הערך של השדה הזה ל-gradle כדי להפעיל את gradle כנקודת הכניסה של שלב ה-build ולהריץ פקודות gradle.
  • args: השדה args של שלב בנייה מקבל רשימה של ארגומנטים ומעביר אותם לתמונה שאליה יש הפניה בשדה name.

בשלב ה-build הבא מצוין entrypoint לתמונה gradle שתויגה כ-5.6.2-jdk8, והוא מדפיס את הגרסה של כלי ה-build:

steps:
- name: gradle:5.6.2-jdk8
  entrypoint: gradle
  args: ['--version']

הגדרת בנייה של Java

  1. בתיקיית השורש של הפרויקט, יוצרים קובץ הגדרות build בשם cloudbuild.yaml.

  2. הרצת בדיקות: הפקודות maven ו-gradle מספקות את maven test ו-gradle test, שמורידות תלויות, יוצרות את האפליקציות ומריצות את כל הבדיקות שצוינו בקוד המקור. השדה args של שלב build מקבל רשימה של ארגומנטים ומעביר אותם לתמונה שאליה מתייחס השדה name.

    בקובץ התצורה של ה-build, מוסיפים את test לשדה args כדי להפעיל את test בתוך maven ו-gradle:

    maven

    steps:
    - name: maven:3.3-jdk-8
      entrypoint: mvn
      args: ['test']
    

    gradle

    steps:
    - name: gradle:5.6.2-jdk8
      entrypoint: gradle
      args: ['test']
    
  3. חבילת אפליקציה: כדי לארוז את האפליקציה בקובץ JAR לתמונה maven, מציינים את הפקודה package בשדה args. הפקודה package יוצרת קובץ JAR ב-/workspace/target/.

    כדי לארוז את האפליקציה בקובץ JAR לתמונה gradle, מציינים את הפקודה assemble בשדה args. הפקודה assemble יוצרת קובץ JAR ב-workspace/build/libs.

    שלב הבנייה הבא יוצר חבילה של אפליקציית Java:

    maven

    steps:
    - name: maven:3.3-jdk-8
      entrypoint: mvn
      args: ['package','-Dmaven.test.skip=true']
    

    gradle

    steps:
    - name: gradle:5.6.2-jdk8
      entrypoint: gradle
      args: ['assemble']
    
  4. העברת האפליקציה לקונטיינר: Cloud Build מספק קובץ אימג' של Docker שנוצר מראש שאפשר להשתמש בו כדי להעביר את אפליקציית Java לקונטיינר. כדי להוסיף את אפליקציית Java שלכם לקונטיינר, בקובץ הגדרות ה-build:

    • מוסיפים שדה name ומציינים את קובץ האימג' של Docker המוכנה מראש בכתובת gcr.io/cloud-builders/docker.
    • מוסיפים שדה args ומציינים את הארגומנטים build, כולל השם של קובץ אימג' של קונטיינר שרוצים ליצור ואת הנתיב לארטיפקט של ה-build.
    • מוסיפים שדה images כדי להעביר בדחיפה את קובץ האימג' של הקונטיינר שנבנה אל Artifact Registry.
    • אופציונלי: מוסיפים את requestedVerifyOption: VERIFIED לשדה options בקובץ הגדרות ה-build כדי להפעיל את יצירת המקורות של Supply chain Levels for Software Artifacts (SLSA).

    בשלב הבא של ה-build, האפליקציה מועברת לקונטיינר, קובץ האימג' של הקונטיינר נדחף אל Artifact Registry ונוצר מידע על אישור המקור של ה-build:

    maven

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=target/build-artifact', '.']
    images: ['location-docker.pkg.dev/project-id/repository/image']
    

    gradle

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=build/libs/build-artifact', '.']
    images: ['location-docker.pkg.dev/project-id/repository/image']
    

    כאשר:

    • location: המיקום האזורי או הרב-אזורי של המאגר.
    • project-id: מזהה הפרויקט ב- Google Cloud .
    • repository: השם של מאגר Artifact Registry.
    • image: השם של קובץ האימג' בקונטיינר.
    • build-artifact: השם של קובץ ה-JAR שנוצר משלב הבנייה.
  5. מתחילים את ה-build: כשקובץ ההגדרות של ה-build מוכן, מתחילים את ה-build על ידי הזנת הפקודה הבאה במסוף:

    gcloud builds submit --region=REGION --config config-file-path source-directory
    

    כאשר:

    • config-file-path: הנתיב לקובץ הגדרות ה-build. בדוגמה הזו, קובץ הגדרות ה-build נקרא cloudbuild.yaml.
    • source-directory: הנתיב או כתובת ה-URL של קוד המקור.
    • REGION: אחד מאזורי הבנייה הנתמכים.

    אם לא מציינים את config-file-path ואת source-directory בפקודה gcloud builds submit, מערכת Cloud Build מניחה שקובץ ההגדרות וקוד המקור נמצאים בספריית העבודה הנוכחית.

    אחרי שהבנייה מסתיימת, אפשר לראות את פרטי המאגר ב-Artifact Registry.

    אפשר גם לראות את המטא-נתונים של מקור ה-build ולאמת את המקור.

דוגמאות לקוד

ריכזנו כאן כמה מאגרי דוגמאות שאפשר להשתמש בהם כדי ליצור אפליקציות Java. כל אחד מהם מכיל אפליקציה לדוגמה וקובץ הגדרות build ליצירה ולבדיקה של האפליקציה:

  • maven-example: אפליקציית Java וקובץ תצורת build לדוגמה לבנייה ולבדיקה של האפליקציה באמצעות mvn.
  • gradle-example: אפליקציית Java וקובץ לדוגמה של הגדרת build, כדי לבצע build ובדיקה של האפליקציה באמצעות gradle.

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