בדף הזה מוסבר איך להשתמש ב-Cloud Build כדי ליצור, לבדוק ולהכניס לקונטיינר אפליקציות מבוססות Java, להעלות את קובצי האימג' של הקונטיינרים ל-Artifact Registry וליצור אישור המקור של Build.
לפני שמתחילים
- להכיר את התהליך של יצירת אפליקציות מבוססות Java.
- הפרויקט שלכם ב-Java צריך להיות מוכן, כולל
Dockerfile. - יש לכם מאגר Docker ב-Artifact Registry, או שאתם יכולים ליצור מאגר חדש.
- להכיר את האופן שבו כותבים קובץ תצורת build של Cloud Build.
- כדי להריץ את הפקודות
gcloudשבדף הזה, צריך להתקין את Google Cloud CLI.
שימוש בתמונה 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
בתיקיית השורש של הפרויקט, יוצרים קובץ הגדרות build בשם
cloudbuild.yaml.הרצת בדיקות: הפקודות
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']חבילת אפליקציה: כדי לארוז את האפליקציה בקובץ 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']העברת האפליקציה לקונטיינר: 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 שנוצר משלב הבנייה.
- מוסיפים שדה
מתחילים את ה-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 ולאמת את המקור.
- config-file-path: הנתיב לקובץ הגדרות ה-build. בדוגמה הזו, קובץ הגדרות ה-build נקרא
דוגמאות לקוד
ריכזנו כאן כמה מאגרי דוגמאות שאפשר להשתמש בהם כדי ליצור אפליקציות Java. כל אחד מהם מכיל אפליקציה לדוגמה וקובץ הגדרות build ליצירה ולבדיקה של האפליקציה:
- maven-example: אפליקציית Java וקובץ תצורת build לדוגמה לבנייה ולבדיקה של האפליקציה באמצעות
mvn. - gradle-example: אפליקציית Java וקובץ לדוגמה של הגדרת build, כדי לבצע build ובדיקה של האפליקציה באמצעות
gradle.
המאמרים הבאים
- איך צופים בתוצאות של בניית האפליקציה
- איך מאבטחים את הגרסאות
- איך יוצרים אפליקציות Java עצמאיות
- איך פורסים אפליקציה ב-Cloud Run
- איך פורסים אפליקציה ב-GKE
- איך פותרים בעיות שקשורות לבנייה