אימות האפליקציה אחרי הפריסה

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

במדריך למתחילים הזה תבצעו את הפעולות הבאות:

  1. יצירת אשכול GKE אחד או שירות Cloud Run אחד.

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

  2. מגדירים את צינור עיבוד הנתונים לפריסה ואת יעד הפריסה ב-Cloud Deploy.

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

  3. יוצרים הגדרת Skaffold שנדרשת לגרסה, ומניפסט של Kubernetes או הגדרת שירות של Cloud Run.

  4. יוצרים גרסת הפצה, שנפרסת באופן אוטומטי ביעד.

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

  5. אפשר לראות את תוצאות האימות ביומני Cloud Build, באמצעות הדף Rollout details של Cloud Deploy במסוףGoogle Cloud .

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

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init

    אם כבר התקנתם את ה-CLI, צריך לוודא שאתם מריצים את הגרסה העדכנית ביותר:

    gcloud components update
    

  7. מוודאים שלחשבון השירות שמשמש כברירת מחדל ב-Compute Engine יש הרשאות מספיקות.

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

    1. קודם מוסיפים את התפקיד clouddeploy.jobRunner:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@ \
          --role="roles/clouddeploy.jobRunner"
      

    2. מוסיפים את תפקיד המפתח לסביבת זמן הריצה הספציפית.
      • ב-GKE:

        gcloud projects add-iam-policy-binding PROJECT_ID \
            --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
            --format="value(projectNumber)")-compute@ \
            --role="roles/container.developer"
        

      • ל-Cloud Run:

        gcloud projects add-iam-policy-binding PROJECT_ID \
            --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
            --format="value(projectNumber)")-compute@ \
            --role="roles/run.developer"
        

    3. מוסיפים את התפקיד iam.serviceAccountUser, שכולל את ההרשאה actAs לפריסה בסביבת זמן הריצה:

      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@ \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@ \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

יצירת סביבת זמן ריצה

אם אתם פורסים ל-Cloud Run, אתם יכולים לדלג על הפקודה הזו.

ב-GKE, יוצרים אשכול אחד: deploy-verification-cluster, עם הגדרות ברירת מחדל. נקודת קצה ל-API של Kubernetes באשכול צריכה להיות נגישה מהאינטרנט הציבורי. אשכולות GKE נגישים חיצונית כברירת מחדל.

gcloud container clusters create-auto deploy-verification-cluster \
                 --project=PROJECT_ID \
                 --region=us-central1

יצירת צינור העברת נתונים ויעדים

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

  1. פותחים חלון טרמינל.

  2. יוצרים ספרייה חדשה ועוברים אליה.

    GKE

    mkdir deploy-verification-gke-quickstart
    cd deploy-verification-gke-quickstart
    

    Cloud Run

    mkdir deploy-verification-run-quickstart
    cd deploy-verification-run-quickstart
    
  3. יוצרים את צינור ההפצה ואת הגדרת היעד:

    GKE

    בספרייה deploy-verification-gke-quickstart, יוצרים קובץ חדש: clouddeploy.yaml, עם התוכן הבא:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: deploy-verification-demo-app-gke-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: verify-staging
        profiles: []
        strategy:
          standard:
            verify:
              tasks:
              - type: container
                image: ubuntu
                command: ["/bin/sh"]
                args: ["-c", 'echo "Your test or tests would go here."' ]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: verify-staging
    description: verification staging cluster
    gke:
      cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-verification-cluster
    

    Cloud Run

    בספרייה deploy-verification-run-quickstart, יוצרים קובץ חדש: clouddeploy.yaml, עם התוכן הבא:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: deploy-verification-demo-app-run-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: verify-staging
        profiles: []
        strategy:
          standard:
            verify:
              tasks:
              - type: container
                image: ubuntu
                command: ["/bin/sh"]
                args: ["-c", 'echo "Your test or tests would go here."' ]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: verify-staging
    description: staging Run service
    run:
      location: projects/PROJECT_ID/locations/us-central1
    

    הקובץ הזה כולל את פסקה verify בהגדרה של strategy בצינור ההפצה. הוא מגדיר את הקונטיינר ואת הפקודה להפעלה אחרי פריסת האפליקציה. במקרה הזה, אנחנו פורסים קונטיינר של Ubuntu ומריצים פקודה פשוטה של echo. אפשר לראות את התוצאות של הפקודה הזו ביומנים. בתרחיש מציאותי יותר, תריצו בדיקות על האפליקציה שפרסתם.

  4. רושמים את צינור עיבוד הנתונים ואת היעדים בשירות Cloud Deploy:

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
    

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

  5. מאשרים את הצנרת ואת היעדים:

    במסוף Google Cloud , נכנסים לדף Delivery pipelines של Cloud Deploy כדי לראות רשימה של צינורות העברת הנתונים שזמינים לכם.

    פתיחת הדף Delivery pipelines

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

    דף צינור העברת הנתונים במסוף Google Cloud , שבו מוצג צינור העברת הנתונים

יצירת קובץ ההגדרות של Skaffold ומניפסט האפליקציה

‫Cloud Deploy משתמש ב-Skaffold כדי לזהות את המניפסט שבו יש להשתמש כדי לפרוס את אפליקציית הדוגמה אל יעד.

  1. יוצרים קובץ בשם skaffold.yaml עם התוכן הבא:

    GKE

    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - k8s-pod.yaml
    deploy:
      kubectl: {}
    

    Cloud Run

    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - service.yaml
    deploy:
      cloudrun: {}
    

    מידע נוסף על קובץ ההגדרה הזה מופיע בskaffold.yamlמאמר בנושא הפניה.

  2. יוצרים את ההגדרה של האפליקציה – הגדרת שירות ל-Cloud Run או מניפסט של Kubernetes ל-GKE.

    GKE

    יוצרים קובץ בשם k8s-pod.yaml עם התוכן הבא:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-verification-pod
    spec:
      containers:
      - name: nginx
        image: my-app-image
    

    הקובץ הזה הוא מניפסט בסיסי של Kubernetes, שמוחל על האשכול כדי לפרוס את האפליקציה. קובץ האימג' של הקונטיינר שרוצים לפרוס מוגדר כאן כ-placeholder, ‏ my-app-image, שמוחלף באימג' הספציפי כשיוצרים את הגרסה.

    Cloud Run

    יוצרים קובץ בשם service.yaml עם התוכן הבא:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: my-verification-run-service
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    הקובץ הזה הוא הגדרה בסיסית של שירות Cloud Run, שמשמשת לפריסת האפליקציה. קובץ האימג' של קונטיינר לפריסה מוגדר כאן כפלייסהולדר, my-app-image, שמוחלף באימג' הספציפי כשיוצרים את הגרסה.

יצירת גרסה

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

GKE

מריצים את הפקודה הבאה מהספרייה deploy-verification-gke-quickstart כדי ליצור משאב release שמייצג את קובץ האימג' של הקונטיינר לפריסה:

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=deploy-verification-demo-app-gke-1 \
   --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa

שימו לב לדגל --images=, שמשמש להחלפת ה-placeholder ‏ (my-app-image) במניפסט בתמונה ספציפית עם חתימת SHA. ‫Google ממליצה ליצור תבניות למניפסטים בדרך הזו, ולהשתמש בשמות תמונות שעומדים בדרישות של SHA כשיוצרים גרסת הפצה.

Cloud Run

מריצים את הפקודה הבאה מהספרייה deploy-verification-run-quickstart כדי ליצור משאב release שמייצג את קובץ האימג' של הקונטיינר לפריסה:

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=deploy-verification-demo-app-run-1 \
   --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a

שימו לב לדגל --images=, שמשמש להחלפת ה-placeholder ‏ (my-app-image) בהגדרת השירות בתמונה הספציפית שמוגדרת באמצעות SHA. ‫Google ממליצה ליצור תבניות להגדרות השירות בדרך הזו, ולהשתמש בשמות תמונות שעומדים בדרישות של SHA כשיוצרים מהדורה.

בדומה לכל פריטי התוכן (אלא אם הם כוללים --disable-initial-rollout), גם Cloud Deploy יוצר באופן אוטומטי משאב פריסת גרסה. האפליקציה נפרסת באופן אוטומטי ליעד אחד שהוגדר לצורך צינור אספקה (pipeline) זה.

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

הצגת התוצאות במסוף Google Cloud

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

משימת האימות שהגדרנו (לצורך הדוגמה) מדפיסה מחרוזת ביומן של Cloud Build. אנחנו יכולים לראות את היומן הזה כדי לוודא שהאימות פעל כמצופה.

  1. במסוף Google Cloud , עוברים לדף Delivery pipelines (צינורות העברה) של Cloud Deploy כדי לראות את צינור ההעברה ("deploy-verification-demo-app-gke-1" או "deploy-verification-demo-app-run-1").

    פתיחת הדף Delivery pipelines

  2. לוחצים על השם של צינור העברת הנתונים (deploy-verification-demo-app-gke-1 או deploy-verification-demo-app-run-1).

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

    הדמיה של צינור העברת נתונים שמראה הצלחה

    פריט התוכן יופיע בכרטיסייה פריטי תוכן בקטע פרטים על צינור ההפצה.

  3. בכרטיסייה Rollouts (השקות), בקטע Delivery pipeline details (פרטים על צינור ההפצה).

  4. לוחצים על שם ההשקה כדי לראות את פרטי ההשקה.

    rollouts in Google Cloud console

    אימות מופיע כמשימה.

  5. לוחצים על אימות.

    יוצג יומן הפעלת העבודה.

  6. גוללים למטה ברשימת רשומות היומן כדי למצוא את verification-test ולוחצים עליה.

    רשומה ביומן שבה מוצג פלט מהעבודה Verify

    שימו לב לtextPayload. המחרוזת הזו היא מה שהוגדר בקטע Verify בצינור ההפצה.

הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה:

  1. מוחקים את אשכול GKE או את שירות Cloud Run:

    GKE

    gcloud container clusters delete deploy-verification-cluster --region=us-central1 --project=PROJECT_ID
    

    Cloud Run

    gcloud run services delete my-verification-run-service --region=us-central1 --project=PROJECT_ID
    
  2. מחיקת צינור העברת התוכן, היעד, הגרסה וההשקה:

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  3. מוחקים את הקטגוריות של Cloud Storage שנוצרו על ידי Cloud Deploy.

    אחד מסתיים ב-_clouddeploy, והשני הוא [region].deploy-artifacts.[project].appspot.com.

    פתיחת הדף Cloud Storage browser

סיימתם את המדריך למתחילים.

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