אימות הפריסה

במאמר הזה מוסבר איך לאמת פריסה של Cloud Deploy.

אתם יכולים להגדיר את Cloud Deploy כך שיבדוק שאפליקציה שפרסתם בכל יעד פועלת בצורה תקינה. האימות מתבצע באמצעות תמונה או תמונות בדיקה משלכם, ואתם מגדירים את Cloud Deploy להפעיל את הבדיקות האלה אחרי שהפריסה מסתיימת.

איך פועל אימות הפריסה?

  1. מגדירים יעד אחד או יותר בצינור העברת הנתונים (pipeline) שלכם לצורך אימות הפריסה, על ידי הגדרת משימות להפעלה.

  2. אחרי פריסת האפליקציה, Cloud Deploy מפעיל את משימות האימות בסביבת ההפעלה של Cloud Deploy.

    הצלחה או כישלון של הבדיקות שבוצעו מציינים הצלחה או כישלון של האימות:

    • הצלחת האימות נקבעת לפי קוד היציאה שנוצר על ידי מאגר התגים.

      0 מציין הצלחה. קוד יציאה שאינו אפס מציין כשל. כדי ליצור את תוצאת האימות הצפויה, מוודאים שהקונטיינר יוצא עם קוד היציאה המתאים. אם יותר ממאגר תגים אחד מופעל כחלק מהאימות, האימות יצליח רק אם כל מאגרי התגים יפעלו בהצלחה.

    • אם האימות ייכשל, גם ההשקה תיכשל.

    • אם פריסה נכשלת במהלך האימות, אפשר לראות זאת בבדיקה של הפריסה:

      פרטים ב- Google Cloud console לגבי ההשקה, כולל סטטוס האימות

  3. אתם יכולים להתעלם מאימות שנכשל או לנסות שוב.

    אפשר גם להפסיק עבודת אימות שנמצאת בתהליך.

רכיבים שמשמשים לאימות

משאב ההשקה כולל את האובייקטים הבאים, שתומכים באימות הפריסה:

  • שלב

    אוסף הפעולות (העבודות) בהשקה שמקובצות יחד באופן לוגי, למשל פריסה או פריסה ואימות.

  • משימה

    הפעולה הספציפית שצריך לבצע בהשקה, כמו פריסה או אימות.

  • הרצת משימה

    הפעלת העבודה היא צאצא של משאב ההשקה, והיא מופע של עבודה, למשל ניסיון לפרוס.

מידע נוסף על משאבי Cloud Deploy זמין במאמר ארכיטקטורת שירות Cloud Deploy

הגדרת Cloud Deploy לאימות פריסה

כדי להפעיל אימות פריסה ליעד Cloud Deploy, צריך להוסיף קטע verify ליעד (או ליעדים) מסוים בהתקדמות של צינור אספקה, כמו בדוגמה הזו:

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
 name: my-demo-app
description: main application pipeline
serialPipeline:
 stages:
 - targetId: dev
   profiles: []
   strategy:
     standard:
       verify:
         tasks:
         - type: container
           image: "VERIFY_IMAGE"
           command: [COMMANDS_TO_RUN]
           args: [LIST_OF_ARGS]
           env: {VERIFY_TASK_ENV_MAP}

ב-YAML הזה:

  • VERIFY_IMAGE

    הוא השם של התמונה שרוצים להריץ עבור עבודת האימות. לדוגמה, us-central1-docker.pkg.dev/gcp-project-id-12345/my-repository/my-app:v1.2 לתמונה ב-Artifact Registry.

  • COMMANDS_TO_RUN

    רשימה של נקודות כניסה להפעלה במאגר הזה. ‫"/bin/sh" היא פקודה טיפוסית שאפשר לציין כאן כדי להפעיל מעטפת.

  • LIST_OF_ARGS

    היא רשימה של ארגומנטים שצריך לספק לפקודה. זו רשימה מופרדת בפסיקים, וכל ארגומנט מופיע במירכאות. אם COMMAND_TO_RUN הוא "/bin/sh", אז אחד הארגומנטים כאן יהיה "-c", וארגומנט נוסף יהיה הפקודה כולה שרוצים להריץ במעטפת שמופעלת.

    הנה דוגמה:

    command: ["/bin/sh"]
    args: ["-c", `echo "This command ran!"`]
    
  • VERIFY_TASK_ENV_MAP

    האם מועברת לקונטיינר מפה של משתני סביבה, בפורמט KEY:VAL.

פעולת האימות מבוצעת בסביבת ביצוע משלה. אפשר להגדיר את סביבת ההפעלה הזו עבור VERIFY בדיוק כמו שאפשר להגדיר אותה עבור RENDER ו-DEPLOY.

הפעלת אימות באשכול האפליקציות

כברירת מחדל, אימות הפריסה פועל בסביבת ההפעלה של Cloud Deploy. אפשר גם להגדיר את Skaffold להפעיל אימות באותו אשכול שבו האפליקציה פועלת.

כדי להריץ את מאגרי האימות באשכול, צריך להגדיר את מאגרי האימות בקטע verify stanza בקובץ skaffold.yaml. לכל מאגר שהוגדר צריך להגדיר גם את executionMode.kubernetesCluster.

verify:
- name:
  container:
    name:
    image:
    command:
    args:
  executionMode:
    kubernetesCluster:

בדוגמה הבאה מוצג קטע verify שכולל executionMode כדי להפעיל את מאגר האימות באשכול האפליקציות:

verify:
- name: integration-test-container
  container:
    name: integration-test-container
    image: integration-test-container
  executionMode:
    kubernetesCluster: {}

בנוסף, צריך להגדיר את פסקה verify ל-true בהגדרת צינור ההפצה.

בדוגמה הבאה מוצגת הגדרה של צינור להעברת נתונים שבו האימות מופעל עבור יעד dev.

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
 name: my-demo-app
description: main application pipeline
serialPipeline:
 stages:
 - targetId: dev
   profiles: []
   strategy:
     standard:
       verify: true

האפשרות הזו זמינה רק לפריסות ב-GKE, ולא ב-Cloud Run. פריסות ב-Cloud Run יכולות להריץ אימות רק בסביבת ההפעלה של Cloud Deploy.

בפריסות מקבילות, האימות מוגדר ביעד מרובה, ומאגרי האימות פועלים בכל יעד צאצא.

אפשר גם לכלול את המאפיינים jobManifestPath ו-overrides, בקטע kubernetesCluster, כדי להפנות למניפסט של מאגר התגים לאימות, ולכלול את כל הערכים שרוצים לשנות. (הערך overrides הוא JSON מוטבע של Kubernetes עם הערכים שרוצים להחליף). מידע נוסף

הפסקה executionMode היא אופציונלית, ואם משמיטים אותה, Skaffold מריץ את קונטיינרי האימות בסביבת ההפעלה של Cloud Deploy.

ניסיון חוזר של האימות

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

gcloud deploy rollouts retry-job ROLLOUT_NAME \
             --job-id=JOB_ID \
             --phase-id=PHASE_ID \
             --delivery-pipeline=PIPELINE_NAME \
             --release=RELEASE_NAME \
             --region=REGION

ניסיון חוזר לאימות משנה את מצב ההשקה מFAILED לIN_PROGRESS.

אפשר לנסות שוב לאמת רק פריסה שעבודת האימות שלה נכשלה.

משתני סביבה זמינים

‫Cloud Deploy גם מספק ומאכלס את משתני הסביבה הבאים בסביבת הביצוע. אפשר להשתמש במשתני הסביבה האלה כחלק מה-deploy hook, מהאימות של העבודה או מהיעד המותאם אישית שלכם.

  • ANTHOS_MEMBERSHIP

    עבור יעדים מהסוג ANTHOS, שם המשאב המלא של החברות ב-Anthos.

  • CLOUD_RUN_LOCATION

    למטרות מסוג RUN, האזור שבו שירות Cloud Run נפרס.

  • CLOUD_RUN_PROJECT

    למטרות מסוג RUN, הפרויקט שבו נוצר שירות Cloud Run.

  • CLOUD_RUN_SERVICE

    עבור יעדים מסוג RUN, השם של שירות Cloud Run שנפרס.

  • CLOUD_RUN_SERVICE_URLS

    לטרגטים מהסוג RUN, כתובת ה-URL או כתובות ה-URL (רשימה מופרדת בפסיקים) שמשתמשי הקצה ישתמשו בהן כדי לגשת לשירות שלכם. אפשר למצוא אותם בפרטי השירות של Cloud Run בשביל השירות שלכם, בGoogle Cloud מסוף. כתובות ה-URL נוצרות על ידי Cloud Run אחרי ששירות או שירותים של Cloud Run נפרסים בהצלחה. לכן משתנה הסביבה הזה זמין רק ב-postdeploy hooks ובverify jobs.

  • CLOUD_RUN_REVISION

    למטרות מסוג RUN, הגרסה הספציפית של שירות Cloud Run.

  • GKE_CLUSTER

    עבור יעדים מסוג GKE, שם המשאב שצוין במלואו של אשכול Google Kubernetes Engine, לדוגמה projects/p/locations/us-central1/clusters/dev.

  • TARGET_TYPE

    סוג זמן הריצה הספציפי של היעד. אפשר להשתמש ב-GKE, ב-ANTHOS או ב-RUN. הערך הזה לא מוגדר ליעדים מותאמים אישית.

  • CLOUD_DEPLOY_LOCATION

    האזור שמכיל את המשאבים של Cloud Deploy.

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    המזהה של צינור העברת הנתונים.

  • CLOUD_DEPLOY_TARGET

    המזהה של היעד.

  • CLOUD_DEPLOY_PROJECT

    מספר הפרויקט ב- Google Cloud שמכיל את המשאבים של Cloud Deploy.

  • CLOUD_DEPLOY_PROJECT_ID

    מזהה הפרויקט Google Cloud של הפרויקט.

  • CLOUD_DEPLOY_RELEASE

    המזהה של הגרסה שבה יופעלו ה-hooks.

  • CLOUD_DEPLOY_ROLLOUT

    המזהה של ההשקה שכוללת את המשימות של ה-hooks.

  • CLOUD_DEPLOY_JOB_RUN

    המזהה של הפעלת המשימה שמייצג את ההרצה הנוכחית של המשימה.

  • CLOUD_DEPLOY_PHASE

    השלב בהשקה שכולל את העבודה של ה-hook לפריסה, עבודת האימות או עיבוד או פריסה בהתאמה אישית.

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