במאמר הזה מוסבר איך להפעיל את צינור עיבוד הנתונים לפיתוח רציף (continuous delivery) של Cloud Deploy ממערכת האינטגרציה הרציפה (CI).
כדי לשלב את Cloud Deploy עם מערכת ה-CI, פשוט מוסיפים קריאה ל-gcloud
CLI של Cloud Deploy. השיחה הזו מתרחשת בנקודה בצינור ה-CI שבה האפליקציה מוכנה לפריסה.
לפני שמתחילים
ההוראות בדף הזה מבוססות על ההנחה שכבר עמדתם בתנאים הבאים:
יש לכם לפחות צינור העברת נתונים אחד מוגדר ורשום ב-Cloud Deploy.
הגדרתם לפחות יעד אחד, וצינור העברת הנתונים שלכם מפנה ליעד הזה.
התקשרות אל Cloud Deploy מצינור ה-CI
הפקודה הבאה יוצרת גרסה חדשה, וכך מפעילה מופע של צינור העברת נתונים:
gcloud deploy releases create RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION \
--annotations=[KEY=VALUE,...] \
--images=[IMAGE_LIST]
איפה...
RELEASE_NAME
הוא השם שאתם נותנים לפריט התוכן הזה. חובה לציין ערך.
אפשר לציין שמות דינמיים של גרסאות על ידי הוספת
'$DATE'או'$TIME'או שניהם. לדוגמה, אם מפעילים את הפקודה הזו בשעה 15:07 (שעון UTC), הערך של'rel-$TIME'יהיהrel-1507. הערכים של'$DATE'ושל'$TIME'צריכים להיות במירכאות בודדות.PIPELINE_NAME
הוא השם של צינור העברת הנתונים הרשום. חובה לציין ערך.
REGION
הוא האזור שבו אתם יוצרים את הגרסה הזו. האזור לא צריך להיות אותו אזור שבו בסופו של דבר תפרסו את האפליקציה.
[KEY=VALUE,...]
הוא רשימה אופציונלית של הערות (annotations) אחת או יותר שרוצים להחיל על הפריט, בצורה של צמדי מפתח/ערך.
אפשר להשתמש בהערות כדי לעקוב אחרי מקורות של גרסאות, למשל, על ידי העברת הערה כמו
commitId=0065ca0. כל ההערות על פריט התוכן מוחזרות כשמבצעיםlistאוgetשל פריט התוכן, והן מוצגות עם פריט התוכן ב Google Cloud מסוף, כך שאפשר לראות שם גם את מקור פריט התוכן.[IMAGE_LIST]
היא רשימה מופרדת בפסיקים של החלפות של שם תמונה בנתיב תמונה. לדוגמה:
--images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18.הערך הזה לא נדרש אם מעבירים את
--build-artifacts, שמזהה קובץ פלט של ארטיפקטים של בנייה ב-Skaffold.כש-Cloud Deploy מעבד את המניפסט, שם התמונה במניפסט שלא עבר עיבוד מוחלף בהפניה המלאה לתמונה במניפסט שעבר עיבוד. כלומר,
image1מהדוגמה הזו נמצא במניפסט שלא עבר רינדור, והוא מוחלף במניפסט שעבר רינדור ב-path/to/image1:v1@sha256:45db24.
דוגמה לשימוש בהפניה ישירה לתמונה
הפקודה הבאה יוצרת גרסה חדשה, ומעבירה הפניה לתמונה ישירות, במקום קובץ של ארטיפקטים של build:
gcloud deploy releases create my-release \
--delivery-pipeline=web-app \
--region=us-central1 \
--images=image1=path/to/image1:v1@sha256:45db24
בדוגמה הזו, my-release הוא שם הגרסה. אם רוצים ליצור שם גרסה על סמך תאריך או שעה, אפשר לכלול את '$DATE' או את 'TIME' או את שניהם. השעה היא לפי שעון UTC במחשב שבו מפעילים את הפקודה. '$DATE'
ו-'$TIME' צריכים להיות במירכאות בודדות.
הנה דוגמה:
gcloud deploy releases create rel-'$DATE'-'$TIME' \
--delivery-pipeline=web-app \
--region=us-central1 \
--images=image1=path/to/image1:v1@sha256:45db24
בדוגמה הזו, הפקודה יוצרת שם של גרסה עם הקידומת rel-, בתוספת התאריך והשעה, למשל: rel-20220131-1507.
מקובל גם להשתמש ב-SHA של Git בשם של גרסה. אפשר לראות דוגמאות ל-Cloud Build ול-Docker במסמך הזה.
יצירת תוצרים לעומת יצירת תמונות
בפקודה gcloud deploy releases create אפשר להעביר קבוצה של תמונות לדוגמה או הפניה לקובץ של ארטיפקטים של בנייה.
משתמשים ב-
--images=[NAME=TAG,...]כדי להתייחס לתמונות של מאגר אחד או יותר.הערך הזה הוא הפניה לאוסף של החלפות של שמות תמונות בודדות בנתיב המלא של התמונה. הנה דוגמה:
gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24משתמשים ב-
--build-artifacts=כדי להפנות לקובץ פלט של ארטיפקטים של בנייה ב-Skaffold.
דוגמאות ל-Cloud Build, העברת קובץ ארטיפקטים של build
דוגמה ל-Docker build
קובץ ה-YAML הבא מדגים Cloud Build עבור Docker build, העברה בדחיפה של קובץ אימג' ויצירה של מהדורת Cloud Deploy.
בדוגמה הזו נוצר קובץ אימג' ומועבר למאגר ארטיפקטים, ונוצרת פקודה ליצירת גרסה, עם שם גרסה שמבוסס על ה-SHA הקצר של הקומיט. חובה להשתמש בדוגמה הזו כטריגר של Cloud Build SCM כי היא מסתמכת על המשתנה $COMMIT_SHA.
בדוגמה הזו, תמונה מועברת לתג Docker שזהה לגיבוב (hash) של הקומיט במאגר המקור. אחר כך, הגיבוב של אותה התחייבות, כתג Docker, מפנה לארגומנטים של פקודת השחרור.
steps:
# Build and tag using commit sha
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '.', '-t', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}', '-f', 'Dockerfile']
# Push the container image
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}']
# Create release in Google Cloud Deploy
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
entrypoint: gcloud
args:
[
"deploy", "releases", "create", "rel-${SHORT_SHA}",
"--delivery-pipeline", "PIPELINE_NAME",
"--region", "us-central1",
"--annotations", "commitId=${REVISION_ID}",
"--images", "IMAGE_NAME=REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}"
]
שימו לב: שם התמונה בסוף הדוגמה הזו, "--images", "IMAGE_NAME=, מוחלף במניפסט המעובד בהפניה המלאה לתמונה.
דוגמה להגדרת Cloud Build באמצעות Skaffold
קובץ ה-YAML הבא הוא התוכן של הגדרת build ב-Cloud Build שכוללת קריאה ל-Cloud Deploy כדי ליצור גרסת הפצה, עם שם גרסת הפצה שמבוסס על התאריך. בדוגמה הזו אפשר לראות גם את Skaffold שמשמש לבנייה.
steps:
- name: gcr.io/k8s-skaffold/skaffold
args:
- skaffold
- build
- '--interactive=false'
- '--file-output=/workspace/artifacts.json'
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
entrypoint: gcloud
args:
[
"deploy", "releases", "create", "rel-${SHORT_SHA}",
"--delivery-pipeline", "PIPELINE_NAME",
"--region", "us-central1",
"--annotations", "commitId=${REVISION_ID}",
"--build-artifacts", "/workspace/artifacts.json"
]
חיבור של GitHub Actions ל-Cloud Deploy
אם אתם משתמשים ב-GitHub Actions לשילוב רציף או לפעילויות אחרות שקשורות להפצת תוכנה, אתם יכולים להתחבר ל-Cloud Deploy להפצה רציפה באמצעות create-cloud-deploy-release GitHub Action.
חיבור GitLab ל-Cloud Deploy
אם אתם משתמשים ב-GitLab לאינטגרציה רציפה, אתם יכולים להשתמש ברכיב GitLab Cloud Deploy create-cloud-deploy-release כדי ליצור מהדורה של Cloud Deploy.
אפשר גם לנסות את המדריך המלא לשימוש ב-GitLab עם Google Cloud.
שימוש בהערות כדי לעקוב אחר מקור הגרסה
הדגל --annotations= מאפשר להחיל על הגרסה שנוצרת באמצעות הפקודה הזו צמד מפתח/ערך שרירותי אחד או יותר. מוסיפים את הדגל הזה לפקודה gcloud deploy releases create.
לדוגמה, אפשר להשתמש בצמדי מפתח/ערך הבאים כדי לעקוב אחרי המקור של התמונה שרוצים להטמיע.
הנה דוגמה:
gcloud deploy releases create web-app-1029rel \
--delivery-pipeline=web-app \
--region=us-central1 \
--annotations=commitId=0065ca0,author=user@company.com \
--images=image1=path/to/image1:v1@sha256:45db24
אפשר גם ליצור הערה שהערך שלה הוא כתובת ה-URL שמפנה לבקשת המיזוג, למשל. מידע נוסף זמין במאמר שימוש בתוויות ובהערות עם Cloud Deploy.