בדף הזה מוסבר איך להשתמש ב-Cloud Build כדי ליצור, לבדוק, להכניס לקונטיינר ולפרוס אפליקציות Go, ואיך לשמור את יומני הבדיקה ב-Cloud Storage.
לפני שמתחילים
ההוראות בדף הזה מניחות שאתם מכירים את Go. בנוסף:
-
מפעילים את Cloud Build, Cloud Run ו-Artifact Registry APIs, אם הם עדיין לא מופעלים.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים - כדי להריץ את הפקודות
gcloudשבדף הזה, צריך להתקין את Google Cloud CLI. - הפרויקט שלכם ב-Go צריך להיות בהישג יד.
- אם רוצים להפוך את אפליקציית Go לקונטיינר באמצעות Cloud Build, צריך
Dockerfileוגם את קוד המקור. - אם רוצים לאחסן את הקונטיינר שנבנה ב-Artifact Registry, צריך ליצור מאגר Docker ב-Artifact Registry.
- אם רוצים לאחסן יומני בדיקה ב-Cloud Storage, צריך ליצור קטגוריה ב-Cloud Storage.
הרשאות IAM נדרשות
כדי לאחסן יומני בדיקה ב-Logging, צריך להקצות לחשבון השירות של ה-Build את התפקיד יצירת אובייקטים של אחסון (
roles/storage.objectCreator) בקטגוריה של Cloud Storage.כדי לאחסן אימג'ים שנבנו ב-Artifact Registry, צריך להעניק לחשבון השירות של שירות ה-Build את התפקיד Artifact Registry Writer (כותב ב-Artifact Registry) (
roles/artifactregistry.writer).
הוראות להקצאת התפקידים האלה מופיעות במאמר הקצאת תפקיד באמצעות הדף IAM.
הגדרת קומפילציות של Go
קובץ האימג' הציבורי golang מ-Docker Hub תומך ביצירה באמצעות מודולי Go.
אם משתמשים בקובץ האימג' הזה כשלב build בקובץ ההגדרות של Cloud Build, אפשר להפעיל פקודות go בתוך קובץ האימג'. הארגומנטים שמועברים לשלב הבנייה הזה מועברים ישירות לכלי golang, כך שאפשר להריץ כל פקודה של go בתמונה הזו.
בקטע הזה מוסבר על קובץ הגדרות לדוגמה של אפליקציית Go. בקובץ יש שלבי בנייה של האפליקציה, הוספה של בדיקות יחידה, ואחרי שהבדיקות עוברות, יצירת קונטיינר ופריסה של האפליקציה.
כדי לפתח את אפליקציית Go:
בתיקיית השורש של הפרויקט, יוצרים קובץ הגדרות של Cloud Build בשם
cloudbuild.yaml.Build and test: אם הגדרתם בדיקות יחידה באפליקציה, אתם יכולים להגדיר את Cloud Build להפעלת הבדיקות על ידי הוספת השדות הבאים בשלב build:
-
name: מגדירים את הערך של השדה הזה ל-golangכדי להשתמש בתמונת golang מ-Docker Hub למשימה. -
entrypoint: מגדירים את הערך של השדה הזה ל-/bin/bash. כך אפשר להריץ פקודות bash מרובות שורות ישירות משלב ה-build.
args: השדהargsשל שלב בנייה מקבל רשימה של ארגומנטים ומעביר אותם לתמונה שאליה מתייחס השדהname. בדוגמה הבאה, השדהargsמקבל את הארגומנטים של:- מריצים את הכלי לעיצוב יומן הבדיקה כדי להוריד את הפלט של יומן הבדיקה.
- הדפסת פלט היומן.
- תוצאות הבדיקה נשמרות ב-
sponge.log. - התוצאות מועברות בפורמט
sponge.logלקובץ XML של JUNIT. השם של קובץ ה-XML של JUNIT מורכב מהגרסה הקצרה של מזהה הקומיט שמשויך ל-build. בשלב הבא של ה-build, היומנים יישמרו בקובץ הזה ב-Cloud Storage.
-
העברת האפליקציה לקונטיינר: אחרי שמוסיפים את שלב הבנייה כדי לוודא שהבדיקות עברו, אפשר לבנות את האפליקציה. Cloud Build מספק קובץ אימג' של Docker שנבנה מראש שאפשר להשתמש בו כדי להכניס את אפליקציית Go שלכם לקונטיינר. כדי להוסיף את האפליקציה לקונטיינר, מוסיפים את השדות הבאים בשלב הבנייה:
-
name: מגדירים את הערך של השדה הזה ל-gcr.io/cloud-builders/dockerכדי להשתמש בתמונת Docker מוכנה מראש למשימה. -
args: מוסיפים את הארגומנטים של הפקודהdocker buildכערכים בשדה הזה.
בשלב ה-build הבא נוצר קובץ האימג'
myimageוהוא מתויג בגרסה הקצרה של מזהה הקומיט. בשלב הבנייה נעשה שימוש בהחלפות של מזהה הפרויקט, שם המאגר וערכי SHA קצרים, ולכן הערכים האלה מוחלפים אוטומטית בזמן הבנייה. שימו לב: כדי לאחסן את התמונה, תצטרכו ליצור מאגר Docker ב-Artifact Registry או להשתמש במאגר קיים.-
דחיפת הקונטיינר ל-Artifact Registry: אפשר לאחסן את הקונטיינר שנבנה ב-Artifact Registry, שהוא Google Cloud שירות שמאפשר לאחסן, לנהל ולאבטח ארטיפקטים של גרסאות build. כדי לעשות את זה, צריך שיהיה לכם מאגר Docker קיים ב-Artifact Registry. כדי להגדיר את Cloud Build לאחסון התמונה במאגר Docker ב-Artifact Registry, מוסיפים שלב build עם השדות הבאים:
-
name: מגדירים את הערך של השדה הזה ל-gcr.io/cloud-builders/dockerכדי להשתמש בתמונה הרשמית שלdockerלבנייה של המשימה. -
args: מוסיפים את הארגומנטים של הפקודהdocker pushכערכים בשדה הזה. בכתובת היעד, מזינים את מאגר Docker ב-Artifact Registry שבו רוצים לאחסן את האימג'.
שלב ה-build הבא מעביר את קובץ האימג' שיצרתם בשלב הקודם אל Artifact Registry:
-
פריסת הקונטיינר ב-Cloud Run: כדי לפרוס את האימג' ב-Cloud Run, מוסיפים שלב בנייה עם השדות הבאים:
-
name: מגדירים את הערך של השדה הזה ל-google/cloud-sdkכדי להשתמש בתמונה של ה-CLI של gcloud להפעלת הפקודהgcloudלפריסת התמונה ב-Cloud Run. -
args: מוסיפים את הארגומנטים של הפקודהgcloud run deployכערכים בשדה הזה.
שלב ה-build הבא פורס את האימג' שנוצר קודם ב-Cloud Run:
-
שמירת יומני בדיקה ב-Cloud Storage: אתם יכולים להגדיר את Cloud Build לאחסון יומני בדיקה ב-Cloud Storage על ידי ציון מיקום של קטגוריה קיימת ונתיב ליומני הבדיקה.
שלב ה-build הבא שומר את יומני הבדיקה ששמרתם בקובץ JUNIT XML בקטגוריה של Cloud Storage:
בקטע הקוד הבא מוצג קובץ התצורה המלא של ה-build עבור השלבים הקודמים:
מתחילים את הבנייה באמצעות ה-CLI של gcloud או טריגרים של בנייה. כשמתחילים את הבנייה, צריך לציין את שם המאגר של Artifact Registry.
כדי לציין את מאגר Artifact Registry כשמתחילים את ה-build באמצעות ה-CLI של gcloud:
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \ --substitutions=_AR_REPO_NAME="AR_REPO_NAME"מחליפים את
AR_REPO_NAMEבשם המאגר שלכם ב-Artifact Registry.כדי לציין את מאגר Artifact Registry כשמבצעים build באמצעות טריגרים לפיתוח גרסת Build, צריך לציין את השם של מאגר Artifact Registry בשדה משתני החלפה כשיוצרים את הטריגר לפיתוח גרסת Build.
המאמרים הבאים
- איך מבצעים פריסות blue-green ב-Compute Engine
- איך יוצרים תמונות של קונטיינרים
- איך פותרים בעיות שקשורות לבנייה