פריסה ב-Cloud Run באמצעות Cloud Build

בדף הזה מוסבר איך לפרוס באופן אוטומטי שירותי Cloud Run באמצעות Cloud Build. אם אתם חדשים ב-Cloud Build, כדאי לקרוא קודם את המדריכים לתחילת העבודה ואת סקירת ההגדרות של תהליך הבנייה.

‫Cloud Run מאפשר להריץ אימג'ים ללא שמירת מצב בסביבה ללא שרתים. באמצעות Cloud Build, אפשר לפרוס קובצי אימג' מ-Artifact Registry ב-Cloud Run. אתם יכולים לפרוס תמונה קיימת, ליצור ולפרוס תמונה או להפוך את הפריסה לאוטומטית.

לפני שמתחילים

  • מפעילים את Cloud Build API,‏ Cloud Run API,‏ Artifact Registry API ו-Resource Manager API (מנהל המשאבים), אם אחד מהם עדיין לא מופעל.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    הפעלת ממשקי ה-API

הרשאות נדרשות לניהול זהויות והרשאות גישה (IAM)

  1. במסוף Google Cloud , נכנסים לדף Cloud Build Permissions:

    עוברים אל הרשאות

  2. בחשבון השירות שצוין ב-Cloud Build או בחשבון השירות שמוגדר כברירת מחדל ב-Cloud Build, מגדירים את הסטטוס של התפקידים הבאים למופעל:

    • Cloud Run Admin‏ (roles/run.admin) | מאפשר ל-Cloud Build לפרוס שירותים חדשים ב-Cloud Run.
    • אדמין לניהול נפח האחסון (roles/storage.admin) | מאפשר קריאה וכתיבה מ-Cloud Storage.
    • Artifact Registry Writer (roles/artifactregistry.writer) | מאפשר שליפת תמונות מ-Artifact Registry וכתיבה ב-Artifact Registry.
    • כותב יומנים (roles/logging.logWriter) | מאפשר לכתוב רשומות ביומן ב-Cloud Logging.
    • עריכה ב-Cloud Build‏ (roles/cloudbuild.builds.editor) | מאפשר לחשבון השירות להריץ בנייה.

פיתוח ופריסה של תמונה

בעזרת Cloud Build אפשר ליצור קובץ אימג', לאחסן אותו ב-Artifact Registry ואז לפרוס אותו ב-Cloud Run.

כדי לבנות ולפרוס תמונה:

  1. בתיקיית השורש של הפרויקט, יוצרים קובץ הגדרות בשם cloudbuild.yaml.

  2. בקובץ התצורה של ה-build, מוסיפים docker שלבי build כדי ליצור את קובץ האימג' ולהעביר אותו בדחיפה ל-Artifact Registry, ואז מוסיפים gcloud שלב build כדי להפעיל את הפקודה gcloud run deploy ולפרוס את קובץ האימג' ב-Cloud Run:

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '--region', 'SERVICE_REGION']
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'
    

    כאשר:

    • ‫REPOSITORY הוא שם המאגר ב-Artifact Registry שממנו פורסים את האימג'.
    • ‫LOCATION הוא המיקום של מאגר Artifact Registry, כמו us-east1.
    • ‫PROJECT_ID הוא מזהה הפרויקט Google Cloudשבו התמונה מאוחסנת.
    • ‫SERVICE_NAME הוא השם של שירות Cloud Run.
    • ‫SERVICE_REGION הוא האזור של שירות Cloud Run שאתם פורסים.
    • ‫IMAGE הוא השם של קובץ האימג' ב-Artifact Registry.
  3. עוברים לתיקיית השורש של הפרויקט ומריצים את הפקודה הבאה, כאשר LOCATION הוא אחד מאזורי הבנייה הנתמכים להרצת הבנייה:

     gcloud builds submit --region=LOCATION
    

אחרי השלמת הפריסה בהצלחה, מוצגת הודעת הצלחה יחד עם כתובת ה-URL של השירות שנפרס.

פריסה רציפה

אתם יכולים ליצור טריגרים של Cloud Build כדי לבצע אוטומציה של פריסת התוכנה ב-Cloud Run. אתם יכולים להגדיר את הטריגרים כך שיבצעו build ויפרוסו תמונות בכל פעם שתעדכנו את קוד המקור.

כדי להפוך את הפריסה לאוטומטית:

  1. בשורש המאגר, מוסיפים קובץ הגדרות בשם cloudbuild.yaml עם השלבים ליצירת התמונה, להעברת התמונה אל Artifact Registry ולהפעלת הפקודה gcloud run deploy:

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: 
        - 'run'
        - 'deploy'
        - 'SERVICE_NAME'
        - '--image'
        - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
        - '--region'
        - 'SERVICE_REGION'
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
    

    כאשר:

    • ‫REPOSITORY הוא שם המאגר ב-Artifact Registry שממנו פורסים את האימג'.
    • ‫LOCATION הוא המיקום של מאגר Artifact Registry, כמו us-east1.
    • ‫PROJECT_ID הוא מזהה הפרויקט Google Cloudשבו התמונה מאוחסנת.
    • ‫SERVICE_NAME הוא השם של שירות Cloud Run.
    • ‫SERVICE_REGION הוא האזור של שירות Cloud Run שאתם פורסים.
    • ‫IMAGE הוא השם של קובץ האימג' ב-Artifact Registry.

    משתנה ההחלפה $COMMIT_SHA מאוכלס על ידי Cloud Build כשהוא מופעל ממאגר Git.

  2. יוצרים טריגר לפיתוח גרסת Build באמצעות קובץ התצורה שנוצר בשלב הקודם:

    1. פותחים את הדף מפעילים:

      כניסה לדף Triggers

    2. לוחצים על Create Trigger (יצירת טריגר).

    3. בשדה שם, מזינים שם לטריגר.

    4. בקטע Region (אזור), בוחרים את האזור של הטריגר.

    5. בקטע Event (אירוע), בוחרים את אירוע המאגר שרוצים להגדיר כטריגר.

    6. בקטע Source (מקור), בוחרים את המאגר ואת שם הענף או התג שיתחילו את הטריגר. מידע נוסף על הגדרת הענפים שייבנו באופן אוטומטי זמין במאמר בנושא יצירת טריגר לפיתוח גרסת Build.

    7. בקטע Configuration, בוחרים באפשרות Cloud Build configuration file (YAML or JSON) (קובץ הגדרות של Cloud Build‏ (YAML או JSON)).

    8. בשדה Cloud Build configuration file location, מקלידים cloudbuild.yaml אחרי /.

    9. לוחצים על יצירה כדי לשמור את טריגר לפיתוח גרסת Build.

    מעכשיו, כשדוחפים קוד חדש למאגר, Cloud Build מפעיל build ומפריס את השירות ב-Cloud Run.

מידע נוסף על יצירת טריגרים של Cloud Build זמין במאמר בנושא יצירה וניהול של טריגרים של Build.

דוגמאות לקוד

הנה כמה מאגרי דוגמאות, שכל אחד מהם מכיל אפליקציה לדוגמה וקובץ הגדרות build לפריסת האפליקציה ב-Cloud Run:

  • ‫deploy-prebuilt: דוגמה לקוד שמראה איך לפרוס אימג' שנוצר מראש ב-Cloud Run.
  • ‫run-example-builddeploy: דוגמת קוד שמראה איך ליצור ולפרוס תמונה ב-Cloud Run.

המאמרים הבאים