בדף הזה מוסבר איך להגדיר את Cloud Build כדי לבצע build ולבדוק את אפליקציות Python, להעלות את הארטיפקטים ל-Artifact Registry, ליצור מידע על מקורות ולשמור את יומני הבדיקות ב-Cloud Storage.
באמצעות Cloud Build אפשר להשתמש בכל קובץ אימג' של קונטיינר שזמין לכולם כדי להריץ את המשימות. תמונת python הציבורית מ-Docker Hub מגיעה עם הכלים python ו-pip שכבר מותקנים בה. אפשר להגדיר את Cloud Build כך שישתמש בכלים האלה כדי להתקין תלות, לבנות ולהריץ בדיקות יחידה.
לפני שמתחילים
ההוראות בדף הזה מניחות שאתם מכירים את Python. בנוסף:
-
מפעילים את Cloud Build API, Artifact Registry API ו-Cloud Storage API, אם הם עדיין לא מופעלים.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים - כדי להריץ את הפקודות
gcloudשבדף הזה, צריך להתקין את Google Cloud CLI. - הפרויקט שלכם ב-Python צריך להיות בהישג יד.
- יש לכם מאגר Python ב-Artifact Registry. אם אין לכם מאגר, אתם יכולים ליצור מאגר חדש.
- אם רוצים לאחסן יומני בדיקה ב-Cloud Storage, צריך ליצור קטגוריה ב-Cloud Storage.
הרשאות IAM נדרשות
כדי לאחסן יומני בדיקה ב-Logging, צריך להקצות לחשבון השירות של ה-Build את התפקיד יצירת אובייקטים של אחסון (
roles/storage.objectCreator) בקטגוריה של Cloud Storage.כדי לאחסן אימג'ים שנוצרו ב-Artifact Registry, צריך להעניק לחשבון השירות של שירות ה-Build את התפקיד Artifact Registry Writer (
roles/artifactregistry.writer).
הוראות להקצאת התפקידים האלה מופיעות במאמר הקצאת תפקיד באמצעות הדף IAM.
הגדרת בנייה של Python
בקטע הזה מופיע קובץ הגדרות לדוגמה לבנייה של אפליקציית Python. בקובץ יש שלבי בנייה לניהול דרישות ההתקנה, להוספת בדיקות יחידה, ולבנייה ולפריסה של האפליקציה אחרי שהבדיקות עוברות.
בתיקיית השורש של הפרויקט, יוצרים קובץ הגדרות של Cloud Build בשם
cloudbuild.yaml.התקנת הדרישות: תמונת
pythonמ-Docker Hub מגיעה עםpipשכבר מותקן. כדי להתקין יחסי תלות מ-pip, מוסיפים שלב build עם השדות הבאים:-
name: מגדירים את הערך של השדה הזה ל-pythonאו ל-python:<tag>כדי להשתמש בתמונת Python מ-Docker Hub למשימה הזו. כדי לראות רשימה של תגים זמינים לתמונות אחרות של Python, אפשר לעיין בהפניה ל-Docker Hub לתמונת Python. -
entrypoint: הגדרת השדה הזה מבטלת את ברירת המחדל של נקודת הכניסה של התמונה שאליה יש הפניה ב-name. מגדירים את הערך של השדה הזה כ-pipכדי להפעיל אתpipכנקודת הכניסה של שלב הבנייה ולהריץ פקודותpip. -
args: השדהargsשל שלב בנייה מקבל רשימה של ארגומנטים ומעביר אותם לתמונה שאליה מתייחס השדהname. מעבירים את הארגומנטים כדי להריץ את הפקודהpip installבשדה הזה. הדגל--userבפקודהpip installמבטיח ששלבי ה-build הבאים יוכלו לגשת למודולים שהותקנו בשלב ה-build הזה.
שלב הבנייה הבא מוסיף ארגומנטים להתקנת הדרישות:
steps: - name: 'python' entrypoint: 'python' args: ['-m', 'pip', 'install', '--upgrade', 'pip'] - name: python entrypoint: python args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']-
הוספת בדיקות יחידה: אם הגדרתם בדיקות יחידה באפליקציה באמצעות מסגרת בדיקה כמו
pytest, אתם יכולים להגדיר את Cloud Build להרצת הבדיקות על ידי הוספת השדות הבאים בשלב build:-
name: מגדירים את הערך של השדה הזה ל-pythonכדי להשתמש בתמונת python מ-Docker Hub למשימה. -
entrypoint: מגדירים את הערך של השדה הזה ל-pythonכדי להריץ פקודותpython. -
args: מוסיפים את הארגומנטים להרצת הפקודהpython pytest.
בשלב הבנייה הבא, פלט היומן
pytestנשמר בקובץ JUNIT XML. השם של הקובץ הזה מורכב מ-$SHORT_SHA, הגרסה הקצרה של מזהה הקומיט שמשויך ל-build שלכם. בשלב הבא של ה-build, היומנים יישמרו בקובץ הזה ב-Cloud Storage.- name: 'python' entrypoint: 'python' args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']-
Build: בקובץ התצורה של ה-build, מגדירים את ה-builder ואת
argsכדי לבצע build של האפליקציה:-
name: מגדירים את הערך של השדה הזה ל-pythonכדי להשתמש בתמונת python מ-Docker Hub למשימה. -
entrypoint: מגדירים את הערך של השדה הזה ל-pythonכדי להריץ פקודותpython. -
args: מוסיפים את הארגומנטים להרצת ה-build.
שלב הבנייה הבא מתחיל את הבנייה:
- name: 'python' entrypoint: 'python' args: ['-m', 'build']-
העלאה אל Artifact Registry:
בקובץ ההגדרות, מוסיפים את השדה
pythonPackagesומציינים את מאגר Python ב-Artifact Registry:artifacts: pythonPackages: - repository: 'https://LOCATION-python.pkg.dev/PROJECT-ID/REPOSITORY' paths: ['dist/*']מחליפים את הערכים הבאים:
- PROJECT-ID הוא המזהה של Google Cloud הפרויקט שמכיל את המאגר שלכם ב-Artifact Registry.
- REPOSITORY הוא המזהה של המאגר.
- LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
אופציונלי: הפעלת יצירת מקורות
Cloud Build יכול ליצור מטא-נתונים של מקורות build שניתנים לאימות של Supply chain Levels for Software Artifacts (SLSA) כדי לעזור לכם לאבטח את צינור השילוב הרציף שלכם.
כדי להפעיל את יצירת המקור, מוסיפים את
requestedVerifyOption: VERIFIEDלקטעoptionsבקובץ ההגדרות.שמירת יומני בדיקה ב-Cloud Storage: אתם יכולים להגדיר את Cloud Build לאחסון יומני בדיקה ב-Cloud Storage על ידי ציון מיקום של קטגוריה קיימת ונתיב ליומני הבדיקה. שלב ה-build הבא שומר את יומני הבדיקה ששמרתם בקובץ JUNIT XML בקטגוריה של Cloud Storage:
artifacts: objects: location: 'gs://${_BUCKET_NAME}/' paths: - '${SHORT_SHA}_test_log.xml'מתחילים את הבנייה: באופן ידני או באמצעות טריגרים של בנייה.
אחרי שהבנייה מסתיימת, אפשר לראות את פרטי המאגר ב-Artifact Registry.
המאמרים הבאים
- איך רואים את תוצאות הבנייה
- איך מאבטחים את הגרסאות
- איך יוצרים אפליקציות Python ומכניסים אותן לקונטיינרים
- איך משתמשים בתלות פרטיות
- איך מבצעים פריסות כחולות/ירוקות ב-Compute Engine
- איך פותרים בעיות שקשורות לבנייה