בדף הזה מוסבר איך להגדיר את Cloud Build כדי לבנות, לבדוק, להכניס לקונטיינר ולפרוס אפליקציות Python.
בעזרת Cloud Build אפשר להשתמש בכל קובץ אימג' של קונטיינר שזמין לציבור כדי להריץ את משימות הפיתוח, כולל יצירת גרסת build, בדיקה, יצירת קונטיינר, העלאה ל-Artifact Registry, פריסה ושמירה של יומני ה-build. תמונת python הציבורית מ-Docker Hub מגיעה עם הכלים python ו-pip שכבר מותקנים בה. אפשר להגדיר את Cloud Build כך שישתמש בכלים האלה כדי להתקין תלות, לבנות ולהריץ בדיקות יחידה.
לפני שמתחילים
ההוראות בדף הזה מניחות שאתם מכירים את Python. בנוסף:
-
מפעילים את Cloud Build, Cloud Run, Cloud Storage ו-Artifact Registry APIs, אם אחד מהם עדיין לא מופעל.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים - כדי להריץ את הפקודות
gcloudשבדף הזה, צריך להתקין את Google Cloud CLI. - הפרויקט שלכם ב-Python צריך להיות בהישג יד, כולל הקובץ
requirements.txt. צריך להזין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.
הגדרת בנייה של Python
בקטע הזה מופיע קובץ תצורה לדוגמה של build לאפליקציית Python. בקובץ יש שלבי build להתקנת דרישות, להוספת בדיקות יחידה, ולבנייה ולפריסה של האפליקציה אחרי שהבדיקות עוברות.
בתיקיית השורש של הפרויקט, יוצרים קובץ הגדרות של Cloud Build בשם
cloudbuild.yaml.התקנת הדרישות: תמונת
pythonמ-Docker Hub מגיעה עםpipשכבר מותקן. כדי להתקין יחסי תלות מ-pip, מוסיפים שלב build עם השדות הבאים:-
name: מגדירים את הערך של השדה הזה ל-pythonכדי להשתמש בתמונת Python מ-Docker Hub למשימה הזו. -
entrypoint: הגדרת השדה הזה מבטלת את נקודת הכניסה שמוגדרת כברירת מחדל לתמונה שמצוינת ב-name. מגדירים את הערך של השדה הזה כ-pipכדי להפעיל אתpipכנקודת הכניסה של שלב הבנייה ולהריץ פקודותpip. -
args: השדהargsשל שלב בנייה מקבל רשימה של ארגומנטים ומעביר אותם לתמונה שאליה מתייחס השדהname. מעבירים את הארגומנטים כדי להריץ את הפקודהpip installבשדה הזה. הדגל--userבפקודהpip installמבטיח ששלבי ה-build הבאים יוכלו לגשת למודולים שהותקנו בשלב ה-build הזה.
בשלב הבנייה הבא מוסיפים ארגומנטים להתקנת הדרישות מקובץ
requirements.txt:-
הוספת בדיקות יחידה: אם הגדרתם בדיקות יחידה באפליקציה באמצעות מסגרת בדיקה כמו
pytest, אתם יכולים להגדיר את Cloud Build להרצת הבדיקות על ידי הוספת השדות הבאים בשלב build:-
name: מגדירים את הערך של השדה הזה ל-pythonכדי להשתמש בתמונת python מ-Docker Hub למשימה. -
entrypoint: מגדירים את הערך של השדה הזה ל-pythonכדי להריץ פקודותpython. -
args: מוסיפים את הארגומנטים להרצת הפקודהpython pytest.
בשלב הבנייה הבא, פלט היומן
pytestנשמר בקובץ JUNIT XML. השם של הקובץ הזה מורכב מהגרסה הקצרה של מזהה הקומיט שמשויך ל-build. בשלב הבא של ה-build, היומנים יישמרו בקובץ הזה ב-Cloud Storage.-
העברת האפליקציה לקונטיינר: אחרי שמוסיפים את שלב הבנייה כדי לוודא שהבדיקות עברו, אפשר לבנות את האפליקציה. Cloud Build מספק קובץ אימג' של Docker שנבנה מראש, שאפשר להשתמש בו כדי להוסיף את אפליקציית Python לקונטיינר. כדי להוסיף את האפליקציה לקונטיינר, מוסיפים את השדות הבאים בשלב הבנייה:
-
name: מגדירים את הערך של השדה הזה ל-gcr.io/cloud-builders/dockerכדי להשתמש בתמונת Docker מוכנה מראש למשימה. -
args: מוסיפים את הארגומנטים של הפקודהdocker buildכערכים בשדה הזה.
בשלב ה-build הבא נוצר קובץ האימג'
myimageוהוא מתויג בגרסה הקצרה של מזהה הקומיט. בשלב ה-build נעשה שימוש בהחלפות ברירת המחדל של מזהה הפרויקט, שם המאגר וערכי SHA קצרים, ולכן הערכים האלה מוחלפים אוטומטית בזמן ה-build.-
דחיפת הקונטיינר ל-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 Build ייצור מידע על מקורות של בנייה ברמת Supply chain Levels for Software Artifacts (SLSA), צריך לבצע את הפעולות הבאות:
- משתמשים בשדה
imagesבשלב הבנייה במקום להשתמש בשלב בנייה נפרדDocker push. - מוסיפים את
requestedVerifyOption: VERIFIEDלקטעoptionsבקובץ התצורה של ה-build.
-
פריסת הקונטיינר ב-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 לכל השלבים שמתוארים למעלה:
מתחילים את הבנייה: באופן ידני או באמצעות טריגרים של בנייה.
אחרי שהבנייה מסתיימת, אפשר לראות את פרטי המאגר ב-Artifact Registry.
המאמרים הבאים
- איך רואים את תוצאות הבנייה
- איך מאבטחים את הגרסאות
- איך יוצרים אפליקציות Python עצמאיות
- איך משתמשים בתלות פרטיות
- איך פותרים בעיות שקשורות לבנייה