בדף הזה מוסבר איך להשתמש ב-Cloud Build כדי ליצור, לבדוק, להכניס לקונטיינר ולפרוס אפליקציות Go, ואיך לשמור את יומני הבדיקה ב-Cloud Storage.
לפני שמתחילים
ההוראות בדף הזה מניחות שאתם מכירים את Go. בנוסף:
-
מפעילים את Cloud Build API, Cloud Run API ו-Artifact Registry API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים - כדי להריץ את הפקודות
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 (
roles/artifactregistry.writer).
הוראות להקצאת התפקידים האלה מופיעות במאמר הקצאת תפקיד באמצעות הדף IAM.
הגדרת קובצי build של Go
קובץ האימג' הציבורי golang מ-Docker Hub תומך ביצירה באמצעות מודולים של Go.
אם משתמשים בקובץ האימג' הזה כשלב build בקובץ ההגדרות של Cloud Build, אפשר להפעיל פקודות go בתוך קובץ האימג'. הארגומנטים שמועברים לשלב הבנייה הזה מועברים ישירות לכלי golang, כך שאפשר להריץ כל פקודה של golang בתמונה הזו.go
בקטע הזה מוסבר על קובץ תצורה לדוגמה של אפליקציית Go. בקובץ יש שלבי בנייה של האפליקציה, הוספה של בדיקות יחידה, ואחרי שהבדיקות עוברות, יצירת קונטיינר ופריסה של האפליקציה.
כדי ליצור את אפליקציית Go:
בתיקיית השורש של הפרויקט, יוצרים קובץ הגדרות של Cloud Build בשם
cloudbuild.yaml.Build ובדיקה: אם הגדרתם בדיקות יחידה באפליקציה, אתם יכולים להגדיר את Cloud Build להפעלת הבדיקות על ידי הוספת השדות הבאים לשלב build:
-
name: מגדירים את הערך של השדה הזה ל-golangכדי להשתמש בתמונה של golang מ-Docker Hub למשימה. -
entrypoint: מגדירים את הערך של השדה הזה ל-/bin/bash. כך תוכלו להריץ פקודות bash מרובות שורות ישירות משלב הבנייה.
args: השדהargsשל שלב בנייה מקבל רשימה של ארגומנטים ומעביר אותם לתמונה שאליה יש הפניה בשדהname. בדוגמה הבאה, השדהargsמקבל את הארגומנטים של:- מריצים את הכלי לעיצוב יומן הבדיקה כדי להוריד את הפלט של יומן הבדיקה.
- הדפסת הפלט של היומן.
- תוצאות הבדיקה נשמרות ב-
sponge.log. - התוצאות מועברות בפורמט
sponge.logלקובץ XML של JUNIT. השם של קובץ ה-XML של JUNIT מורכב מהגרסה הקצרה של מזהה הקומיט שמשויך ל-build. בשלב הבא של ה-build, היומנים יישמרו בקובץ הזה ב-Cloud Storage.
-
הוספת האפליקציה לקונטיינר: אחרי שמוסיפים את שלב ה-build כדי לוודא שהבדיקות עברו בהצלחה, אפשר לבצע build של האפליקציה. 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, צריך לציין את השם של מאגר Artifact Registry בשדה משתני החלפה כשיוצרים את הטריגר לפיתוח גרסאות build.
המאמרים הבאים
- איך מבצעים פריסות כחולות-ירוקות ב-Compute Engine
- איך יוצרים תמונות של קונטיינרים
- איך פותרים בעיות שקשורות לבנייה