בדף הזה מוסבר איך להשתמש ב-Cloud Build כדי ליצור ולבדוק את אפליקציות Go, להעלות את הארטיפקטים ל-Artifact Registry, ליצור מידע על מקורות ולשמור את יומני הבדיקות ב-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 ב-Artifact Registry. אם אין לכם מאגר, אתם יכולים ליצור מאגר חדש.
- אם רוצים לאחסן יומני בדיקה ב-Cloud Storage, או אם רוצים להשתמש ב-CLI של gcloud כדי להתחיל את ה-build, צריך ליצור קטגוריה ב-Cloud Storage.
- חשוב לוודא שיש לכם את המזהה של חשבון השירות של זמן הריצה בשביל Cloud Run.
יצירת חשבון שירות מותאם אישית ב-Cloud Build
כדי ליצור חשבון שירות מותאם אישית של Cloud Build, מריצים את הפקודה הבאה ב-CLI של Google Cloud:
gcloud iam service-accounts create cloud-build-go \
--description="Build and test Go applications" \
--display-name="Cloud Build Go" \
--project="PROJECT_ID"
מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud . אם לא מציינים את הדגל, המערכת מניחה שמדובר בפרויקט הנוכחי.
תשתמשו בחשבון השירות הזה כדי ליצור ולבדוק את אפליקציית Go שלכם.
הגדרת הרשאות IAM
כדי להגדיר את חשבון השירות החדש עם ההרשאות שנדרשות לבנייה ולפריסה של אפליקציות Go, מבצעים את הפעולות הבאות:
-
במסוף Google Cloud , נכנסים לדף settings Cloud Build Permissions:
עוברים לתפריט Service account ובוחרים את חשבון השירות של
cloud-build-go.מגדירים את הסטטוס של התפקידים הבאים למופעל:
- Cloud Run Admin (
roles/run.admin): מאפשר ל-Cloud Build לפרוס שירותים חדשים ב-Cloud Run.- בחלונית Assign Service Account User Role (הקצאת תפקיד משתמש בחשבון שירות), בוחרים את חשבון השירות של זמן הריצה ולוחצים על Grant Permission (מתן הרשאה). ההגדרה הזו מאפשרת לחשבון השירות המותאם אישית של Cloud Build להתחזות לחשבון השירות של זמן הריצה כשמתבצעת אינטראקציה עם השירות המנוהל של Cloud Run. מידע נוסף זמין במאמר הגדרת התחזות לחשבון שירות של Cloud Build בשביל שירותים מנוהלים.
- אדמין לניהול נפח האחסון (
roles/storage.admin): מאפשר קריאה וכתיבה מ-Cloud Storage. - הרשאת כתיבה ב-Artifact Registry (
roles/artifactregistry.writer): מאפשרת שליפת תמונות מ-Artifact Registry וכתיבה ב-Artifact Registry. - כותב יומנים (
roles/logging.logWriter): מאפשר לכתוב רשומות ביומן ב-Cloud Logging. - עריכה ב-Cloud Build (
roles/cloudbuild.builds.editor): מאפשרת לחשבון השירות להריץ בנייה.
- Cloud Run Admin (
הגדרת קובצי build של Go
קובץ האימג' הציבורי golang מ-Docker Hub תומך ביצירה באמצעות מודולים של Go.
אם משתמשים בקובץ האימג' הזה כשלב build בקובץ ההגדרות של Cloud Build, אפשר להפעיל פקודות go בתוך קובץ האימג'. הארגומנטים שמועברים לשלב הבנייה הזה מועברים ישירות לכלי golang, כך שאפשר להריץ כל פקודה של golang בתמונה הזו.go
בקטע הזה נסביר איך ליצור קובץ תצורת build לדוגמה לאפליקציית Go ממאגר ה-Git cloud-build-samples. קובץ התצורה של ה-build כולל שלבים ליצירת האפליקציה, להוספת בדיקות יחידה, ולאחר שהבדיקות עוברות, לפריסת האפליקציה.
כדי ליצור את אפליקציית Go לדוגמה:
הגדרת בדיקות יחידה: אם הגדרתם בדיקות יחידה באפליקציה, אתם יכולים להגדיר את Cloud 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.steps: # Run tests and save to file - name: golang:1.23 entrypoint: /bin/bash args: - -c - | go install github.com/jstemmer/go-junit-report/v2@latest 2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
-
העלאה אל Artifact Registry: בקובץ ההגדרות, משתמשים בשדה
goModulesכדי לציין את הנתיב של האפליקציה ואת מאגר Go ב-Artifact Registry:# Upload Go module to artifact registry artifacts: goModules: - repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProjectId: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'מחליפים את הערכים הבאים:
- repositoryName: השם של מאגר Go ב-Artifact Registry.
- location: המיקום של המאגר ב-Artifact Registry.
- projectId: מזהה Google Cloud הפרויקט שמכיל את מאגר Artifact Registry.
- sourcePath: הנתיב לקובץ
go.modבסביבת העבודה של ה-build. - appPath: הנתיב לאפליקציה הארוזה.
- version: מספר הגרסה של האפליקציה, בפורמט של מספרים ונקודות כמו
v1.0.1.
אופציונלי: הפעלת יצירת שיוך מקור
Cloud Build יכול ליצור מטא נתונים של מקורות build שניתנים לאימות של Supply chain Levels for Software Artifacts (SLSA) כדי לעזור לכם לאבטח את צינור השילוב הרציף שלכם.
כדי להפעיל את יצירת המקור, מוסיפים את השורה
requestedVerifyOption: VERIFIEDלקטעoptionsבקובץ ההגדרות.אחרי שהבנייה מסתיימת, אפשר לראות את פרטי המאגר ב-Artifact Registry.
אפשר גם לראות את המטא-נתונים של מקור ה-build ולאמת את המקור.
שמירת יומני בדיקה ב-Cloud Storage: אפשר להגדיר את Cloud Build כך שיאחסן יומני בדיקה ב-Cloud Storage. לשם כך צריך לציין מיקום של קטגוריה קיימת ונתיב ליומני הבדיקה.
שלב ה-build הבא שומר את יומני הבדיקה ששמרתם בקובץ JUNIT XML בקטגוריה של Cloud Storage:
# Save test logs to Google Cloud Storage artifacts: objects: location: gs://$_BUCKET_NAME/ paths: - ${SHORT_SHA}_test_log.xmlבקטע הקוד הבא מוצג קובץ התצורה המלא של ה-build עבור השלבים הקודמים:
steps: # Run tests and save to file - name: golang:1.23 entrypoint: /bin/bash args: - -c - | go install github.com/jstemmer/go-junit-report/v2@latest 2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml # Store golang modules in Google Artifact Registry artifacts: goModules: - repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProjectId: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'מתחילים את הבנייה באמצעות ה-CLI של gcloud או יוצרים טריגר לפיתוח גרסת Build:
gcloud
מריצים את הפקודה הבאה, ומשתמשים ב-
--substitutionsכדי לציין את משתני ההחלפה שמשמשים ב-cloudbuild.yaml:gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \ --default-buckets-behavior=REGIONAL_USER_OWNED_BUCKET \ --service-account=projects/PROJECT_ID/serviceAccounts/cloud-build-go@PROJECT_ID.iam.gserviceaccount.com \ --substitutions=_AR_REPO_NAME="_AR_REPO_NAME",_BUCKET_NAME="_BUCKET_NAME",SHORT_SHA="SHORT_SHA"מחליפים את מה שכתוב בשדות הבאים:
_AR_REPO_NAME: השם של מאגר Artifact Registry.
_BUCKET_NAME: השם של קטגוריית Cloud Storage ליומני בדיקה.
SHORT_SHA: מחרוזת טקסט קצרה וכללית, כמו 'manual'. הערכים שלSHORT_SHAמאוכלסים באופן אוטומטי בגרסאות build שמופעלות על ידי טריגרים, אבל לא מסופקים כששולחים גרסת build באמצעות ה-CLI של gcloud.
טריגרים לפיתוח גרסת Build
פועלים לפי השלבים במאמר יצירת טריגר לפיתוח גרסת Build. בשדה Substitution variables, צריך גם לציין את השם של מאגר Artifact Registry ואת השם של הקטגוריה ב-Cloud Storage ליומני בדיקה.